今天要介紹的題目
主要是靠著理解程式碼的勝利條件
和弄懂各種參數的特性來破解的題目
首先我們來看看題目
這題目給了我們目標
和目標內程式的原始碼
所以我們先把程式碼下載下來看看
看完程式碼之後會發現
這是一個買Flag的遊戲(???
一開始會有1100元
裡面會有兩個選項
一個是買假的flag 需要1000元
一個是買真的flag 需要100000元
我們可以看到
只要讓自己的錢達到十萬元以上
就可以買到flag
但是裡面所有的選項都只有花錢啊!!!
到底是要怎麼賺錢哩
再來讓我們看看
他買假flag的設計
從邏輯上我們可以看到
他會先檢查你要買的flag數量
然後乘上一千之後再去檢查你現有的錢是否大於你需要付出的錢
這時候我們可以發現一件事情
int的上限是2147483647
而他只有檢查你輸入flag數量是否為負數
還有你擁有的錢是否大於你購買所需付出的錢
這時候再想想
如果你輸入一個2147500的話
乘上1000就會變成2147500000
但他這時候已經超出int的上限
所以對電腦來說
你要付出的錢已經變成了-2147467296元
最後你買完這些假flag之後
手上的錢就會變成1100-(-2147467296)
這時候你就擁有足夠的錢去買真正的flag啦~~~
是不是非常的神奇呢
在真實的情況中
有很多很多的程式其實都存在著很不容易想到的漏洞
但如果有心的攻擊者找到突破的方法
就有機會讓原本的限制失去效用