標籤:9.png back 可能性 round 為什麼 效果 eve cookie 問題
這個實驗要求在5個有不同安全性漏洞的代碼上進行攻擊,攻擊分為兩部分:
Part 1:Code Injection Attacks(緩衝區溢位攻擊)
Part 2:Return-Oriented Programming(ROP攻擊)
做題之前一定要仔細閱讀write up:http://csapp.cs.cmu.edu/3e/attacklab.pdf,跟著實驗說明做會明朗很多。
檔案說明
ctarget
:一個容易遭受code injection攻擊的可執行程式。
rtarget
:一個容易遭受return-oriented programming攻擊的可執行程式。
cookie.txt
:一個8位的十六進位碼,用於驗證身份的唯一識別碼。
farm.c
:目標“gadget farm”的原始碼,用於產生return-oriented programming攻擊。
hex2raw
:一個產生攻擊字串的工具。
Part 1:Code Injection AttacksLevel 1
第一題是要我們攻擊一個叫test的方法,這個方法中有個getbuf方法,要求從getbuf返回時不讓它返回到test,而是返回到touch方法。
我們可以發現getbuf是一個輸入字串的方法,那麼我們只要將此方法開闢的棧給填滿,然後再填上touch方法的地址,那麼就能實現跳轉到touch的效果了!
所以我們要做兩步:
首先確定getbuf方法的緩衝區大小,反組譯碼gets方法查看:
得到此方法的緩衝區為40個位元組。
其次我們看下touch方法的地址:
地址是4017c0,那麼我們需要輸入的字串就得到了:
前面的40個位元組都是假的,隨意填,關鍵在於最後8位,填的時候需要注意按照小端的排列順序。
然後用hex2raw來產生位元組碼,成功入侵垃圾代碼!
Level 2
根據題目指示,這一題我們要做的同樣是跳轉,這次我們跳轉的是touch2函數,看下touch2函數長什麼樣,發現這裡需要我們傳入一個參數,根據實驗說明我們知道這個參數的位置在%rdi。所以我們需要注入一段自己的入侵代碼了。
這題我的思路是這樣的:
1.寫一段代碼將參數(也就是每個人不同的cookie),放入寄存器%rip中,然後將touch2的地址壓棧,為的是通過ret返回時可以跳轉到ret。
2.然後通過第一題的方式如法炮製利用緩衝區溢位的漏洞將getbuf函數返回到上述的代碼起始位置,也就是緩衝區的起始位置執行攻擊代碼。
我寫的彙編,第一個立即數是我的cookie,第二個是touch2的地址:
利用gcc和objdump命令得到機器代碼:
然後需要找到緩衝區的其真實位址,我們需要gdb在getbuf打斷點查看%rsp的值,但這裡我碰到了個小問題,我前後兩次執行程式查看%rsp的值是不一樣的,導致我第一次實驗始終不通過,沒有能夠理解這裡為什麼會變化,有讀者如果知道可以留言給我。
這裡用最新的rsp值即可再次入侵垃圾代碼!
Level 3
這一題和上面一題很像,要求是跳轉到touch3,同樣需要傳入一個參數,不過這次是傳入一個地址,而不是直接的cookie:
可以看到touch3裡又調用了hexmatch,這裡需要注意了,我們存放cookie的地址,不能在緩衝區隨便放,因為hexmatch裡的數組還會把我們的cookie給覆蓋掉,我的想法是可以講cookie放到緩衝區之上,也就是返回地址再上面8個位元組,也就是%rsp+30。
彙編代碼:
位元組碼::
結果:
Part 2:Return-Oriented Programming
我們之前幾題都是圍繞著緩衝區溢位的話題,但是從這裡開始,rtarget檔案中對於上述攻擊有了防禦措施,比如棧地址隨機化或者緩衝區的代碼直接被設定成為不可執行,這樣就斷絕這種攻擊的可能性,也是現在許多系統所採取的方式,但是攻擊者並不會止步於此,於是ROP就誕生了。ROP攻擊的大致意思就是利用現有的代碼,通過不斷的跳轉,拼湊出自己想要的結果來進行攻擊的方式。
下面是實驗手冊給出的部分指令所對應的位元組碼,我們需要在rtarget檔案中挑選這些指令去執行之前level2和level3的攻擊。
Level 2:
按照題目提示,第一題的代碼可以在這段代碼裡找:
我的思路是先將cookie pop到rax,然後用mov指令將rax移動到rdi,最後通過覆蓋返回地址來執行touch2。
通過觀察我們要的命令在這裡:
分別是58(pop %rax),48 89 c7(movq %rax,%rdi)
地址分別是0x4019ab,0x4019c5,touch2的地址是0x4017ec。
於是我們拼湊的代碼就出來了:
Bingo!
Level 3:
這題略有難度,最近大病一場,等恢複後再挑戰這一題。
CSAPP Lab:Attack Lab——手把手教你寫病毒(大誤