OneGadget与其他工具集成:打造完整的Pwn工具链

OneGadget与其他工具集成:打造完整的Pwn工具链

【免费下载链接】one_gadget The best tool for finding one gadget RCE in libc.so.6 【免费下载链接】one_gadget 项目地址: https://gitcode.com/gh_mirrors/on/one_gadget

OneGadget是一款强大的libc漏洞利用工具,能够快速定位libc库中的one gadget RCE(远程代码执行)漏洞,帮助安全研究者和开发者构建高效的Pwn工具链。本文将详细介绍如何将OneGadget与其他工具集成,提升漏洞利用效率。

一、OneGadget核心功能解析

OneGadget的核心功能是在libc.so.6中寻找满足execve("/bin/sh", 0, 0)条件的代码片段,即one gadget。通过分析lib/one_gadget/one_gadget.rb源码可知,其主要通过两种方式定位gadget:基于BuildID查询和直接分析文件。

OneGadget x86_64架构执行结果 图1:OneGadget在x86_64架构下的执行结果,显示多个可用的execve调用及其约束条件

1.1 多架构支持

OneGadget支持多种处理器架构,包括:

1.2 灵活的查询方式

  • 基于BuildID查询:通过libc的唯一标识快速定位预编译的gadget,如examples/from_build_id.png所示
  • 文件直接分析:对本地libc文件进行深度扫描
  • 近函数搜索:通过--near参数查找特定函数附近的gadget,如examples/near.png中展示的exit和mkdir函数附近的结果

二、与漏洞利用框架的集成方案

2.1 与pwntools无缝协作

在pwntools脚本中集成OneGadget可显著提升漏洞利用效率:

from pwn import *
import subprocess

# 获取libc中的one gadget
def get_one_gadget(libc_path):
    result = subprocess.check_output(f"one_gadget {libc_path}", shell=True).decode()
    # 解析输出提取offset
    offsets = [int(line.split()[0], 16) for line in result.splitlines() if line.startswith('0x')]
    return offsets

# 实际漏洞利用代码
libc = ELF('./libc.so.6')
gadgets = get_one_gadget('./libc.so.6')
# 使用第一个gadget
rop = ROP(libc)
rop.raw(gadgets[0])

2.2 自动化脚本集成

OneGadget可与自动化漏洞利用脚本结合,如examples/script.png所示,通过管道操作快速获取offset并集成到exploit中:

#!/bin/bash
# 自动化获取one gadget并生成payload
OFFSET=$(one_gadget ./libc.so.6 | head -n1 | awk '{print $1}')
python -c "print('A'*104 + p64(0x$OFFSET))" > payload.txt

三、提升工具链效率的实用技巧

3.1 约束条件过滤

OneGadget输出的每个gadget都包含约束条件,如lib/one_gadget/builds/libc-2.24-24b1296687d36e24bd48b8c412157d94f074ecc2.rb中定义的:

effect: "execve(\"/bin/sh\", rsp+0x30, environ)",
constraints: ["[rsp+0x30] == NULL"]

选择约束条件简单的gadget(如仅需特定寄存器为NULL)可提高利用成功率。

3.2 多版本libc支持

OneGadget通过lib/one_gadget/builds/目录下的预编译文件支持多种libc版本,包括:

  • libc-2.19至libc-2.31
  • 特殊版本如libc-2.21.90、libc-2.23.90

四、完整工具链搭建步骤

4.1 安装与配置

# 克隆仓库
git clone https://gitcode.com/gh_mirrors/on/one_gadget
cd one_gadget
# 安装依赖
bundle install
# 构建gem包
gem build one_gadget.gemspec
# 安装gem
gem install one_gadget-*.gem

4.2 典型工作流

  1. 漏洞分析:使用IDA Pro或Ghidra确定漏洞类型和可控寄存器
  2. libc识别:通过readelf -hfile命令获取libc版本信息
  3. gadget查找one_gadget libc.so.6 --level 1获取所有可能的gadget
  4. 利用开发:结合pwntools编写exploit,集成OneGadget提供的offset
  5. 测试验证:使用GDB调试确认exploit有效性

五、常见问题解决方案

5.1 gadget执行失败

若gadget执行失败,可尝试:

  • 使用--level 1参数获取更多候选gadget
  • 检查约束条件是否满足(如寄存器值、内存可写性)
  • 通过spec/gadget_spec.rb中的测试用例验证gadget有效性

5.2 新型libc支持

对于未包含的libc版本,可通过以下方式添加支持:

  1. 提取目标libc的BuildID:readelf -n libc.so.6 | grep BuildID
  2. 使用one_gadget --generate生成新的build文件
  3. 提交PR到官方仓库

通过将OneGadget与pwntools、GDB等工具结合,安全研究者可以构建高效的漏洞利用工作流,显著提升Pwn任务的效率和成功率。无论是CTF竞赛还是漏洞研究,OneGadget都是不可或缺的重要工具。

【免费下载链接】one_gadget The best tool for finding one gadget RCE in libc.so.6 【免费下载链接】one_gadget 项目地址: https://gitcode.com/gh_mirrors/on/one_gadget

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值