原文: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,不过这个不是这篇文章的重点。

https://libc.rip/

https://libc.blukat.me/



得到库名。

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的正确姿势的更多相关文章

  1. 【Git】(1)---工作区、暂存区、版本库、远程仓库

    工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...

  2. 从0开始学爬虫9之requests库的学习之环境搭建

    从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...

  3. C#研究OpenXML之路(4-使用第三方库)

    一.悲催的OpenXML操作 学习并使用了一段时间的OpenXML,感觉用这个来操作Excel文件真是一件非常悲催的事情,由于我自己比较熟悉Excel COM的操作,但到了OpenXML中发现,之前所 ...

  4. python爬虫之路——初识爬虫三大库,requests,lxml,beautiful.

    三大库:requests,lxml,beautifulSoup. Request库作用:请求网站获取网页数据. get()的基本使用方法 #导入库 import requests #向网站发送请求,获 ...

  5. C++之路起航——标准模板库(queue)

    queue: FIFO队列:先进先出队列. 优先队列:对队列中的元素按优先级的大小输出. 定义: FIFO队列: queue<数据类性>变量名. 优先队列:priority_queue&l ...

  6. C++之路起航——标准模板库(deque)

    deque(双端队列):http://baike.baidu.com/link?url=JTvA2cuLubptctHZwFxswvlZvxNdFOxmifsYCGLj5IZF-Tj4rbWLv8Jn ...

  7. C++之路起航——标准模板库(set)

    set(集合):http://baike.baidu.com/link?url=cb68AB-3qfEK8RoaGHJFClb4ZiWpJfc32lPOLtaNUrdxntFC738zCZsCiUlf ...

  8. C++之路起航——标准模板库(list)

    list(链表):http://baike.baidu.com/link?url=gkVdBlHEzy6ssrgT5Iy2wze4jl37ka1G45TRpUHrQSYFZQg2HimtUCePV0t ...

  9. C++之路起航——标准模板库(vector)

    vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int ...

  10. [转载]C++之路起航——标准模板库(deque)

    转自:https://www.cnblogs.com/grhyxzc/p/5074061.html deque(双端队列):http://baike.baidu.com/link?url=JTvA2c ...

随机推荐

  1. 2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 。 比方说,如果 nums =

    2022-10-23:给你一个整数数组 nums .如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 . 比方说,如果 nums = ...

  2. 2020-11-15:手写代码:行有序、列也有序的二维数组中,找num,找到返回true,否则false?

    福哥答案2020-11-15: 此题来源于leetcode240和剑指 Offer(第 2 版)面试题4.1.线性查找.从二维数组的坐下角开始查找.如果当前元素等于目标值,则返回 true.如果当前元 ...

  3. 2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi,

    2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号. 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi, ...

  4. WSGI介绍

  5. 2015年蓝桥杯C/C++大学B组省赛真题(加法变乘法)

    题目描述: 我们都知道:1+2+3+ ... + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+...+10*11+12+...+27*28+2 ...

  6. 代码随想录算法训练营Day53 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day53 动态规划|●  1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 1143.最长公共子序列 题目链接:1143.最长公 ...

  7. < Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类

    欢迎来到我们的系列博客<Python全景系列>第九篇!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法.无论你是编程新手,还 ...

  8. 使用c#实现23种常见的设计模式

    使用c#实现23种常见的设计模式 设计模式通常分为三个主要类别: 创建型模式 结构型模式 行为型模式. 这些模式是用于解决常见的对象导向设计问题的最佳实践. 以下是23种常见的设计模式并且提供c#代码 ...

  9. shell编程-发送消息

    需求:利用 Linux 自带的 mesg 和 write 工具,编写一个向用户快速发送消息的脚本,输入用户名作为第一个参数,消息内容为第二个参数.脚本需要检测用户是否登录,是否打开消息功能,以及当前发 ...

  10. CKS 考试题整理 (13)-使用 sysdig 检查容器里里的异常进程

    Task 使用运行时检测工具来检测 Pod tomcat 单个容器中频发生成和执行的异常进程 有两种工具可供使用: sysdig falco 注: 这些工具只预装在cluster的工作节点,不在 ma ...