我想在pwntools中对pwn学习使用其他版本的库,但是发生EOF错误。
我试图解决此问题,将ubuntu版本更改了3次(18.04桌面-> 14.04桌面-> 18.04.0服务器),重新安装了python和pwntools 4次。 当前,版本为ubuntu 18.04.0服务器,Python 2.7.15rc1,pwntools 3.12.2
我在pwntools中尝试将其他版本库用于pwn研究。 像这样:
p = process("./binary_name",env={"LD_PRELOAD" : "./libc_name"})
并且也尝试过
env = {"LD_PRELOAD": os.path.join(os.getcwd(), "libc_name")}
p = process("./binary_name",env=env)
并执行python代码,发生错误 我已经将libc的权限设置为chmod 777,但是结果是相同的。
[*] Process './aeiou' stopped with exit code -4 (SIGILL) (pid 77469)
Traceback (most recent call last):
File "ex4.py", line 6, in <module>
p.sendlineafter(">>","3")
File "/home/synod2/.local/lib/python2.7/site- packages/pwnlib/tubes/tube.py", line 747, in sendlineafter
~~~~~~~~~~~~~~
EOFError
我不知道为什么发生EOF错误。但是,由于3个不同版本的ubuntu给出了相同的错误,我想我错过了安装一些东西。 但我不知道我错过了什么!
答案 0 :(得分:0)
也许您应该在Ubuntu 16上尝试一下。
显然,您的二进制文件是动态链接的。因此,当程序需要调用某些libc函数(例如read)时。它将一些信息传递给动态链接器,然后链接器将计算读取函数的真实地址。
但是libc中的函数具有版本属性。因此,如果您尝试在Ubuntu 18.04上使用LD_PRELOAD。动态链接器会尝试在您的2.23-version-libc中找到只有read_2_23之类的东西,如read_2_27。因此您的程序将无法执行。