[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势
原文:https://www.freebuf.com/sectool/366854.html
存自己这里方便看。
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掉认证了

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

patchelf
我是archlinux,yay patchelf就可以安装好,所以在这里没有遇到什么问题。其他子系统,可以自行搜索,网上的教程很详细,大家可以自行解决。
0x02 确定patch什么库
修改:新增快方法
在有题目所给libc.so.6的目录下直接输入strings libc.so.6 |grep Ubuntu 即可。

1.确定偏移用于搜索
使用ROPgadget
这里的思路我的比较简单,ROPgadget用来查str_bin_sh的地址。
ROPgadget --binary libc.so.6 --string '/bin/sh'
得到

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()
运行。

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

得到库名。
0x03 下载库
运行cat list找到2.35-0ubuntu3.1_amd64。

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掉认证,重新登陆一下后成功。

0x04 patch!!
找到你的ld和libc.so.6文件。

找到他们的目录,然后在pwn题目文件目录下运行以下两条命令:
patchelf --set-interpreter 你的文件目录/ld-linux-x86-64.so.2 ./pwn
patchelf --add-needed 你的文件目录/libc.so.6 ./pwn
patchelf --add-needed 你的目录/libpthread.so.0 ./pwn (如果提示没有libpthread.so.0的话)
大功告成。
尾声
动态调试是pwn中必不可少的重要步骤,而patch则是让我们能够动态调试的必由之路。欢迎有任何问题在评论区提出,我们将继续努力走向更高处。
当你没有符号表?
https://loora1n.github.io/2022/11/01/【祥云杯2022】PWN-WriteUp-protocol/
[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势的更多相关文章
- 【Git】(1)---工作区、暂存区、版本库、远程仓库
工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...
- 从0开始学爬虫9之requests库的学习之环境搭建
从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...
- C#研究OpenXML之路(4-使用第三方库)
一.悲催的OpenXML操作 学习并使用了一段时间的OpenXML,感觉用这个来操作Excel文件真是一件非常悲催的事情,由于我自己比较熟悉Excel COM的操作,但到了OpenXML中发现,之前所 ...
- python爬虫之路——初识爬虫三大库,requests,lxml,beautiful.
三大库:requests,lxml,beautifulSoup. Request库作用:请求网站获取网页数据. get()的基本使用方法 #导入库 import requests #向网站发送请求,获 ...
- C++之路起航——标准模板库(queue)
queue: FIFO队列:先进先出队列. 优先队列:对队列中的元素按优先级的大小输出. 定义: FIFO队列: queue<数据类性>变量名. 优先队列:priority_queue&l ...
- C++之路起航——标准模板库(deque)
deque(双端队列):http://baike.baidu.com/link?url=JTvA2cuLubptctHZwFxswvlZvxNdFOxmifsYCGLj5IZF-Tj4rbWLv8Jn ...
- C++之路起航——标准模板库(set)
set(集合):http://baike.baidu.com/link?url=cb68AB-3qfEK8RoaGHJFClb4ZiWpJfc32lPOLtaNUrdxntFC738zCZsCiUlf ...
- C++之路起航——标准模板库(list)
list(链表):http://baike.baidu.com/link?url=gkVdBlHEzy6ssrgT5Iy2wze4jl37ka1G45TRpUHrQSYFZQg2HimtUCePV0t ...
- C++之路起航——标准模板库(vector)
vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int ...
- [转载]C++之路起航——标准模板库(deque)
转自:https://www.cnblogs.com/grhyxzc/p/5074061.html deque(双端队列):http://baike.baidu.com/link?url=JTvA2c ...
随机推荐
- 2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南、正南、西南方向的
2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南.正南.西南方向的 ...
- 2021-01-28:redis使用过程中的注意事项有哪些?
福哥答案2021-01-28: [答案1:](https://italk.mashibing.com/question/detail/ques_00005101)1.使用key值前缀来作命名空间虽然说 ...
- 2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对。返回逆序对个数。
2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对.返回逆序对个数. 福哥答案2021-03-08: 1.归并排序,从右往左,相等拷右. ...
- 2022-01-05:有四种诗的韵律分别为: AABB、ABAB、ABBA、AAAA。 比如 : 1 1 3 3就属于AABB型的韵律、
2022-01-05:有四种诗的韵律分别为: AABB.ABAB.ABBA.AAAA. 比如 : 1 1 3 3就属于AABB型的韵律.6 6 6 6就属于AAAA型的韵律等等, 一个数组arr,当然 ...
- linux 系统安全和应用
目录 一.系统安全 二.账号安全 三.修改密码生效时间 四.强制下次登录成功时修改密码 五.历史命令 六.终端自动注销 七.wheel组 八.grub菜单密码 一.系统安全 原因:1.系统数据想要保护 ...
- ODOO13之五:Odoo 13开发之导入、导出以及模块数据
大多数Odoo 模块的定义,如用户界面和安全规则,实际是存储在对应数据表中的数据记录.模块中的 XML 和 CSV 文件不是 Odoo 应用运行时使用,而是载入数据表的手段.正是因为这个原因,Odoo ...
- kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习
一.什么是容器 容器简介 简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离. 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgro ...
- C# 版本特性一览
前言 使用 C# 作为开发语言已经 15 个年头了,受惠于 C# 的不断更新,伴随着大量的新特性与大量语法糖,让我更加容易写出简洁.高效的代码.日常中大量特性早已信手拈来,当然从未尝试过的特性更是难以 ...
- zabbix监控服务器php
1 修改php配置文件 /apollo/env/php/thirdparty.php-7.3/etc/php-fpm.conf,添加pm.status pm.status_path = /phpfpm ...
- @Target元注解的使用
@Target注解标记另外的注解用于限制此注解可以应用哪种Java元素类型.先看Java SE 8中@Target是如何声明的: package java.lang.annotation; publi ...