首页
社区
课程
招聘
[原创] KCTF 2019 Q1 第三题 以数据为中心
2019-3-23 22:57 9038

[原创] KCTF 2019 Q1 第三题 以数据为中心

HHHso 活跃值
22
2019-3-23 22:57
9038

0x01
Script 提示,直接搜内存 "is not my GUID",得到如下内容,
可见simpower91为key的前半部分
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;
}


0x02 通过下述敏感字符信息,可以直接定位到location=url最终响应的函数位置 Hi_callback_sub_492088




其中将提取param,eventName,id信息作为参数传递给 函数 493f70
而其中id就是我们key的剩余部分


0x03 在493f70函数中,其通过加载data.txt或直接从自身提取0x3D8长度的内容 ,解密得到虚拟执行代码


在众多代码中,我们关注一个内存拷贝函数,其将edx地址处ECX大小的字节复制到eax地址处


0x04 我们主要在下述两个地方下断点
(1) 47300F处,这个地方主要用来复制编译后的指令
(2) 47326D处,此处已经完成(1)中指令迁移和初始化动作,也可以看到编译的是什么指令
   这时候我们需要在(1)处断点的eax(如A5041处下断点)




(3) 此时,会在(1)处的eax地址处断下,可知道,此时的eax是我们的id[0]='a'

(4)此时,我们应该取消(1)处eax的断点(以防数据后面汇编出错)


上面(1)(2)(3)(4)实际就是编译执行的过程,如此多次,我们会捕捉到简单的校验逻辑
结拜就是 id[i] + 0x7F 然后与 edx寄存器值比较,如果不等就失败,所以我们捕捉cmp eax,edx指令时edx的值,
然后将断点时捕捉到的值-0x7f,再拼凑一起就可以得到我们key的后面部分id的值
我依次捕捉到 0xE0 0xB0 0xB1 0xB2,所以得到a123
即最后key为  simpower91a123
是由硬件断点追踪id的值的使用来确定上述四个断点,前期也需要对模拟执行器的寄存器布局由一定的分析,如知道+107C常为id+0x7F编译执行结果返回地。

id长度由下面逻辑确定为4各字节


000A5040    | 33 D2                    | xor edx,edx                              | edx:"33D2"
000A5042    | 68 84 3A 47 00           | push crackme2019d7.473A84                |
000A5047    | C3                       | ret                                      |

000A5030
000A5030    | 3B C2                    | cmp eax,edx                              | edx:"3BC2"
000A5032    | 68 84 3A 47 00           | push crackme2019d7.473A84                |
000A5037    | C3                       | ret                                      |

000A503E    | 75 52                    | jne A5092                                |
000A5040    | 68 84 3A 47 00           | push crackme2019d7.473A84                |
000A5045    | C3                       | ret                                      |




[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 2428
活跃值: (159)
能力值: ( LV11,RANK:198 )
在线值:
发帖
回帖
粉丝
simpower 2019-3-27 09:41
2
0
ida的结构看的真清晰
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
st0ne31 2021-6-15 17:30
3
0
大佬讲的好清晰
游客
登录 | 注册 方可回帖
返回