pwntools各使用模块简介

pwntools

pwntools 是一款专门用于CTF Exploit的python库,能够很方便的进行本地与远程利用的切换,并且里面包含多个模块,使利用变得简单。
可以在github上直接搜索pwntools 进行安装。

基本模块

asm : 汇编与反汇编,支持x86/x64/arm/mips/powerpc等基本上所有的主流平台
dynelf : 用于远程符号泄漏,需要提供leak方法
elf : 对elf文件进行操作,可以获取elf文件中的PLT条目和GOT条目信息
gdb : 配合gdb进行调试,设置断点之后便能够在运行过程中直接调用GDB断下,类似于设置为即使调试JIT
memleak : 用于内存泄漏
shellcraft : shellcode的生成器

asm 汇编模块

这个模块提供一些基本的汇编与反汇编操作,一般可以用linux的objdump以及IDA Pro能够完成基本的需求。

dynelf 模块

DynELF是leak信息的神器。前提条件是要提供一个输入地址,输出此地址最少1byte数的函数。官网给出的说明是:Given a function which can leak data at an arbitrary address, any symbol in any loaded library can be resolved.

# Assume a process or remote connection
p = process(‘./pwnme‘)

# Declare a function that takes a single address, and
# leaks at least one byte at that address.
def leak(address):
    data = p.read(address, 4)
    log.debug("%#x => %s" % (address, (data or ‘‘).encode(‘hex‘)))
    return data

# For the sake of this example, let‘s say that we
# have any of these pointers.  One is a pointer into
# the target binary, the other two are pointers into libc
main   = 0xfeedf4ce
libc   = 0xdeadb000
system = 0xdeadbeef

# With our leaker, and a pointer into our target binary,
# we can resolve the address of anything.
#
# We do not actually need to have a copy of the target
# binary for this to work.
d = DynELF(leak, main)
assert d.lookup(None,     ‘libc‘) == libc
assert d.lookup(‘system‘, ‘libc‘) == system

# However, if we *do* have a copy of the target binary,
# we can speed up some of the steps.
d = DynELF(leak, main, elf=ELF(‘./pwnme‘))
assert d.lookup(None,     ‘libc‘) == libc
assert d.lookup(‘system‘, ‘libc‘) == system

# Alternately, we can resolve symbols inside another library,
# given a pointer into it.
d = DynELF(leak, libc + 0x1234)
assert d.lookup(‘system‘)      == system

elf 模块

这是一个静态模块,即静态加载ELF文件,然后通过相关接口获取一些信息,常用接口有:
got 获取指定函数的GOT条目
plt 获取指定函数的PLT条目
address 获取ELF的基址
symbols 获取函数的实际地址(待确定)

gdb 模块

该模块用于调用gdb调试
在python文件中直接设置断点,当运行到该位置之后就会断下

import pwnlib
from pwn import *
p = process(‘./c‘)
pwnlib.gdb.attach(p)

rop 模块

用于自动产生ROP链 还不支持X64?

elf = ELF(‘ropasaurusrex‘)
rop = ROP(elf)
rop.call(‘read‘, (0, elf.bss(0x80)))
rop.dump() ## 展示当前的ROP chain
### 搜索指定指令 rop.search(move=0, regs=None, order=‘size‘)
‘‘‘
move(int),栈指针调整的字节数
regs(list),搜索的寄存器list
order(str),多个gadgets的排序方式,可选值=[‘size‘, ‘regs‘]
‘‘‘
rop.r13_r14_r15_rbp == rop.search(regs=[‘r13‘,‘r14‘,‘r15‘,‘rbp‘], order = ‘regs‘)

rop.call, 两个参数,第一个是需要call的函数或者一个地址,第二个是函数参数,为list,只有一个参数需要在后面加上一个’,’使其变为list
也可以使用ROPgadget进行gadget搜索

shellcraft 模块

shellcraft模块是shellcode的模块,包含一些生成shellcode的函数。

其中的子模块声明架构,比如shellcraft.arm 是ARM架构的,shellcraft.amd64是AMD64架构,shellcraft.i386是Intel 80386架构的,以及有一个shellcraft.common是所有架构通用的。

有的时候我们需要在写exp的时候用到简单的shellcode,pwntools提供了对简单的shellcode的支持。 
首先,常用的,也是最简单的shellcode,即调用/bin/sh可以通过shellcraft得到:

