本篇主要更新pwn过程中使用的工具及其使用方法,功能不做赘述。
pwntools
1 | nc 网址,端口号#连接网站 |
几乎用于很简单的pwn题或直接连接靶机做题
ROPgadget
1 | ROPgadget --binary 文件名 --only "pop|ret" |
用于查找代码中对应的汇编命令的地址
1 | ROPgadget --binary 文件名 --string '/bin/sh' |
用于查找代码中对应的getshell命令字符或关于flag的指令
1 | ROPgadget --binary 文件名 --ropchain |
生成现成的ropchain,可以直接实现getshell(静态,且要求文件使用gets函数读取,因为静态链较长,一般无法缩短过多)
patchelf
修改ld(我一般会将下载的放置在题目文件夹,否则需要相对路径)
1 | patchelf --set-interpreter 版本号/ld-linux.so.2 ./文件名 |
1 | patchelf --set-interpreter 2.23-0ubuntu3_amd64/ld-linux-x86-64.so.2 ./pwn |
修改libc
1 | patchelf --replace-needed libc.so.6 ./(路径)/libc.so.6 ./pwn |
1 | patchelf --replace-needed libc.so.6 ./libc.so.6 ./pwn |
添加libc
1 | patchelf --add-needed 版本号/libc.so.6 ./文件名 |
1 |
|
补充常用的libc版本
2.23-0ubuntu11.3_amd64
2.27-3ubuntu1.5_amd64
ropper
与ROPgadget类似,静态链用法
1 | ROPgadget --binary pwn --ropchain//一般生成较长,可人为缩减 |
glibc all in one
一般情况
先展出所有libc列表
1 | cat list |
下载所需要的glibc版本
1 | sudo ./download 版本号 #下载所需版本 |
特殊情况
展出老版本列表
1 | cat old_list |
下载老版本列表
1 | ./download_old 版本号 |
先后顺序搞清楚,下载后移到题目文件夹,方便搭建环境
pwndbg
开了PIE
1 | b *$rebase(0x相对基址偏移) //下断点下到特定地址 |
alpha3
主要用于shellcode修改为题目的可见字符(使用alpha3进行编码shellcode,生成一段没有坏字符的shellcode。然后使用jmp esp进行shellcode注入。)
1 | cd alpha3 |