pwntools:简单来说就以一整套pwn工具集,涵盖了pwn题利用脚本所需要的各种工具。包括方便的IO交互函数,ROP、格式化字符串等利用的自动化工具,shellcode生成器等等。pwntools是目前最好用也是仅有的大型pwn利用框架。能节省大量编写脚本的时间。
Asm模块主要通过capstone进行汇编的编译和反编译。通常用来编译各种平台构架的shellcode。
头文件宏定义的封装,通过此模块,可以直接获取一下系统宏定义对应的整数数据。
上下文管理器,通过他来控制一些全局的信息。比如目标计算机体系结构,log等级等。控制生成shellcode,log时候的默认行为。
通过内存leak数据来自动化定位程序中函数位置。及其实用。
Shellcode编码工具,通过编码排除shellcode中的特殊字符,防止无法转化。
读写elf文件结构中的各种信息。非常方便实用。
格式化字符串自动化利用工具。有缺陷,只能使用少数情况。
可以在脚本中直接使用此模块attach进程或者启动gdb
Libc的database,可以通过一些信息查找对应libc
通常是pwntools内部代码使用
内存泄漏管理工具,方便拼接多次泄露出来的内存。
Shellcode生成工具
主要的io工具
包含一些列有效的小工具
rop生成工具,可以直接生成32位rop
from pwn import *
io = remote("127.0.0.1", 32152)
# 与互联网主机交互
io.sendline("hello")
io.send("hello")
# sendline发送数据会在最后多添加一个回车
io.recv(1024)
io.revuntil()
io.recvline("hello")
# recv()读取1024个字节,recvline()会读取一直到回车,recvline()读取到指定数据
io.interactive()
io = process("./bin", shell=True)
#启动本地程序进行交互,用于gdb调试
io.p32(0xdeadbeef)
io.p64(0xdeadbeefdeadbeef)
io.u32("1234")
io.u64("12345678")
# 将字节数组与数组进行以小端对齐的方式相互转化,32负责转化dword,64负责转化qword
pwntools的shellcraft主要用来生成汇编代码形式的shellcode,而asm的作用是根据汇编代码编译出二进制shellcode。
# 生成执行sh的shellcode并编译
asm(pwnlib.shellcraft.thumb.linux.sh(), arch="thumb")
# 可以将thumb换成对应cpu
# 读取flag并输出到标准输出
pwnlib.shellcraft.i386.linux.cat("flag", fd=1)
# 使用forkbomb破坏系统(慎用)
pwnlib.shellcraft.i386.linux.forkbomb()
context.log_level = "debug"
context.arch = "amd64"
# 设置成debug,pwntools会将所有io数据等输出,方便编写poc的时候进行调试,而arch可以设置攻击目标的指令构架。
用于读取elf文件中的各种结构数据。例如plt,got,函数地址等等。