前言
本周安恒萌新粉丝分享的工具是pwntools
,是一个二进制利用框架。Pwntools
是一个CTF框架和漏洞利用开发库。它以Python
编写,专为快速原型设计和开发而设计,旨在使漏洞利用编写尽可能简单。pwntools
对64位的Ubuntu 12.04
和14.04
、16.04
的支持最好,但是绝大多数的功能也支持Debian
, Arch
, FreeBSD
, OSX
, 等等。
官方文档提供了详细的api规范。这里也只是简单提一下pwntools
使用方法,不会过于详细的讲解各种二进制漏洞攻击技术。具体安装和使用可以根据官方文档操作。
我也不是pwn手,业余学了一下还没入门,这里简单分享一下作为一个萌新角度的总结。如果有误请各位大佬斧正。
官方文档地址:http://docs.pwntools.com/en/stable/index.html
安装
Pwntools的主页在pwntools.com,Github项目地址为https://github.com/Gallopsled/pwntools,可以下载源码用python
进行安装。也可以直接使用pip install pwntools
进行安装。还有一些非python的外部库,需要手动下载。不过这时候需要主要pwntools的版本和库的版本是否一致,否则会出现一些版本冲突的问题。
模块
在以前的版本里都是通过使用from pwn import *
导入使用,在2.0版本的时候,分为两个模块,pwnlib
——纯净的python模块,以便快速学习入手使用;pwn
——方便ctf选手在比赛中使用,其中包含很多子模块,利用通过import pwn
或者from pwn import *
。
大概框架可以根据官方的例程写exp:1
2
3
4
5
6
7from pwn import *
context(arch = 'i386', os = 'linux')
r = remote('exploitme.example.com', 31337)
# EXPLOIT CODE GOES HERE
r.send(asm(shellcraft.sh()))
r.interactive()
使用命令from pwn import *
可以将所有的模块导入到当前namespace
,还会导入os,sys等常用系统库。
使用命令context(arch = 'i386', os = 'linux')
可以设置目标主机信息。
使用命令r = remote('exploitme.example.com', 31337)
建立远程连接,参数:ip/url,端口。也可以命令r = process("./example")
调试本地文件。
函数asm(shellcraft.sh())
可以接受字符串作为参数,得到汇编码对应的机器码。shellcraft
模块是shellcode
的模块,包含一些生成shellcode
的函数。shellcraft.sh()
则是执行/bin/sh
的shellcode
了。
命令r.send()
将shellcode
发送到远程连接。
最后命令r.interactive()
将控制权交给用户,这样可以使用打开shell。
常用的模块有:
- asm : 汇编与反汇编,支持x86/x64/arm/mips/powerpc等基本上所有的主流平台。
- dynelf : 用于远程符号泄漏,需要提供leak方法
- elf : 对elf文件进行操作
- gdb : 配合gdb进行调试
- memleak : 用于内存泄漏
- shellcraft : shellcode的生成器
- tubes : 包括tubes.sock, tubes.process, tubes.ssh, tubes.serialtube,分别适用于不同场景的PIPE
- utils : 一些实用的小功能,例如CRC计算,cyclic pattern等
- Tubes : 读写接口
- atexception : 未处理异常的回调
- constants : 访问头文件常量
- context :设置运行时变量
- exception :Pwnlib异常
- gdb :使用GDB
- log :日志
- replacements :功能的替换
- rop : 可以用于构建堆栈的面向返回编程
- term :终端处理
- config :pwntools配置文件
- timeout :超时处理
- timeout :超时处理
- ui :用户交互功能
- libcdb :Libc数据库
- flag :CTF flag 管理
- fmtstr :格式化字符串漏洞利用
- protocols :线路协议
- qemu- 结合QEMU虚拟机调试