论坛首页 CTF竞赛交流区 阅读主题

[原创]KCTF 2025 第6题 秘辛揭露wp

280 浏览 0 回复
#1 楼主 2026-06-01 21:08:55
拿到题目发现要管理员权限运行, 放进ida中发现还导入了socket相关函数;
想着如果无权限也能正常运行, 说不定能失效其中一些反调试手段, 搜索了下如何去除管理员权限需求;
用ResourceHacker打开Mainfest:

将其中的requestedExecutionLevel level="requireAdministrator"改为requestedExecutionLevel level="asInvoker"F5然后保存.
发现确实可以正常运行, 输入最短长度为31的字符串也能发现乔峰残害了少林寺方丈.
该程序使用了MFC框架, 从入口点没找到算法逻辑;
于是在ida的函数窗口中按函数长度排序, 结合frida hook发现第二长的函数在点击登录时被调用, 且很有可能是处理输入的关键算法函数: 输入1111111111111111111111111111111点登录会看到: 从中可以看出输入长度其实是包含\x00在内的共32字节, 输入与返回的第二个int应该存的是长度, 所以返回的结果也是32字节.
在试图f50x12352547中的一些函数时ida报错后续无法再f5, 不过不影响关闭保存再从新打开;
观察汇编结合搜索发现了 054K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6J5k6i4S2&6M7X3g2^5P5g2)9J5c8X3W2V1j5g2)9J5k6r3c8W2j5$3!0E0M7r3W2D9k6i4u0Q4x3X3c8U0M7X3q4K6K9l9`.`.
于是根据其中提到的bextr长度溢出会产生的效果, 将其中所有的 patch为即可让ida正常使用.
并且发现虽然每次打开程序内容会稍作变化, 但每次点击登录其内容是不变的;
之后发现随着输入的变化, sub_12352547的返回结果的变化很有规律; 可以看到结果的前5位与最后一位都已匹配. 于是根据发现的规律可以写脚本主动调用来爆破: check函数比较慢, 但也只跑了不到一小时, 最后结果为发现还包含汉字, 进行gbk解码: 后来想到爆破没必要逐两位爆破可以每两位一起爆破...不过结果都跑出来了就这样吧.Interceptor.attach(ptr(0x12352547), {

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288223.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号