.d8888b. 888 888 888 8888888888 .d8888b.
d88P Y88b 888 888 888 888 d88P Y88b
888 888 888 888 888 888 Y88b.
888 888 888 888 8888888 "Y888b.
888 88888 888 888 888 888 "Y88b.
888 888 888 888 888 888 "888
Y88b d88P 888 Y88b. .d88P 888 Y88b d88P
"Y8888P88 88888888 "Y88888P" 888 "Y8888P"
作者: DiegoAltF4
GLUFS 允许你自动化利用格式化字符串漏洞寻找泄漏的繁琐过程。 它能帮助你寻找栈泄漏、PIE 泄漏和 canary 泄漏,并在每种情况下指示提供泄漏的载荷。 此外,它还包含一个模式,允许你在泄漏中搜索 "flag" 字符串。该模式可以使用 %s 或 %p 说明符。
在此示例中,我们将使用 GLUFS 来获取 PIE 和 canary 泄漏。
我们用作示例的二进制文件是 TryHackMe 房间 pwn101 中挑战 7 对应的二进制文件 TryHackMe 房间 pwn101。
我们将使用 -b 选项指定二进制文件,-min 选项指定迭代的初始值,-max 指定迭代的结束值。此外,我们想要获取关于 canary 和 PIE 的信息。
./glufs.py -b ./pwn107.pwn107 -min 5 -max 15 --pie --canary

在此示例中,我们将使用 GLUFS 来获取 flag。
我们将要解决的挑战是 247CTF 平台上的 Confused environment read。
此示例中我们不使用二进制文件。我们只有 IP 和端口。因此,我们将使用 -ip 选项指定地址,-port 指定端口,-flag 指定要查找的 flag 的开头。此外,由于没有二进制文件,我们必须指定架构,本例中为 x86-64(-arch 64)。我们还将使用 -min 指定迭代开始,-max 指定迭代结束。另外,我们将使用 -s 选项以使用 %s 代替 %p。
./glufs.py -ip 3bcbadabd1a7e914.247ctf.com -port 50387 -flag 247CTF -arch 64 -min 1 -max 200 --s

在此示例中,我们将使用 GLUFS 来获取 flag。
我们将要解决的挑战是 PicoCTF 平台上的 flag leak。
在此示例中,我们将使用 -ip 选项指定服务器地址,-port 指定服务器端口,-b 指定二进制文件,-flag 指定 flag 的开头,最后,使用 -min 和 -max 指定迭代的起始和结束。如果没有指定 --s 选项,将默认使用 %p 格式。
./glufs.py -ip saturn.picoctf.net -port 50563 -b ./vuln -flag picoCTF -min 20 -max 200

git clone https://github.com/Diego-AltF4/GLUFS.git
cd GLUFS/
pip3 install -r requirements.txt
chmod +x ./glufs.py
修改代码以使其适应你的二进制文件/挑战非常重要。为此,代码中有两个分隔的部分,你需要进行更改以获取格式化字符串的泄漏,以及配置何时发送载荷。
示例: 对于上述 picoCTF 挑战,使用以下配置:
#######################################################################
# 这是你必须修改以适配二进制文件的部分。 #
#######################################################################
p.sendlineafter(b'>>', payload)
p.recvuntil(b'-')
leak = p.recv().strip(b'\n')
#print(leak) ## 用于调试错误
#######################################################################
| 参数 | 信息 |
|---|
| -b | 选择此选项以指定要利用的二进制文件。 |
| -max | 选择此选项以指定要测试的最大值。范围:(min, max)。默认值:max = 40 |
| -min | 选择此选项以指定要测试的最小值。范围:(min, max)。默认值:min = 1 |
| -ip | 选择此选项以指定远程服务器的 IP 地址。 |
| -port | 选择此选项以指定远程服务器的端口。 |
| -flag | 选择此选项以指定要搜索的 flag 的开头。 |
| -arch | 选择此选项以设置架构(32 或 64)。 |
| --s | 选择此选项以使用 %s 代替 %p。 |
| --canary | 选择此选项以查找 canary 泄漏所在的位置。 |
| --leaks | 选择此选项以打印所有找到的泄漏。 |
| --pie | 选择此选项以查找 PIE 泄漏所在的位置。 |
| --stack | 选择此选项以查找栈泄漏所在的位置。 |
| --v | 选择此选项以启用 Verbose 模式。 |