-
-
看雪CTF2019Q1-第3题
-
2019-3-18 22:05
4990
-
这题在以前的基础上做了点修改
1. 绑定了一个IE控件回调
about:blank#sptWBCallback:id=123456;eventName=undefined
CODE:00491DCC sub_491DCC proc near ; CODE XREF: _Tfrmcrackme_FormCreate+81↓p
CODE:00491DCC push ebx
CODE:00491DCD mov ebx, eax
CODE:00491DCF mov eax, ebx
CODE:00491DD1 call sub_491B78
CODE:00491DD6 mov eax, [ebx+40h]
CODE:00491DD9 mov [eax+2A4h], ebx
CODE:00491DDF mov dword ptr [eax+2A0h], offset x_CB_492088
CODE:00491DE9 pop ebx
CODE:00491DEA retn
CODE:00491DEA sub_491DCC endp
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;
}
回调中提取id, eventName, params, 这里只对id有处理
2. 在jscript.dll的JsEval内的COleScript::Compile处下断, 得到eval后的js, 得到前半部分: simpower91
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 onclick() {
ckpswd();
}
3. 后半部分(
跟踪前面的回调函数)
这部分通过虚拟机对id进行验证
CODE:004734B0 push ebp
CODE:004734B1 mov ebp, esp
...
CODE:004734F1 jmp dword ptr [esp-44h] ; 这里会跳向反汇编出来的代码
比如
0009503C add eax, 7F
0009503F push 473A5E
00095044 retn
BYTE buf[3];
buf[0]+0x7F==0xE0
buf[1]+0x7F==0xB0
buf[2]+0x7F==0xB1
buf[3]+0x7F==0xB2
得到后半部分: a123
得到flag: simpower91a123
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。