Pwntools使用介绍
具体内容可以参考pwntools官方文档(Google关键词搜索)
一、环境变量设置
pwntools的许多设置都是通过全局变量context进行控制的,例如系统、架构、字节序等都可以通过如下的方法更改:
1 | context.clear() |
二、连接及信息传输类API
要进行漏洞利用,首先就要与程序进行通信,pwntools提供的函数能够与本地或远程进行通信。
本地程序通过process函数运行,远程通过remote函数进行连接,示例如下:
1 | sh=process('./pwn') |
通过process函数运行了当前路径下的二进制pwn程序,通过remote函数与127.0.0.1:4444建立连接
1 | p=process('./pwn') |
三、编码类API
在漏洞利用的过程中,需要将输入的payload转化为8位、16位、32位或64位、大端或小端所对应的格式。
pwntools提供了一组函数用来对给定的数据按照一定的格式进行解码和编码。
如:
1 | >>> p32(0x08040000) |
pwntools还提供了asm和disasm两个函数进行汇编和反汇编的转换。
四、文件信息获取类API
在漏洞利用脚本的编写过程中,经常需要使用got表地址、plt表地址或system函数在libc中的偏移,pwntools能够快速的帮助你找到相应的地址。
1 | elf=ELF('./pwn') |
五、libc地址计算类API
1 | sh=process('./pwn') |
六、格式化字符串类API
在格式化字符串利用中,攻击者往往需要通过漏洞实现任意内存地址写,但构造合适的payload往往需要占用大量的时间。
pwntools中的fmtstr模块中实现了和格式化字符串漏洞利用相关的多个函数,极大地加速了漏洞利用脚本的开发速度。
1 | >>>fmt_payload(5,{0x8041337:0xdeadbeef},write_size='short') |
如上代码,通过fmtstr模块中的fmtstr_payload函数,生成一段payload实现修改0x8041337地址内容为0xdeadbeef。
七、调试类API
如在进行漏洞利用的过程中,调试几乎是必不可少的一个环节,需要通过调试来查看漏洞利用脚本是否达到了预期摸底或者得到一些关键的信息。
pwntools提供了用于在程序运行中调用gdb的函数
1 | 使用gdb.attach(target,gdbscript=None,exe=None,arch=None)函数来启动gdb调试。 |
八、其他漏洞利用类API
用户可以使用shellcraft.arch.os生成相应架构、系统的shellcode。
例如64位linux的shellcraft.amd64.linux,以下为官方文档的示例,通过shellcraft.amd64.linux.sh()可以生成一段Linux64位系统下执行shell的汇编代码。
1 | >>>p=run_assembly(shellcraft.amd64.linux.sh()) |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!