题目要求
靶机配置了ssh,可以账号test、密码123通过ssh登录到靶机进行攻击。(靶机IP地址见题目中网络拓扑图)
靶机中配置了一个程序,部分代码如下。
该程序将判断用户uid,当uid为0时才允许获取flag。
请想办法绕过该检测,获取flag。
环境中配置有gdb调试工具。
提示:逆向工程;函数返回值一般存放在eax寄存器中。
探索过程
进入靶机后,运行可执行文件
提示也告诉我们,只要用gdb调试更改eax寄存器的值为0,大概便可以绕过检测。
开始gdb调试:
输出汇编代码:
一开始我没动脑子,想着应该只需更改最靠后的$eax值便可:
结果是失败。说明修改的位置晚了。
再次阅读汇编代码,应该修改的是紧跟getuid后面的$eax的值,
也就是设断点在以下位置:
删除原断点,增加新断点:
运行程序,在断点处停下时查看一下$eax的值:
设置$eax=0,再继续运行程序,获得flag!
简化版实验步骤
1.开启gdb调试,并把token文件加载
2.查看汇编代码
3.定位test %eax,%eax这一步的地址
4.设断点于上述地址
5.运行文件,在程序于断点停下后,修改$eax的值为0
6.继续运行文件,得到flag。