Pwn-10月21-jarvis-level0
目錄
- Pwn-10月21-jarvis-level0
- 檢查保護措施
- 靜態分析程序邏輯
- 動態分析程序邏輯
- 攻破
Pwn-10月21-jarvis-level0
這題是補上昨天沒寫完的一題。。。雖然很簡單??
檢查保護措施
file level0 and checksec level0:
可以看到這種簡單的pwn題基本不開保護措施,不然菜雞我也玩不下去。。。
靜態分析程序邏輯
一用IDA Pro打開程序文件看看main函數就腦殘地看到了return vulnerable_function()
跟著去這個函數看一看:
可以看到定義的buf空間為0x80,而能夠用read函數讀取的為0x200,能夠造成棧溢出,并且實現函數地址覆蓋。而且我們也可以看到一個callsystem函數,點進去看看可以發現system("/bin/sh"):
那么根據靜態分析出來的信息大概可以確定:首先通過main函數返回到vulnerable_function函數,然后通過vulnerable_function函數將某處返回地址覆蓋為callsystem函數的地址,然后getshell。
動態分析程序邏輯
gdb 調試一下level0,先單步執行到vulnerable_function()函數:
先過一遍該函數,然后記錄關鍵信息:
計算一下距離:hex(0x7fffffffdfc0 + 8 - 0x7fffffffdf40) = 0x88,那為什么比定義的0x80要多0x08的距離呢?這里我們可以通過ida pro的alt + k快捷鍵查看buf的棧幀,會發現:
通過gdb調試里面的多個關鍵信息對比,其實多出來的0x08是棧底的內容,繼續下一步,就可以看到最開始被壓入棧中的返回地址被置棧頂,準備返回:
那么我們就可以開始構造exp啦?。
攻破
通過上面的邏輯我們可以寫出如下exp:
#coding:utf-8 Author = "Yof3ng" from pwn import *io = process("level0") callsystem_addr = 0x400596 padding = (0x80 + 0x08)*"a" payload = padding + callsystem_addr io.recvline() io.sendline(payload) io.interactive()運行效果:
然后就getshell啦?。
轉載于:https://www.cnblogs.com/yof3ng/p/9824172.html
總結
以上是生活随笔為你收集整理的Pwn-10月21-jarvis-level0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非空约束对数据更新的影响
- 下一篇: shell脚本知识点汇总