首页
论坛
课程
招聘
[原创]CTF2019Q1 第三题 影分身之术
2019-3-24 17:54 3982

[原创]CTF2019Q1 第三题 影分身之术

2019-3-24 17:54
3982

初步分析

看起来很像去年的题目,先看内存拿 js

function ckpswd() {
    key="simpower91";
    a = document.all.pswd.value;
    if (a.indexOf(key) ==0) {
        l=a.length;
        i=key.length;
        sptWBCallback(a.substring(i,l));
    } else {
        alert("wrong!<" + a + "> is not my GUID ;-)");
        return "1234";
    }
}

function ok(){  alert("congratulations!");}

function sptWBCallback(spt_wb_id, spt_wb_name, optionstr) {
    url = '#sptWBCallback:id=';
    url = url + spt_wb_id + ';eventName=' + spt_wb_name;
    if (optionstr)
        url = url+';params=optionstr';
    location = url;
}

可以看到变了很多,这次采用了浏览器跳转 location 的方式把关键对比逻辑转移到了内部的浏览器事件处理

助攻

正当在发愁 dephi 怎么追踪浏览器事件的时候,队友找到了处理点(猜测可能通过字符串)
聊天记录

 

在 492088 这个函数里有提取 sptWBCallback 后参数的操作,紧接着是进入了虚函数了,所以要动态调试跟进

调试

进入 493F70 函数后,他对输入先做了长度为4的判断,也就是说加上前缀 simpower91 要输入 simpower911234 的形式才能往后走

 

跳过长度判断,来到关键函数 473A04,我没有仔细搞懂整个函数如何实现的,他调用了2个 4734B0 函数,我先进去看这个函数,经过调试,发现他有点虚拟机的性质,加上之前分析碰到的字符串 TVirtualMachine,应该就是了

 

vmcall

 

接下来只要在 4734F1 处下断点,就能直接拿到汇编翻译结果,直接手动调试硬钢,得到判断逻辑

a[0] + 0x7f == 0xe0
a[1] + 0x7f == 0xb0
a[2] + 0x7f == 0xb1
a[3] + 0x7f == 0xb2

反向求得输入的4个字节(有点太短太随便了)


[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

收藏
点赞2
打赏
分享
最新回复 (1)
雪    币: 2420
活跃值: 活跃值 (17)
能力值: ( LV11,RANK:198 )
在线值:
发帖
回帖
粉丝
simpower 活跃值 2019-3-27 09:37
2
0
撸主喜欢长的啊?撸主也不喜欢随便?下次我会注意的
游客
登录 | 注册 方可回帖
返回