flag:

30127f00b01232450000000000000000(903a) 這部份放起始位置

我的密碼是從 3a90 開始放 

 

解題想法

如果沒有意外,相信一定是印出 That password is not correct   ( 沒關係,我從來沒期待會正確 )

這時,我第一個想法是,既然你要我輸入密碼,我就先賭 overflow 的漏洞

果然,輸入一堆 A 後,發現 3a90 ~ 3abf 被塞爆了 

接著讓程式執行,並在 452e 下斷點,你將會發現執行後,pc 會變成 AAAA    (亨亨,可以控制程式囉)

(想知道為什麼在 452e 下斷點嗎,因為我是天才阿~~~, 阿!不是啦,是因為他是 login 的最後一行,我想知道執行完會去哪)

這時,自稱天才的我,就想說把程式導到 451c ,果不其然,印出 Access granted      (Ya~~~, 阿為什麼 solve 不過)

廢話,它只是印出一段句子,又不是解鎖,我到底是在 high 什麼????

於是乎,我就很認真的去 trace code ,發現...他竟然沒有 unlock function   (哪尼!!!)

X!無所謂,我自己寫一個  ,但要怎麼寫呢?? 於是就問了 google 大神 

得到的結論是

push 0x7e    

call 0x4532 <INT>

代表的是 lock

 

push 0x7f

call 0x4532 <INT>

代表的是 unlock

 

這點可以透過規格書或前面的題目發現

規格書 https://microcorruption.com/manual.pdf

 

因此,我們的目標就是要讓程式執行 unlock 那兩行

怎麼做呢?

首先,我們透過網頁右上方的 assembler 

輸入

push #0x7f

call #0x4532

按下 Assemble

會出現 30127f00b0123245

接著,只要把這段數字 injection 到 code ,並且執行就行了

怎麼做呢?

透過 overflow 的實驗,我們發現密碼會從 3a90 開始塞

另外,當程式執行到 login 的 ret 後,會將 PC 改成 3aa0 位址的值 

因此,我們只要將代碼塞入到 3a90 並且在 3aa0 的部份塞入 903a ,其餘的隨便塞,我是塞 0 啦

你就會過關囉~~~~~(灑花)

 

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()