PIEs-hard
题目简介
程序开启了PIE保护,因此程序每次加载的基地址都是不确定的;我们无法再得知后门函数或者shellcode的真实地址,需要通过爆破的方法拿到shell
通过这题记录一个小trick,有关PIE的基础理论在这里二进制总结
漏洞点分析
首先checksec看一下,发现除了cananry全部保护开启,直接断绝shellcode的念头
先考虑有没有后门函数,将二进制文件拖入IDA,可以看到有一个win_auth函数,同时溢出点在challenge函数
这样的话漏洞点就清晰了,就是通过覆盖challenge函数的返回地址来跳转到win_auth即可
漏洞点利用
首先计算偏移,同样在IDA里看缓冲区相对于rbp的偏移然后+8即可,算出来是120
接下来通过objdump看到win函数相对于程序装载基地址的偏移=0x1ab2
但是这里有一个问题,我们不能跳转到0x1ab2,因为win函数入口处存在对参数值的校验,只能跳转到校验逻辑的后面,比如0x1ace
最后,我们需要覆盖最后一个半字节,爆破剩下的15位十六进制数
一个小trick,个人习惯把偏移加上个1、2左右,从做的题目来看,这样可以更早撞上(maybe程序装载基地址倒数第4位是0的概率更小?不太确定……),但不管怎么说,碰撞16次以后就有很高的概率可以碰对了
最后的利用脚本如下:
1 | |
脚本运行完毕后可以在当前目录的flag.txt中找到flag
PIEs-hard
http://0x4a-210.github.io/2025/07/19/pwn.college/Intro-to-Cybersecurity/Pwn/PIEs-hard/