日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/10/18 编程问答 162 如意码农
生活随笔 收集整理的這篇文章主要介紹了 [Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文:https://www.freebuf.com/sectool/366854.html

存自己這里方便看。

0x00 前言

如何修改本地pwn文件和題目所給環(huán)境一致,從而進(jìn)行調(diào)試,這是從學(xué)習(xí)堆開(kāi)始就遇到的心頭之患。從那以后,直到今天參加完mini LCTF,為了復(fù)現(xiàn)一道題目才把這個(gè)問(wèn)題解決掉。網(wǎng)上的博客,參差不齊,由于本人不才,導(dǎo)致都不起作用。故在某學(xué)長(zhǎng)在校內(nèi)論壇之中找到正確方法,從而解決了這一心頭之患。

并且這里面有一些小問(wèn)題,也希望請(qǐng)教一下大家。問(wèn)題我會(huì)用Q來(lái)表示,歡迎捕捉!

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

如果不行(我就是不行…),進(jìn)入下方鏈接。

ps:后來(lái)發(fā)現(xiàn)是ipv6掉認(rèn)證了

點(diǎn)擊download下載,手動(dòng)解壓

然后運(yùn)行sudo python update_list(如果遇到報(bào)錯(cuò)請(qǐng)檢查網(wǎng)絡(luò)問(wèn)題,我在那里卡了比較久,注意要用direct連接。這里不明白什么意思的話不用管我),接著cat list得到包名。

patchelf

我是archlinux,yay patchelf就可以安裝好,所以在這里沒(méi)有遇到什么問(wèn)題。其他子系統(tǒng),可以自行搜索,網(wǎng)上的教程很詳細(xì),大家可以自行解決。

0x02 確定patch什么庫(kù)

修改:新增快方法

在有題目所給libc.so.6的目錄下直接輸入strings libc.so.6 |grep Ubuntu 即可。

1.確定偏移用于搜索

使用ROPgadget

這里的思路我的比較簡(jiǎn)單,ROPgadget用來(lái)查str_bin_sh的地址。

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

得到



Q1:那么有沒(méi)有辦法用ROP來(lái)查printf,system之類(lèi)的地址呢?我暫時(shí)沒(méi)查到相關(guān)命令,如果有的話會(huì)很簡(jiǎn)單,不需要接下來(lái)的步驟。

使用pwntools

from pwn import *

p = process('./pwn')
libc = ELF('./libc.so.6')
elf = ELF('./pwn') system = libc.sym['system']#這里的system可以替換成別的函數(shù),用于搜索偏移
print(hex(system))
if args.G:
gdb.attach(p) p.interactive()

運(yùn)行。

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

3.搜索庫(kù)

推薦兩個(gè)網(wǎng)站一起用,找不到的話換另一個(gè),一定要多搜索幾個(gè)偏移確保沒(méi)錯(cuò)。其實(shí)也可以使用libc-database,不過(guò)這個(gè)不是這篇文章的重點(diǎn)。

https://libc.rip/

https://libc.blukat.me/



得到庫(kù)名。

0x03 下載庫(kù)

運(yùn)行cat list找到2.35-0ubuntu3.1_amd64。



cd到年裝的glibcallinone的文件夾下。

輸入./download 2.35-0ubuntu3.1_amd64即可。

但是我一開(kāi)始不太一樣,我遇到了問(wèn)題如下:

~/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

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

后來(lái)發(fā)現(xiàn)是沒(méi)安裝wget且校園網(wǎng)ipv6掉認(rèn)證,重新登陸一下后成功。

0x04 patch!!

找到你的ld和libc.so.6文件。



找到他們的目錄,然后在pwn題目文件目錄下運(yùn)行以下兩條命令:

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

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

patchelf --add-needed 你的目錄/libpthread.so.0 ./pwn (如果提示沒(méi)有l(wèi)ibpthread.so.0的話)

大功告成。

尾聲

動(dòng)態(tài)調(diào)試是pwn中必不可少的重要步驟,而patch則是讓我們能夠動(dòng)態(tài)調(diào)試的必由之路。歡迎有任何問(wèn)題在評(píng)論區(qū)提出,我們將繼續(xù)努力走向更高處。

當(dāng)你沒(méi)有符號(hào)表?

https://loora1n.github.io/2022/11/01/【祥云杯2022】PWN-WriteUp-protocol/

總結(jié)

以上是生活随笔為你收集整理的[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。