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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级)

發(fā)布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考例題 https://blog.csdn.net/weixin_45556441/article/details/115091036

引子

隨著 NX 保護的開啟,以往直接向棧或者堆上直接注入代碼的方式難以繼續(xù)發(fā)揮效果。攻擊者們也提出來相應(yīng)的方法來繞過保護,目前主要的是
ROP(Return Oriented Programming),其主要思想是在棧緩沖區(qū)溢出的基礎(chǔ)上,利用程序中已有的小片段
(gadgets) 來改變某些寄存器或者變量的值,從而控制程序的執(zhí)行流程。所謂 gadgets 就是以 ret
結(jié)尾的指令序列,通過這些指令序列,我們可以修改某些地址的內(nèi)容,方便控制程序的執(zhí)行流程。

之所以稱之為 ROP,是因為核心在于利用了指令集中的 ret 指令,改變了指令流的執(zhí)行順序。ROP 攻擊一般得滿足如下條件

程序存在溢出,并且可以控制返回地址。

可以找到滿足條件的 gadgets 以及相應(yīng) gadgets 的地址。

如果 gadgets 每次的地址是不固定的,那我們就需要想辦法動態(tài)獲取對應(yīng)的地址了。

解法利用思路:

第一次觸發(fā)漏洞,通過ROP泄漏libc的address(如puts_got),計算system地址,然后返回到一個可以重現(xiàn)觸發(fā)漏洞的位置(如main),再次觸發(fā)漏洞,通過ROP調(diào)用system(“/bin/sh”)

1.利用一個程序已經(jīng)執(zhí)行過的函數(shù)去泄露它在程序中的地址,然后取末尾3個字節(jié),去找到這個程序所使 用的libc的版本。2.程序里的函數(shù)的地址跟它所使用的libc里的函數(shù)地址不一樣,程序里函數(shù)地址=libc里的函數(shù)地址+偏移 量,在1中找到了libc的版本,用同一個程序里函數(shù)的地址-libc里的函數(shù)地址即可得到偏移量3.得到偏移量后就可以推算出程序中其他函數(shù)的地址,知道其他函數(shù)的地址之后我們就可以構(gòu)造rop去執(zhí) 行system(’/bin/sh‘)這樣的命令 ————————————————

常用的 EXP 格式 語句

libc=LibcSearcher('puts',puts_addr) #找到libc版本 offset=puts_addr-libc.dump('puts') #算出偏移量 binsh=offset+libc.dump('str_bin_sh') #偏移量+libc函數(shù)地址=實際函數(shù)地址 system=offset+libc.dump('system')

32位程序運行執(zhí)行指令的時候直接去內(nèi)存地址尋址執(zhí)行

64位程序則是通過寄存器來傳址,寄存器去內(nèi)存尋址,找到地址返回給程序



查找 rdi, ret 地址的語句:ROPgadget --binary 文件名 --only "pop|ret"

ROPgadget --binary 文件名 --only "pop|ret" | grep rdi

總結(jié)

以上是生活随笔為你收集整理的CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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