從一道CTF題看整數溢位

2021-10-06 22:19:32 字數 971 閱讀 7928

整數溢位漏洞是程式開發過程中危害較大的一種漏洞,經常是pwn中各大神的突破點,利用此跳板,攻入系統,進而攻陷真個系統。此類漏洞不容易發覺,也不容易引起程式設計人員的注意。

近期在研究「網鼎盃2020白虎組」的比賽試題中,有一道re逆向題目-「惡龍」,涉及到整數溢位,如利用此漏洞,可快速拿到flag。本題解題思路有多種,詳見 這篇部落格中有詳細的解釋。網上大多數的解法是,動態除錯程式,在斷點處patch 程式執行的記憶體值,簡單粗暴的修改 自己的戰鬥值(eff)。這裡從另外乙個角度觸發,利用整數溢位漏洞,也可快速得到flag。 部分**如下圖

如下圖介面,在選項3,go to shop,購買體力值時,輸入大整數5999999999,導致購買體力值溢位,coins 變為了乙個大整數884901895,後面直接獲取得到flag。

在idea 中**靜態分析,可以看到,在12行,輸入了乙個整數值,直接存入了v1。

此處特別要注意有符號整數向無符號整數轉換的問題。重點在於紅色斷點處v2為 signed int ,最大值為2^31 - 1,最小值為   -2 ^ 31,當(coin-2*v1) 小於最小值時,就會造成最小值溢位,coin的值回卷到乙個很多的正數,達到溢位獲取異常體力值的目的。coin的初始值為5,即

`5-2*v1 < -2 ^ 31,即v1 > (5+2^31)/2`,v1 > 2.5+2^30即可。輸入最小整數值(1073741824+3)即可獲取flag,如圖

一道CTF題 sql爆破

題目 開啟網頁 說明存在sql注入。嘗試了一些常見的繞過操作都不行,過濾了注釋 空格,and,select等。嘗試用 11 繞過 頁面正常 頁面正常 頁面正常 報錯 以上測試說明表有四列。測試回顯 union也可以大寫 返回3,說明在第3個位置可控。爆資料庫 得到資料庫test。爆表名 出現表名 c...

一道題看水平

題目 四個正整數abcd,均小於10000。寫乙個函式實現d等於a的b次方與c取餘。一 int function int a,int b,int c return s 二 unsigned int fact unsigned int a,unsigned int b,unsigned int c r...

一道內部ctf檔案包含題

在burp裡看下 拿到原始碼 很明顯是一道檔案包含題目,包含cookie裡的值,於是構造cookie language chinese試試 檔案變成中文的了,說明中文語言進行了包含並替換 輸入flag試試 這裡發現並不能直接顯示出flag,而很奇怪的一點是之前的那些文字沒了 經過測試這裡只要不是ch...