利用缓冲区溢出来达到另一个函数

问题描述 投票:0回答:1

我有一个使用缓冲区溢出来到达另一个函数的作业:

int func1() {
    printf("1");
    return;
}

int func2() {
    char buf[10];
    scanf("%s",buf);
    return;
}

int main() {
    func2();
    return 0;
}

我得到

buf
从地址0x7fffffffe210开始,函数
func1
地址是0x5555555551b1,但我不知道$rip在哪里,所以我不知道需要多少填充。

我还尝试在 Mac 上使用 lldb,问题是相同的。我知道函数地址,但不知道电脑地址。

  • func1
    地址是0x5555555551b1
  • func2
    地址是0x5555555551c3
  • buf
    地址是0x7fffffffe210
  • 无法找到$rip
c buffer-overflow
1个回答
0
投票

为此,您需要在 func2 中调用 func1,但您需要检查堆栈的增长方式。地址是否变小或变大。如果它们变小,那么你很幸运。如果它们变得更大,你必须尝试 -ve 索引。所以

void func1()
{
    char small[1];
    /* try accessing small[2] or higher - see whether you can get to func2 variables*/
}

void func2()
{
    char reachable[] = "Success";
    func1();
}

int main()
{
    char reachable[] = "woo hoo";
    func2();
 }
© www.soinside.com 2019 - 2024. All rights reserved.