pwntools的安装及基本使用

项目地址:https://github.com/Gallopsled/pwntools
官方文档:http://docs.pwntools.com/en/latest/

安装

sudo apt update
sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential -y
python3 -m pip install --upgrade pip
pip3 install --upgrade pwntools

pwntools使用

基本模块
  • 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等
导入
from pwn import *
# 本地
p = process('')
# 远程
p = remote('8.8.8.8', 8888)
汇编与反汇编
asm('nop', arch='arm')
disaasm('')
shellcode
shellcraft.sh()
shellcraft.i386.linux.sh()
shellcraft.amd64.linux.sh()
ELF
elf = ELF('')
# 或者
p = process('')
elf = p.elf

# 文件装载地址
elf.address
# 符号表
elf.symbols
# GOT表
elf.got
# PLT表
elf.plt
pack与unpack
# 将数据解包
u32()
u64()
# 将数据打包
p32()
p64()
Cyclic

在栈溢出的时候可以方便计算偏移

# 生成一个0x100大小的字符串
cyclic(0x100)
cyclic_find(0x12345678)
cyclic_find('abcd')

这里因为当存在栈溢出,而我们输入的数据比较大时,就会覆盖栈底指针以及返回地址,所以当使用这个工具进行计算时,因为覆盖了返回地址导致程序跳转失败,所以跳转的地址就是字符串对应的位置,这就是cyclic_find(0x12345678)的原理。

Context
# 环境设置
context(os='linux', arch='amd64', log_level='debug')
# 或者
context.log_level = 'debug'
context.arch = 'i386'
...
  1. os设置系统为linux
  2. arch设置架构为amd64,可以简单的认为设置为64位的模式,对应的32位模式是’i386’
  3. log_level设置日志输出的等级为debug,这样pwntools会将完整的io过程都打印下来,使得调试更加方便
gdb
from pwnlib import *
# 打开调试进程,并设置断点
pwnlib.gdb.debug('./human', 'b *main')

# 附加调试进程p
pwnlib.gdb.attach(p)
IO交互
send(payload)	# 发送payload
sendline(payload) # payload + 换行\n
sendafter(string, payload) # 接收到指定string后发送payload
recvn(n) # 接收n个字符
recvline() # 接收一行输出
recvlines(n) # 接收n行输出
recvuntil(string) # 接收到指定string为止

interactive() # shell式交互
FmtStr

也是计算偏移的

rop
elf = ELF('./proc')
rop = ROP(elf)
# 第一个参数是需要call的函数或地址,第二个为函数参数
rop.call('read', (0, elf.bss(0x80)))
rop.dump()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值