pwntools是一个用python编写的CTF pwn题exploit编写工具,目的是为了帮助 使用者更高效便捷地编写exploit。 目前最新稳定版本为3.12.0(2018年5月 )。文档地址:docs.pwntools.com。
一、环境变量设置
Pwntools的许多设置都是通过全局变量context进行控制的,例如系统、架构、字节序等都可以通过如下的方法更改:
>>> context.clear() #清空context
>>> context.update(arch= ‘ amd64 ’) #设 置架构类型
>>> context.os == 'linux' #设置os类型
二、连接及信息传输类API
要进行漏洞利用,首先就需要与程序进行通信 ,pwntools提供的函数能够与本地或远程进行 通信。
本地程序通过process函数运行,远程通过 remote函数进行连接,示例如下:
通过process函数运行了当前路径下的pwnbin 二进制程序,通过remote函数与 127.0.0.1:4444建立连接。
三、编码类API
在漏洞利用的过程当中,往往需要将输入的payload转 化成8位、16位、32位或64位、大端或小端所对应格 式 。
pwntools提供了一组函数用来对给定的数据按照一定 的格式进行解码和编码。这些函数以p或u为开头,后 面加上一个数字代表位数,例如p32和u32。
pwntools还提供了asm和disasm两个函数进行汇编和反汇编的 转换。
四、文件信息获取类API
在漏洞利用脚本的编写过程中,经常需要使用got表地 址、plt表地址或是system函数在libc中的偏移, pwntool能够快速的帮助你找到相应的地址。
五、libc地址计算类API
DynEFL函数能够在特定情况下解析动态链接的ELF二 进制文件的符号。给定一个函数可以泄漏任意地址信 息,DynEFL函数进而能够解析加载的库中任意符号。 lookup方法用来寻找函数符号的地址。
六、格式化字符串类API
在格式化字符串利用中,攻击者往往需要通过 漏洞实现任意内存地址写,但构造合适的 payload往往需要占用大量的时间。
pwntools中的fmtstr模块中实现了和格式化 字符串漏洞利用相关的多个函数,极大的加速 了漏洞利用脚本的开发速度。
如上代码,通过fmtstr模块中的fmtstr_payload函数 ,生成一段payload实现修改0x8041337地址内容为 0xdeadbeef。
七、调试类API
如在进行漏洞利用的过程中,调试是几乎必不可少的 一个环节,需要通过调试来查看漏洞利用脚本是否达 到了预期目或者得到一些关键信息。
pwntools提供了用于在程序运行中调用gdb的函数。
使用gdb.attach(target, gdbscript = None, exe = None, arch = None)函数来启动gdb调试 。
八、其他漏洞利用类API
用户可以使用shellcraft.arch.os生成相应架构、系统 的shellcode 。
例如64位Linux位shellcraft.amd64.linux,以下为 官方文档示例,通过shellcraft.amd64.linux.sh()可 以生成一段Linux 64位系统下执行shell的汇编代码。