bugku-逆向-11、不好用的ce

本文通过逆向工程解析了一个点击挑战程序的内部逻辑,并成功提取出加密后的flag,利用Base58解码得到flag{c1icktimes}

下载程序,运行一下:
在这里插入图片描述

点确定,有会弹出一个新的窗口:
在这里插入图片描述

点击Command按钮,左上角的数字就会增加,大概是要我们点击一万次:
在这里插入图片描述

再用PEiD看一下有没有加壳:
在这里插入图片描述

并没有加壳,是MFC编程的小软件。所以我们用IDA打开,是没法查看伪代码的:
在这里插入图片描述

查看字符串也没有找到有用的信息,只有一个标题的From1:
在这里插入图片描述

直接用OD打开,动态调试:
在这里插入图片描述

MFC程序停在统一的外层入口处7770A9E0,直接Ctrl+G或者点击断点跳转到我们内层程序:
在这里插入图片描述

右键->查找->所有参考文本:

在这里插入图片描述

其实上面的DeZmqMUhRcP8NgJgzLPdXa就是加密后的flag,有人直接就知道它是flag了,但我开始没注意到,我是看到之前按我们运行程序的时候看到的字符串“点击一万次有flag”,点击它查看一下:
在这里插入图片描述

单步调试,发现程序调用了msvbvm60.rtcMsgBox(调用一个消息框):
在这里插入图片描述

运行了这行汇编之后就会显示这个框:
在这里插入图片描述

点击确定之后,就到了这一行代码:
在这里插入图片描述

再往下就是返回msvbvm60.66051D33的程序领空:
在这里插入图片描述

返回到msvbvm60.66051D33中调用工程4模块的函数:
在这里插入图片描述

之后就是在msvbvm60模块中逐层的返回、交叉调用:
在这里插入图片描述

最终再回到最里层的函数:
在这里插入图片描述

它再调用工程4模块的函数:
在这里插入图片描述

这个函数再跳转到比较点击次数最终输出函数,00401880:jmp 工程4.00401C80:
在这里插入图片描述

往下到00401E21:test ah,0x40; 判断点击的次数,决定跳转的方向,测试ah的第7位(0100 0000)是否为1。ah的第7位是1,则说明它已经计数到了一万次,则test的结果是1,ZF标志位置0,不跳转,输出flag;否则ah的第7位不是1,则说明它还没有计数到了一万次,则test的结果是0,ZF标志位置1,跳转,不输出flag。
00401E24:je short 工程4.00401E97; 跳转,不输出flag。JE看零标志位,zf = 1则JE跳转,ZF = 0则JE不跳
在这里插入图片描述

所以我们只要在这修改标志位ZF、修改0x40的大小或者修改JE等多种方法阻止程序的跳转,让它正常输出flag即可:
在这里插入图片描述

我们直接把ZF标志位修改成0,让程序不跳转输出flag:
在这里插入图片描述

DeZmqMUhRcP8NgJgzLPdXa明显是加密后的flag,开始以为是Base64,结果解码失败:
在这里插入图片描述

后面觉得可能是Base家族中的其他编码方式:base32、base16、base58、base91、base92、base36、base62、base85、base128、base52、base56、base58、base94。百度搜了一下,发现是Base58编码,找到一个Base8在线解码的网站:http://www.metools.info/code/c74.html
在这里插入图片描述

得到flag:flag{c1icktimes}。

### BugKu CTF 渗透测试教程与资源 BugKu平台提供了丰富的CTF挑战,这些挑战被设计成不同难度等级的任务,旨在满足各种技能水平的学习者需求[^1]。对于希望提升渗透测试技巧的人来说,参与这样的活动是非常有益的。 #### 学习路径建议 为了更好地准备参加BugKu上的CTF比赛并提高解决问题的能力,可以按照以下方向来规划学习: - **基础理论掌握**:了解计算机网络基础知识、操作系统原理以及编程语言(特别是Python和PHP)。这有助于理解Web应用程序的工作机制及其潜在的安全弱点。 - **实践操作训练**:通过实际动手练习来巩固所学的知识点。利用在线实验环境如VulnHub、HackTheBox等进行模拟攻击演练;也可以尝试解决一些简单的CTF题目积累经验。 - **深入研究特定领域**:随着技术水平的增长,可以选择专注于某些方面进一步深造,比如逆向工程、密码破解或是二进制漏洞挖掘等高级主题。 #### 关于`0e`开头MD5哈希碰撞漏洞案例分析 在BugKu平台上有一个有趣的例子涉及到PHP处理以`0e`开头的MD5散列值时可能出现的问题。当输入数据经过MD5算法转换后得到的结果形似`0e<number>`形式,则会被解释为科学计数法下的数值零,在比较过程中可能会导致意外的行为发生[^4]。这种特性曾被用于绕过基于字符串匹配的身份验证逻辑错误实现远程命令执行或其他恶意行为。 ```python import hashlib def check_password(password, hashed): """Simulate a vulnerable password verification function.""" return str(hashlib.md5(password.encode()).hexdigest()) == hashed # Example of unsafe comparison due to PHP's loose type casting with '0e' prefix MD5 hashes. print(check_password('240610708', '0e8304004519934f4d')) # True unexpectedly! ``` 此代码片段展示了如何创建一个易受攻击的函数,该函数在接受特殊构造的明文口令作为参数时返回真值,即使它们实际上并不相等。这种情况是因为PHP内部对带有前导字符`0e`的十六进制串进行了不恰当解析所致。 #### 推荐参考资料获取渠道 除了官方文档外,《网络安全入门&进阶学习资源包》也是一份不可多得的好材料,它涵盖了从基本概念到复杂技术应用在内的广泛内容,非常适合想要系统化学习信息安全的同学查阅[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值