pwn从头开始的复习(工具使用)
glibc-all-in-one
在glibc-all-in-one目录下
获取可下载的libc列表
plaintext
1 | cat list |
plaintext
1 | ./download name |
查看对应连接器
plaintext
1 | strings buu/libc-2.23-x64.so | grep ubuntu |
查看目前链接信息
plaintext
1 | ldd -v pwn |
换源
plaintext
1 | patchelf --replace-needed libc.so.6 /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6 heap_Double_Free |
plaintext
1 | patchelf --set-interpreter /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so ./heap_Double_Free |
Onegadget
plaintext
1 | one_gadget filename #libc文件名 |
一运行就能拿到shell的地址,但是会标使用条件,找能实现的搞就好
ROPgadget
搜索ret指令的地址
plaintext
1 | ROPgadget –binary filename –only ‘ret’ |
控制寄存器用
plaintext
1 | ROPgadget --binary fliename --only "pop|ret" |
静态编译文件直接得到完整rop链
plaintext
1 | ROPgadget --binary fliename --ropchain |
搜索字符串,给出字符串地址
plaintext
1 | ROPgadget --binary ./fliename --string 'sh' |
下面是一些零散的小python语句
plaintext
1 | context(log_level = "debug",arch = "i386",os = "linux") |
plaintext
1 | payload = fmtstr_payload(offset, {atoi_got : sys_plt}) |
plaintext
1 | shellcode = asm(shellcraft.sh())#<-这里利用pwntools的asm()函数来写shellcode. |
plaintext
1 | payload = flat([shellcode.ljust(padding,'A'),buf_addr]) |
应付pie
plaintext
1 | for k in range(500): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 未来大pwn子的blog!