摘要
本文讲述的是再kali下面的python2.7中安装pwntools工具,这个工具是打ctf必备工具也是解pwn必备工具,本文将一步步介绍如何安装成功。
0x01 pwntools介绍
pwntools从名字上看像是在解PWN题目使所用的工具,没错,确实使的,他使基于Python的,就是Python中的一个库,但是这个库很强大,里面包含了很多方法,比如连接可执行文件,进行读写通信,还可以生成shellcode以及将ams转化为shellcode。下面将仔细讲述这款工具的安装,这款工具在安装的时候会遇到坑,博主也是在论坛提问最终才找到解决方案。
0x02 基础环境
kali Linxu操作系统,其实只要是Linux就行,Ubuntu支持更好,注意操作系统位数,最好使X64的,因为在X32下会有些函数用不了。
Python2.7 ,这款工具对Python2.7的支持是最好的,当然也支持Python3.X,但是还是2.7版本更好一些。
pip工具,Python下面的一个安装工具,可以很方便的管理Python库,很久之前pwntools是不支持pip安装的,但是现在经过更新以及支持了,网上很多安装教程都是从gitHub下在安装包进行安装,有时候还需要安装依赖,现在完全不必要。
0x03 开始安装
使用如下命令进行pwntools的安装:
root@kTWO:~# pip install pwntools
1
root@kTWO:~# pip install pwntools
这个过程可能会很漫长,最后会提示Successful,毫无报错,下面我们来使用一下。
导入pwn包:
root@kTWO:~# python
Python 2.7.15+ (default, Aug 31 2018, 11:56:52)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import *
1
2
3
4
5
root@kTWO:~# python
Python2.7.15+(default,Aug312018,11:56:52)
[GCC8.2.0]onlinux2
Type"help","copyright","credits"or"license"formoreinformation.
>>>frompwnimport *
当我们按下回车的时候,我尼玛,好多错误:
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python2.7/dist-packages/pwn/__init__.py", line 4, in
from pwn.toplevel import *
File "/usr/local/lib/python2.7/dist-packages/pwn/toplevel.py", line 20, in
import pwnlib
File "/usr/local/lib/python2.7/dist-packages/pwnlib/__init__.py", line 43, in
importlib.import_module('.%s' % module, 'pwnlib')
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/usr/local/lib/python2.7/dist-packages/pwnlib/dynelf.py", line 56, in
from pwnlib import elf
File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/__init__.py", line 9, in
from pwnlib.elf.corefile import Core
File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/corefile.py", line 84, in
from pwnlib.elf.elf import ELF
File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py", line 54, in
from elftools.elf.enums import ENUM_P_TYPE
ImportError: cannot import name ENUM_P_TYPE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Traceback(mostrecentcalllast):
File"",line1,in
File"/usr/local/lib/python2.7/dist-packages/pwn/__init__.py",line4,in
frompwn.toplevelimport *
File"/usr/local/lib/python2.7/dist-packages/pwn/toplevel.py",line20,in
importpwnlib
File"/usr/local/lib/python2.7/dist-packages/pwnlib/__init__.py",line43,in
importlib.import_module('.%s'%module,'pwnlib')
File"/usr/lib/python2.7/importlib/__init__.py",line37,inimport_module
__import__(name)
File"/usr/local/lib/python2.7/dist-packages/pwnlib/dynelf.py",line56,in
frompwnlibimportelf
File"/usr/local/lib/python2.7/dist-packages/pwnlib/elf/__init__.py",line9,in
frompwnlib.elf.corefileimportCore
File"/usr/local/lib/python2.7/dist-packages/pwnlib/elf/corefile.py",line84,in
frompwnlib.elf.elfimportELF
File"/usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py",line54,in
fromelftools.elf.enumsimportENUM_P_TYPE
ImportError:cannotimportnameENUM_P_TYPE
emmmmm此处一脸懵逼
我也是既Google又百度,结果全网都没有和我遇到相似问题的,我又下载了kali32位版本的虚拟机,结果仍然也是这样,真的没办法了,去了某论坛求助,经过几天的悬赏,终于有人帮我解决了。相信很多人都会遇到和我相似的问题。
0x04 报错解决方案
根据报错我们定位到文件:/usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py
使用编辑器,将文件中所有的ENUM_P_TYPE改为ENUM_P_TYPE_BASE,一般在54行和1749行。
问题解决,重新运行。
改成上面图片中的样子即可。
重新运行脚本,发现不会报错了,下面试一下进本的函数是否可用:
Python
root@kTWO:~# python
Python 2.7.15+ (default, Aug 31 2018, 11:56:52)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import *
>>> asm('xor eax,1')
'\x83\xf0\x01'
1
2
3
4
5
6
7
root@kTWO:~# python
Python2.7.15+(default,Aug312018,11:56:52)
[GCC8.2.0]onlinux2
Type"help","copyright","credits"or"license"formoreinformation.
>>>frompwnimport*
>>>asm('xor eax,1')
'\x83\xf0\x01'
我们发现asm()函数可以正常执行。这说明我们的安装暂时是没有问题的。
0x05 补充
如果上面的方法你仍然无法安装可尝试先安装下面的依赖:
git clone https://github.com/aquynh/capstone
cd capstone
make
1
2
3
gitclonehttps://github.com/aquynh/capstone
cdcapstone
make
等到编译完成后执行安装命令即可
make install
1
makeinstall
然后尝试重新安装