iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
1
Security

CTF入門學習系列 第 5

[Day5]程式邏輯和參數屬性的漏洞

今天要介紹的題目
主要是靠著理解程式碼的勝利條件
和弄懂各種參數的特性來破解的題目

首先我們來看看題目

https://ithelp.ithome.com.tw/upload/images/20181020/20112085bmrgWLDwdt.png

這題目給了我們目標
和目標內程式的原始碼

所以我們先把程式碼下載下來看看
看完程式碼之後會發現
這是一個買Flag的遊戲(???
一開始會有1100元
裡面會有兩個選項
一個是買假的flag 需要1000元
一個是買真的flag 需要100000元

https://ithelp.ithome.com.tw/upload/images/20181020/20112085r5a4c6fJNJ.png

我們可以看到
只要讓自己的錢達到十萬元以上
就可以買到flag
但是裡面所有的選項都只有花錢啊!!!
到底是要怎麼賺錢哩
再來讓我們看看
他買假flag的設計

https://ithelp.ithome.com.tw/upload/images/20181020/201120852jZdwfWbAb.png

從邏輯上我們可以看到
他會先檢查你要買的flag數量
然後乘上一千之後再去檢查你現有的錢是否大於你需要付出的錢
這時候我們可以發現一件事情
int的上限是2147483647
而他只有檢查你輸入flag數量是否為負數
還有你擁有的錢是否大於你購買所需付出的錢

這時候再想想
如果你輸入一個2147500的話
乘上1000就會變成2147500000
但他這時候已經超出int的上限
所以對電腦來說
你要付出的錢已經變成了-2147467296元
最後你買完這些假flag之後
手上的錢就會變成1100-(-2147467296)
這時候你就擁有足夠的錢去買真正的flag啦~~~
是不是非常的神奇呢

在真實的情況中
有很多很多的程式其實都存在著很不容易想到的漏洞
但如果有心的攻擊者找到突破的方法
就有機會讓原本的限制失去效用


上一篇
[Day4]執行檔資料輸出分離
下一篇
[Day6]如何使用gdb偷看執行中的程式
系列文
CTF入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言