CSAPP Lab:Attack Lab——手把手教你寫病毒(大誤

來源:互聯網
上載者:User

標籤: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——手把手教你寫病毒(大誤

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.