iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0

這次我們終於要來做toooomuch-2的題目了!
上次有說到會利用到shellcraft的模組,這次我們就來看shellcraft是什麼吧!

來用pwntools輸出一下shellcraft.sh(),其實註解都寫得很清楚了,簡單來說就是讓程式做一個簡單的/bin/sh讓我們拿到權限,整體順序主要是先寫好/bin/sh後送進execve,讓execve執行/bin/sh,不過我們在整個程式當中並沒有看到以前看過的Call plt,反而是在最後看到一個沒看過的int 0x80,這個其實是System call,我們在之後會講到,這次我們先簡單了解大概就好。
https://ithelp.ithome.com.tw/upload/images/20241011/20169016tnCwnyIWjP.png

現在回到我們的題目toooomuch-2,上一次的toooomuch單純是在分析passcode是什麼,然後進到遊戲當中得到Flag,但往程式裡面看時會發現gets是可以被利用的,只是程式當中並沒有像上一次的homework有/bin/sh的Function讓我們轉跳,所以這次我們就要利用shellcraft來自己造一個/bin/sh並跳過去。

我們一樣先用cyclic來計算要多少才能到Return address,可以看到需要Padding的數量有28個,那有了數量有了Shellcode,還需要放Return address的值,該放在哪裡呢,官方有給了提示,要我們Return address塞0x8048560,這個時候我們的構造就出來了,前面塞28個bytes再放0x8048560然後把我們的Shellcode塞進去。
https://ithelp.ithome.com.tw/upload/images/20241011/20169016tMUDWkEoMS.png

整個Payload就會長這樣,要注意的是因為shellcraft生成的是組合語言,我們需要用asm轉成Bytes送進去。
https://ithelp.ithome.com.tw/upload/images/20241011/2016901636wNKePjD8.jpg

這樣我們就可以順利拿到Flag了!
https://ithelp.ithome.com.tw/upload/images/20241011/201690161sUkQRqh6d.png

其實這個原理就是找出Process中有寫入權限的地方,將Shellcode寫進去執行,我們可以在GDB下info proc指令看到現在的Process id是多少,然後到系統/proc/找到對應的id,查看maps就可以知道目前這個Process的權限,以目前的Process來說,0x8049000到804a000都是能夠寫入的,那我們要用什麼寫入呢,我們可以利用程式當中本來就有的gets寫進去,那可能會說不過他並沒有x的權限,但我們可以利用checksec得知,這個程式並沒有NX的保護,而如果NX沒有啟用,即使一個記憶體區域標註為 rw-p,仍然可以在這個區域執行程式碼。
https://ithelp.ithome.com.tw/upload/images/20241011/20169016DeltApnn7z.jpg

所以構造就會是,先放Padding然後放gets的plt Address然後放gets結束後要Return到哪,也就是剛剛看到的可以寫入的0x8049000,gets就會將寫入的程式放好後,接著要把Shell code執行起來,所以要再Call一次0x8049000,因為我們寫在這裡,所以整體的Payload就會長這樣。
https://ithelp.ithome.com.tw/upload/images/20241011/20169016xLUytemMd3.jpg
https://ithelp.ithome.com.tw/upload/images/20241011/20169016vViAA2vw5v.png

這就是當官方沒有給我們提示時的做法,官方題目通常都是經過精心設計的,因此能夠自己找到寫入並執行,才是真的理解如何運用這個漏洞攻擊。


上一篇
【Day-26】Pwn 實戰 - 1
下一篇
【Day-28】System call
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言