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 啦
你就會過關囉~~~~~(灑花)
留言列表