日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2023/10/18 178 如意码农
生活随笔 收集整理的這篇文章主要介紹了 [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,不過這個不是這篇文章的重點。

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的正确姿势的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。