【Pwn-解决Pwn题中glibc版本及调试符号、源码问题】此文章归类为:Pwn。
前言
由于pwn题中经常会遇到glibc版本与本地环境不一致,需要patch的问题,遇到流行的版本,本地有对应的文件的情况还比较方便,但是一旦遇到小众版本,尤其是清华镜像站或者glibc-all-in-one找不到的版本时,patch就成了一大问题。同时,下载的glibc如果不包含调试信息,在某些手法的学习或者利用过程中会很不舒服。而且patch题目文件,修改exp对应的文件地址是每次上手pwn题之前必不可少的步骤,因此结合pwninit的功能,利用python实现了一个脚本,可以自动解决这些问题,并在此基础上,提供调试时显示glibc源码的功能,原理参考gdb文档。本文将简要介绍脚本的功能及用法。
项目地址:cpwn。
功能特性
安装步骤在项目首页已经作了详细介绍,不再赘述,此处主要通过图文的方式展示实现的功能效果。
获取主流版本的glibc
在https://launchpad.net/ubuntu/+source/glibc/ 上列举了Ubuntu LTS发行版使用的glibc,使用cpwn fetch
命令会自动下载这些glibc版本在amd64和i386架构的libc,debug-symbol,source。
初始化利用环境
在目录下运行cpnw init
,如果当前目录不存在glibc则会提示用户选择cpwn包含的glibc版本:
如果目录下存在glibc,但是cpwn没有下载过这个版本的glibc,则会向远程拉取对应版本的glibc:
确定好版本之后会将pwn
文件patch,生成pwn_patched
,注意被patch的文件必须是没有使用[--set-rpath RPATH]
选项patch过的文件:
1 2 3 4 | $ ldd . /pwn_patched
linux-vdso.so.1 (0x00007ffe238a2000)
/home/geekcmore/ .config /cpwn/pkgs/2 .35-0ubuntu3.7 /amd64/libc6_2 .35-0ubuntu3.7_amd64 /lib/x86_64-linux-gnu/libc .so.6 (0x00007fddbd1c4000)
/home/geekcmore/ .config /cpwn/pkgs/2 .35-0ubuntu3.7 /amd64/libc6_2 .35-0ubuntu3.7_amd64 /lib/x86_64-linux-gnu/ld-linux-x86-64 .so.2 => /lib64/ld-linux-x86-64 .so.2 (0x00007fddbd3f9000)
|
并根据对应的glibc版本生成初始化的exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from pwn import *
filename = "pwn_patched"
libcname = "/home/geekcmore/.config/cpwn/pkgs/2.35-0ubuntu3.8/libc6_2.35-0ubuntu3.8_amd64/lib/x86_64-linux-gnu/libc.so.6"
host = "127.0.0.1"
port = 1337
elf = context.binary = ELF(filename)
context.terminal = [ 'tmux' , 'neww' ]
if libcname:
libc = ELF(libcname)
gs =
def start():
if args.GDB:
return gdb.debug(elf.path, gdbscript = gs)
elif args.REMOTE:
return remote(host, port)
else :
return process(elf.path)
p = start()
p.interactive()
|
在当前目录下运行python ./exp.py GDB
可以弹出gdb调试界面,并显示调试符号:
源码:
配置文件
配置文件默认保存在~/.config/cpwn
,对应的目录树为:
1 2 3 4 5 6 | $ tree ~ / .config / cpwn / - L 1
/ home / geekcmore / .config / cpwn /
├── config.json
├── exp_template.py
├── pkgs
└── template.py
|
需要修改模板时可以直接编辑此处的template.py
或者修改配置文件中的template
的路径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | {
"author" : "GeekCmore" ,
"template" : "~/.config/cpwn/exp_template.py" ,
"script_name" : "exp.py" ,
"file_path" : "~/.config/cpwn/pkgs" ,
"mirror" : "",
"archs" : [
"amd64" ,
"i386"
],
"pkgs" : [
"libc6" ,
"libc6-dbg" ,
"glibc-source"
],
"threads" : 10 ,
"force" : false
}
|
其他配置项也可以按需修改,如果网络情况不好,或者无需下载调试符号,源码,可以修改archs
和pkgs
,仅仅下载amd64
的libc6
。
最后于 11分钟前
被GeekCmore编辑
,原因: 未选择主题
更多【Pwn-解决Pwn题中glibc版本及调试符号、源码问题】相关视频教程:www.yxfzedu.com