系统安全实验——反编译修改寄存器

文章详细描述了一次针对靶机的攻击过程,通过SSH登录后,发现程序会检查uid是否为0才能获取flag。使用GDB调试工具,通过设置断点并修改eax寄存器的值来绕过uid检查,最终成功获取flag。实验步骤包括定位汇编代码中的关键点,设置断点,修改寄存器值,然后继续执行程序。
摘要由CSDN通过智能技术生成

题目要求

靶机配置了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。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值