一、简介

LibcSearcher是python的一个库,用于解决pwn中不明libc版本的情况,可以根据泄露的某函数地址,推测服务端使用的libc版本,是做题必备的神器。
根据网上的版本,我总结两个可以利用的方法

二、安装

版本一:本地判断libc的方法

使用原作者的版本即可,安装指令如下

git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
sudo python setup.py develop

正常来说,这时候本地已经有了一些libc文件,存放在安装目录/LibcSearcher/libc-database/db中,注意我们这个版本支持的语言是python2

版本二:在线使用webAPI的方式

这里关联到另一个大佬的git项目,这个项目支持的ptthon语言是python3,安装python3-pip,然后使用如下指令安装即可

pip3 install LibcSearcher

三、关于本地libc文件的更新问题

我自己在做题的过程中,发现版本一的库不是很全,所以需要用程序更新一下,最原始的方法就是删掉已经有的库重新下载,当然这里要花费很多的时间,调用一个git项目,指令如下:

cd LibcSearcher
rm -rf libc-database
git clone https://github.com/niklasb/libc-database.git
cd libc-database
./get ubuntu

这个时候大多数人应该会碰到问题。

Will download or update for:
Requirements for download or update 'ubuntu' are not met. Please, refer to README.md for installation instructions

看说明文档,我们在执行脚本的时候需要几个必须安装的软件(PS:我的系统是ubuntu)

在这里插入图片描述

我们需要对general和debian-base每一个指令进行测试是否已经安装,具体可以使用xxx --version测试,我这里是zstd没有,使用apt install zstd安装即可,然后执行./get ubuntu

四、使用方法

很简单,直接上代码了,相信都能看懂

from pwn  import *
import pwnlib
from LibcSearcher import *

if __name__ == '__main__':
	
	conn = process("./pwn")
    ...
    ...
	leak_addr = conn.recv(10)
	
	__libc_start_main = int(leak_addr,16)   #假如这里泄露了__libc_start_main函数的地址
	
	libc = LibcSearcher('__libc_start_main',__libc_start_main)      #根据函数名和函数泄露的地址进行搜索,可能有多个结果需要用户自己选择
	
	libc_base_addr = __libc_start_main - libc.dump('__libc_start_main')      #计算libc的基址
	
	system_addr = libc_base_addr + libc.dump('system')       #计算system函数的地址
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