前言 学习二进制的过程中不仅仅是知识体系复杂,除了各种基础知识,漏洞利用技巧,保护机制绕过技巧之外,利用时的payload构造也十分麻烦,手工构造payload需要我们一个字节一个字节的去完成,十分耗费精力,所以需要一个好的工具来辅助我们完成。
Pwntools是一个CTF框架和漏洞利用开发库。它是用Python编写的,旨在用于快速原型开发和开发,旨在使漏洞利用程序编写尽可能简单。
看到了吗,他是一个python库,所以我们不费吹灰之力就可以安装好它
如果通过此方式安装失败,也可以直接使用github下载源码安装
1 2 3 4 5 6 7 8 9 git clone https://gi thub.com/aquynh/ capstone cd capstone make make install git clone https://gi thub.com/Gallopsled/ pwntools cd pwntools python setup.py install
网络上有很多pwntools模块功能介绍的教程,都写得很全面,我就只拿出其中最常用的一些模块介绍,后面用到其他模块时再慢慢补充。
连接 1 2 3 本地 :sh = porcess("./level0" ) 远程:sh = remote("127.0.0.1" ,12345) 关闭连接:sh .close ()
IO模块 1 2 3 4 5 6 7 8 sh .send(data) 发送数据sh .sendline(data) 发送一行数据,相当于在数据后面加\n sh .recv(numb = 2048, timeout = dufault) 接受数据,numb指定接收的字节,timeout指定超时sh .recvline(keepends=True) 接受一行数据,keepends为是否保留行尾的\n sh .recvuntil("Hello,World\n" ,drop =fasle) 接受数据直到我们设置的标志出现sh .recvall() 一直接收直到EOFsh .recvrepeat(timeout = default) 持续接受直到EOF或timeoutsh .interactive() 直接进行交互,相当于回到shell 的模式,在取得shell 之后使用
此模块中最常用的就是sh.sendline()函数和sh.interactive()函数,用于发送payload和获取shell后交互
汇编和反汇编 汇编
1 2 3 4 >>> asm ('nop' )'\x90' >>> asm ('nop' , arch='arm' )'\x00\xf0 \xe3'
context指定cpu类型以及操作系统
1 2 3 4 >>> context.arch = 'i386' >>> context.os = 'linux' >>> context.endian = 'little' >>> context.word_size = 32
反汇编
1 2 3 4 5 >>> print disasm('6a0258cd80ebf9' .decode('hex' )) 0 : 6 a 02 push 0 x2 2 : 58 pop eax 3 : cd 80 int 0 x80 5 : eb f9 jmp 0 x0
shellcode生成器 此模块经常用于可在内存中执行代码时生成shellcode,如ret2shellcode场景
1 2 shellcode = asm(shellcraft.i386 .linux .sh ()) shellcode = asm(shellcraft.amd64 .linux .sh ())
数据pack与unpack pack:p32,p64 unpack:u32,u64 此模块经常用于将地址值转换二进制数据
1 2 p32 (0 x401128) p64 (0 x402248)
待补充