吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3652|回复: 19
收起左侧

[CTF] [Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势

[复制链接]
N1nEmAn 发表于 2023-5-18 19:07
本帖最后由 N1nEmAn 于 2023-5-21 10:03 编辑

0x00 前言

如何修改本地pwn文件和题目所给环境一致,从而进行调试,这是从学习堆开始就遇到的心头之患。从那以后,直到今天参加完mini LCTF,为了复现一道题目才把这个问题解决掉。网上的博客,参差不齐,由于本人不才,导致都不起作用。故在某学长在校内论坛之中找到正确方法,从而解决了这一心头之患。

并且这里面有一些小问题,也希望请教一下大家。问题我会用Q来表示,欢迎捕捉!

0x01 安装所需软件

glibc-all-in-one

最快的方式是:

git clone https://github.com/matrix1001/glibc-all-in-one.git 
cd glibc-all-in-one 
chmod a+x build download extract

如果不行(我就是不行…),进入下方链接。

ps:后来发现是ipv6掉认证了

image

点击download下载,手动解压

然后运行sudo python update_list(如果遇到报错请检查网络问题,我在那里卡了比较久,注意要用direct连接。这里不明白什么意思的话不用管我),接着cat list得到包名。

image

patchelf

我是archlinux,yay patchelf就可以安装好,所以在这里没有遇到什么问题。其他子系统,可以自行搜索,网上的教程很详细,大家可以自行解决。

0x02 确定patch什么库

修改:新增快方法

在有题目所给libc.so.6的目录下直接输入strings libc.so.6 |grep Ubuntu即可。
image

1.确定偏移用于搜索

使用ROPgadget

这里的思路我的比较简单,ROPgadget用来查str_bin_sh的地址。

ROPgadget --binary libc.so.6 --string '/bin/sh'

得到

image
Q1:那么有没有办法用ROP来查printf,system之类的地址呢?我暂时没查到相关命令,如果有的话会很简单,不需要接下来的步骤。

使用pwntools

from pwn import *

p = process('./pwn')
libc = ELF('./libc.so.6')
elf = ELF('./pwn')

system = libc.sym['system']#这里的system可以替换成别的函数,用于搜索偏移
print(hex(system))
if args.G:
    gdb.attach(p)

p.interactive()

运行。
image

于是我们得知,system的偏移是0x50d60

3.搜索库

推荐两个网站一起用,找不到的话换另一个,一定要多搜索几个偏移确保没错。其实也可以使用libc-database,不过这个不是这篇文章的重点。

https://libc.rip/
https://libc.blukat.me/

image
得到库名。

0x03 下载库

运行cat list找到2.35-0ubuntu3.1_amd64。
image
cd到年装的glibcallinone的文件夹下。

输入./download 2.35-0ubuntu3.1_amd64即可。
但是我一开始不太一样,我遇到了问题如下:

\~/ctf/tools/glibcallinone » ./download 2.35-0ubuntu3.1_amd64

Getting 2.35-0ubuntu3.1_amd64 -> Location:
https://mirror.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/libc6\_2.35-0ubuntu3.1\_amd64.deb
-> Downloading libc binary package Failed to download package from https://mirror.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/libc6\_2.35-0ubuntu3.1\_amd64.deb

于是只能自己登入,然后解压。

后来发现是没安装wget且校园网ipv6掉认证,重新登陆一下后成功。
image

0x04 patch!!

找到你的ld和libc.so.6文件。
image
找到他们的目录,然后在pwn题目文件目录下运行以下两条命令:

patchelf --set-interpreter 你的文件目录/ld-linux-x86-64.so.2 ./pwn

patchelf --add-needed 你的文件目录/libc.so.6 ./pwn

大功告成。

尾声

动态调试是pwn中必不可少的重要步骤,而patch则是让我们能够动态调试的必由之路。欢迎有任何问题在评论区提出,我们将继续努力走向更高处。

免费评分

参与人数 5威望 +1 吾爱币 +26 热心值 +3 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
leommm + 1 我很赞同!
netpune + 1 谢谢@Thanks!
peiwithhao + 3 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| N1nEmAn 发表于 2023-5-19 22:20
peiwithhao 发表于 2023-5-18 20:16
师傅知道如何添加glibc all in one里列表没有的glibc版本吗?

可以试试从网上其他地方下载一下对应的libc和ld,然后用patchelf,没有的话就需要去可以到gnu的ftp服务器上下载ftp.gnu.org/gnu/libc/,或别的镜像站的/gnu/libc目录下,如https://mirrors.ustc.edu.cn/gnu/glibc/,下载之后手动编译
头像被屏蔽
txj66 发表于 2023-5-18 19:59
头像被屏蔽
fanafan 发表于 2023-5-18 20:07
peiwithhao 发表于 2023-5-18 20:16
师傅知道如何添加glibc all in one里列表没有的glibc版本吗?
头像被屏蔽
lockxxx 发表于 2023-5-18 22:06
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
dcyxiaoxue 发表于 2023-5-19 07:31
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
Daneellee 发表于 2023-5-19 09:15
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
netpune 发表于 2023-5-19 09:56
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
coollongly 发表于 2023-5-19 11:45
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
kailifei 发表于 2023-5-19 14:06
提示: 该帖被管理员或版主屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 23:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表