注意,由于各个平台,特别是32位和64位的shellcode不一样,所以最好先设置context。

print(shellcraft.sh()) # 打印出shellcodeprint(asm(shellcraft.sh())) # 打印出汇编后的shellcod

asm可以对汇编代码进行汇编,不过pwntools目前的asm实现还有一些缺陷,比如不能支持相对跳转等等,只可以进行简单的汇编操作。如果需要更复杂一些的汇编功能,可以使用keystone-engine项目,这里就不再赘述了。

asm也是架构相关,所以一定要先设置context,避免一些意想不到的错误。

时间: 2024-12-14 18:11:24

pwntools各使用模块简介的相关文章

nginx 学习五 filter模块简介和实现一个简单的filter模块

1 nginx过滤模块简介 过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理.它的处理时间在获取回复内容之后, 向用户发送响应之前.它的处理过程分为两个阶段,过滤HTTP回复的头部和主体,在这两个阶段可以分别对头部和主体 进行修改. 2 过滤模块执行顺序 2.1 ngx_http_output_(head, body)_filter_pt 先看一下nginx常用的过滤模块,在ngx_moudles.c中有一下代码: ngx_module_t *ngx_modules

以写代学:python 模块简介&输出用户指定位数密码的脚本

什么是模块 (1)模块是从逻辑上组织python代码的形式 (2)当代码量变的相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互 (3)这些代码段之间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数 (4)模块名不能乱起,字母数字下划线组成,首字母不能是数字 导入模块 (1)使用import导入模块,模块被导入后,程序会自动生成pyc的字节码文件以提升性能 (2)模块属性通过"模块名.属性"的方法调用,如果仅需要模块中的某些属性

Python3.4 asyncio模块简介

这个模块提供了在单个线程上使用协程,适用基于网络及其他资源,有关IO密集型的服务端及客户端程序. 模块细节如下: 适用于多系统可拆卸的事件循环(event loop)系统: 数据传输(transport)和协议抽象(类似于Twisted): 对TCP.UDP.SSL.子进程管道.延时调用(delayed calls)和其他一些系统特有的传输协议支持的实现: a Future class that mimics the one in the concurrent.futures module, b

Rust 功能函数的关系、包和模块简介

Rust 功能函数的关系.包和模块简介 一.功能函数之间的关系 前面看到,一个文件中可以定义多个 function 功能函数,这些功能函数可以被相互使用.程序的入口是main(). 在一个文件中,各个功能函数的定义和使用不受功能函数定义的顺序约束.也就是说,不需要像 C 语言一样,在使用一个函数而还没有定义函数之前要有一个声明语句:而像 java 一样,只要声明的功能函数在一个文件内,可以忽略功能函数在文件中出现的顺序. 二.文件的包管理 当一个文件中的功能函数越来越多,阅读和修改都是个问题.因

Kemaswill 机器学习 数据挖掘 推荐系统 Python optparser模块简介

Python optparser模块简介 原文地址:https://www.cnblogs.com/ppybear/p/12350129.html

MonkeyRunner及MonkeyRunner模块简介

●MonkeyRunner简介 MonkeyRunner:Android SDK中自带的一个黑盒测试工具,在PC端通过Android API控制设备的运行或者自动化测试的执行.支持Python脚本,可以实现Monkey无法实现的一些逻辑控制. 注意: 前一章面讲的Monkey是运行在abd shell中的.运行在设备上,MonkeyRunner是在PC端运行,通过PC端提供的API来执行自动化测试的. ●MonkeyRunner API 3大模块组成 ·MonkeyRunner //通用的一些方

python paramiko模块简介

一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一. 举个常见的例子,现有这样的需求:需要使用windows客户端,远程连接到L

python paramiko模块简介及安装

一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一. 举个常见的例子,现有这样的需求:需要使用windows客户端,远程连接到L

burpsuite2.0模块简介及配置代理

burpsuite2.0的安装和配置 burpsuite_pro_v2.0beta jdk1.8.0_201 windows10 具体安装过程百度 简介 burpsuite是基于Java的用于web安全的工具,能够进行爬虫.代理.编码.密码爆破等任务,并支持对XSS漏洞.文件包含等漏洞的主动扫描或被动扫描.burpsuite2.0具体分为以下11个模块: Dashboard(仪表盘)——显示任务.实践日志等. Target(目标)——显示目标目录结构的的一个功能. Proxy(代理)——拦截HT