题目链接
http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=42
分析:
题目的入口是一个php页面,打开;
题目截图
查看源代码如下:
源代码截图
发现在JavaScript代码中定义了两个变量
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%30%61%38%36%33%63%36%30';
var p2 = '%34%34%65%35%36%39%63%33%37%31%38%31%37%33%63%62%35%38%62%35%36%61%62%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
这两个变量的值都是%加上一个二位数组成.
如果细心的同学平常在浏览网页的时候就会发现,比如说我们在百度进行搜索的时候,输入关键字,点击搜索按钮.
浏览器的链接框里面就会出现同样格式的字符串,由此可以推断出这两个变量的值一定是根据某一种格式进行编码,所以想到进行解析。
然后继续分析JavaScript代码部分,在定义完这两个变量以后,执行了这条语句;
eval(unescape(p1) + unescape('%34' + p2));
这条语句中分别调用了
eval()
unescape()
这两个函数
百度这两个函数的API,发现:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
unescape() 函数可对通过 escape() 编码的字符串进行解码。
首先需要对先前定义的两个变量进行解码,然后连接两个字符串,然后作为参数传入eval()函数
所以,我们要找到eval()的入口参数,就必须先得对unescape()函数进行了解
百度一下escape()的API
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。(该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。)
或者我们可以直接百度“URL在线解码器”:
解码(p1):
解码('%34' + p2):
解码后得到一串JavaScript代码:
一眼发现其中有一串MD5:0a863c60444e569c3718173cb58b56ab
尝试去MD5破解的网站去查询,但是是一条收费记录。
又回过头来读代码,发现当input表单的输入字符串为0a863c60444e569c3718173cb58b56ab的时候,返回!0
所以就试着回到页面中,输入这串MD5,提交
直接就得到答案
答案
wctf{webclieNt_c0py}
知识点: