pwntools介绍及使用

pwntools:简单来说就以一整套pwn工具集,涵盖了pwn题利用脚本所需要的各种工具。包括方便的IO交互函数,ROP、格式化字符串等利用的自动化工具,shellcode生成器等等。pwntools是目前最好用也是仅有的大型pwn利用框架。能节省大量编写脚本的时间。

Pwntools模块总览

pwntools使用参考文献

Pwnlib.asm

Asm模块主要通过capstone进行汇编的编译和反编译。通常用来编译各种平台构架的shellcode。

Pwnlib.constants

头文件宏定义的封装,通过此模块,可以直接获取一下系统宏定义对应的整数数据。

Pwnlib.context

上下文管理器,通过他来控制一些全局的信息。比如目标计算机体系结构,log等级等。控制生成shellcode,log时候的默认行为。

Pwnlib.dynelf

通过内存leak数据来自动化定位程序中函数位置。及其实用。

Pwnlib.encoders

Shellcode编码工具,通过编码排除shellcode中的特殊字符,防止无法转化。

Pwnlib.elf

读写elf文件结构中的各种信息。非常方便实用。

Pwnlib.fmtstr

格式化字符串自动化利用工具。有缺陷,只能使用少数情况。

Pwnlib.gdb

可以在脚本中直接使用此模块attach进程或者启动gdb

Pwnlib.libcdb

Libc的database,可以通过一些信息查找对应libc

Pwnlib.log

通常是pwntools内部代码使用

Pwnlib.memleak

内存泄漏管理工具,方便拼接多次泄露出来的内存。

Pwnlib.shellcraft

Shellcode生成工具

Pwnlib.tubes

主要的io工具

Pwnlib.util

包含一些列有效的小工具

Pwnlib.rop

rop生成工具,可以直接生成32位rop

Pwntools主要模块及其使用

Tubes模块包含remote和process子模块

from pwn import *
io = remote("127.0.0.1", 32152)
# 与互联网主机交互
io.sendline("hello")
io.send("hello")
# sendline发送数据会在最后多添加一个回车
io.recv(1024)
io.revuntil()
io.recvline("hello")
# recv()读取1024个字节,recvline()会读取一直到回车,recvline()读取到指定数据
io.interactive()
io = process("./bin", shell=True)
#启动本地程序进行交互,用于gdb调试
io.p32(0xdeadbeef)
io.p64(0xdeadbeefdeadbeef)
io.u32("1234")
io.u64("12345678")
# 将字节数组与数组进行以小端对齐的方式相互转化,32负责转化dword,64负责转化qword

shellcraft&asm

pwntools的shellcraft主要用来生成汇编代码形式的shellcode,而asm的作用是根据汇编代码编译出二进制shellcode。

# 生成执行sh的shellcode并编译
asm(pwnlib.shellcraft.thumb.linux.sh(), arch="thumb")
# 可以将thumb换成对应cpu
# 读取flag并输出到标准输出
pwnlib.shellcraft.i386.linux.cat("flag", fd=1)
# 使用forkbomb破坏系统(慎用)
pwnlib.shellcraft.i386.linux.forkbomb()

context

context.log_level = "debug"
context.arch = "amd64"
# 设置成debug,pwntools会将所有io数据等输出,方便编写poc的时候进行调试,而arch可以设置攻击目标的指令构架。

ELF

用于读取elf文件中的各种结构数据。例如plt,got,函数地址等等。

你可能感兴趣的:(Pwn学习笔记)