pwntools用法总结


1.context设置运行时变量
1)os设置系统为linux系统.
2)arch设置架构为amd64,可以简单的认为设置为64位的模式,对应的32位模式是’i386’
3)log_level设置日志输出的等级为debug,这句话在调试的时候一般会设置,这样pwntools会将完整的io过程都打印下来,使得调试更加方便,可以避免在完成CTF题目时出现一些和IO相关的错误。

2. 将数字转化为字符串:p32/64
    将字符串转化为数字:u32/64

3.log  输出消息
25778744.png
 
4.cyclic and cyclic_find
对于直接的缓冲区溢出,可以确认再偏移的多少以控制eip
25987052.png
 在栈溢出的时候,首先构造cyclic(20),或者更长长度的pattern,进行输入,输入后pc的值变味了0x61616161,那么我们通过cyclic_find(0x61616161)就可以得到从哪一个字节开始会控制PC寄存器了,避免了很多没必要的计算。也可以直接用字符串定位


5.asm  and disasm  汇编与反汇编
26338382.png
 

6.ELF 操作ELF文件工具


7.DynELf通过信息泄露获得远程函数地址

8.args   快速访问所有命令行参数


9.Tubes读写接口
对于一次攻击而言前提就是与目标服务器或者程序进行交互,这里就可以使用remote(address, port)产生一个远程的socket然后就可以读写了。
同样地,使用process可以打开一个本地程序并进行交互
同时,也可以使用listen来开启一个本地的监听端口
无论哪种PIPE都是继承tube而来,可以用于读写函数主要有:

  • interactive() : 直接进行交互,相当于回到shell的模式,在取得shell之后使用
  • recv(numb=4096, timeout=default) : 接收指定字节
  • recvall() : 一直接收直到EOF
  • recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n
  • recvuntil(delims, drop=False) : 一直读到delims的pattern出现为止
  • recvrepeat(timeout=default) : 持续接受直到EOF或timeout
  • send(data) : 发送数据
  • sendline(data) : 发送一行数据,相当于在数据末尾加\n


10.shellcode生成器
使用shellcraft可以生成对应的架构的shellcode代码,直接使用链式调用的方法就可以得到
如上所示,如果需要在64位的Linux上执行/bin/sh就可以使用shellcraft.amd64.linux.sh(),配合asm函数就能够得到最终的pyaload了。

除了直接执行sh之外,还可以进行其它的一些常用操作例如提权、反向连接等等。

```