最近刚开始学习pwn,因为看到有python3版本的pwntools。就安了一下,记录一下目前遇到的坑。
_curses moudle not found
TypeError:can only concatenate str
一、_curses
搜索了很多,都是windows下python缺少_curses库的,显然wsl无法用这个方法解决。最后终于找到一个解决方案,链接如下
针对linux的方案:
sudo pip install curses-2048
动态链接库(_curses_panel.so
_curses.so)的位置不对或者没有创建动态链接库1
2
3
4
5
6
7
8
9
10
11
12
13
14
15find / -iname "_curses*.so" 2>/dev/null
/usr/lib64/python2.6/lib-dynload/_curses.so
/usr/lib64/python2.6/lib-dynload/_curses_panel.so
find / 2>/dev/null | grep 'python2.7/lib-dynload'|head -2
/opt/soft/python-2.7.11/lib/python2.7/lib-dynload
/opt/soft/python-2.7.11/lib/python2.7/lib-dynload/math.so
cp /usr/lib64/python2.6/lib-dynload/_curses*.so /usr/local/lib/python2.7/lib-dynload/
find / -iname "_curses*.so" 2>/dev/null
/usr/lib64/python2.6/lib-dynload/_curses_panel.so
/usr/lib64/python2.6/lib-dynload/_curses.so
/usr/local/lib/python2.7/lib-dynload/_curses_panel.so
/usr/local/lib/python2.7/lib-dynload/_curses.so这样就能让python找到相应的so文件。
二、TypeError
python3里bytes类型和str类型是两个不同的类型,而不是像py2里面作为同一个类型的两个名字。因此在诸如”A“ * N + p64(Addr)
这种形势的payload构造时,会出现问题。
查了好久发现在pwntools github的issue中有一个解答。
对所有要 xx.send()的字符串 要用'latin-1'
进行编码。将其变成bytes类型后进行拼接。
最后的结果就是
bytes("A", 'latin-1') * N + p64(Addr)