我是靠谱客的博主 暴躁玫瑰,最近开发中收集的这篇文章主要介绍小白初学pwn(一)小白初学pwn,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小白初学pwn

安装pwntools

  • pip install pwntools
  • 坑:最好使用Python2版本去运行你的脚本
  • 进入Python交互环境测试一下我们的pwn是否安装好了
⚡ root@kncc  /work/ctf/pwn-demo  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.
>>> import pwn
>>> import pwn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pwn/__init__.py", line 4, in <module>
    from pwn.toplevel import *
  File "/usr/local/lib/python2.7/dist-packages/pwn/toplevel.py", line 20, in <module>
    import pwnlib
  File "/usr/local/lib/python2.7/dist-packages/pwnlib/__init__.py", line 43, in <module>
    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 <module>
    from pwnlib import elf
  File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/__init__.py", line 9, in <module>
    from pwnlib.elf.corefile import Core
  File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/corefile.py", line 84, in <module>
    from pwnlib.elf.elf import ELF
  File "/usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py", line 54, in <module>
    from elftools.elf.enums import ENUM_P_TYPE
ImportError: cannot import name ENUM_P_TYPE
>>> 

安装pwntools报错


  • 我们发现ImportError: cannot import name ENUM_P_TYPE 出现了这个错误,我百度之后并没有找到相关结果,反而在52pojie上看到一样的问题,是909号,看样子是版本问题
  • 于是我Google了一下,很容易就找到了问题,摘自https://github.com/Gallopsled/pwntools/issues/1189,果然是版本的问题,这个帖子也是在11天才发布,然后大佬给了解决方法
  • Due to ENUM_P_TYPE not in /usr/lib/pythonXX/site-packages/elftools/elf/enums.py, but ENUM_P_TYPE_BASE in it, so there is a solution that change the ENUM_P_TYPE to ENUM_P_TYPE_BASE in /usr/lib/pythonXX/site-packages/pwnlib/elf/elf.py. (Just 2 places: line 54 and line 1749)
    tips: This solution can solve some friends’ problem, but in some cases, will bring other problem. Another solution for solve the whole problem is to reduce your pyelftools version to 0.24.
  • 也就是在这个文件/usr/lib/pythonXX/site-packages/elftools/elf/enums.py里ENUM_P_TYPE这个类型找不到,或者改名字了,反正就是找不到了,在这个文件里面叫ENUM_P_TYPE_BASE
  • 解决方法:在/usr/lib/pythonXX/site-packages/pwnlib/elf/elf.py在这个文件里面,把所有的ENUM_P_TYPE改成ENUM_P_TYPE_BASE就好了,但是这样子极有可能导致别的文件又去问题,可能在下一个版本维护会去更新这个问题,现在最好的解决方法就是降低你的pwntools的版本

  • 我的解决办法:
# os:kali 2018.3
 ⚡ root@kncc  /usr/bin  cat /usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py | grep ENUM_P_TYPE
from elftools.elf.enums import ENUM_P_TYPE
        PT_GNU_STACK = packing.p32(ENUM_P_TYPE['PT_GNU_STACK'])
⚡ root@kncc  sed -i "s/ENUM_P_TYPE/ENUM_P_TYPE_BASE/g" /usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py
⚡ root@kncc  /usr/bin  pcat /usr/local/lib/python2.7/dist-packages/pwnlib/elf/elf.py | grep ENUM_P_TYPE                   
from elftools.elf.enums import ENUM_P_TYPE_BASE
        PT_GNU_STACK = packing.p32(ENUM_P_TYPE_BASE['PT_GNU_STACK'])
  • 现在我们来测试一下
⚡ root@kncc  /usr/bin  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.
>>> import pwn
>>> pwn.asm("xor eax,eax")
'1xc0'
  • ok,成功输出,我的库目录可能和外国网友的不太一样,所以我进行修改了,你们也要进行修改才可以运行
  • 后面会继续写一个pwn demo的解析过程,现在先把大家可能遇到的这个问题发布处理

最后

以上就是暴躁玫瑰为你收集整理的小白初学pwn(一)小白初学pwn的全部内容,希望文章能够帮你解决小白初学pwn(一)小白初学pwn所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部