打开网站,在白色背景下的任一点上点击鼠标,白色部分都会消失(包括password输入框),那么就无法输入。
查看源码,发现是明显的从源码解决问题。
火狐F12查看器查看源码(如果是简单的操作,可以view-source看源码,用到控制台的话,尽量用开发者工具查看)。
先看页面上输入密码的地方的代码:
可以看到,输入密码,点击按钮就会执行zhegejiamiyidiandoubuku(),我们如果知道zhegejiamiyidiandoubuku()是什么作用,输不输人就不重要了,所以,可疑目标:zhegejiamiyidiandoubuku()
(有的时候就是先找到一个可疑的目标,然后一点点去验证猜想是否正确)
把源码全部展开,发现一些可疑的地方(直接看图):
图1:
图2:
图3:
下面对这些地方进行分析:
图1:上面框中的的这一堆不知道是啥,先放下,下面这一段好像是url编码,解码得到
var Words ="<center>
<p>不难的,输入密码辣!</p>
<script language="JScript.Encode">#@~^EwAAAA==C^+.D`rt+^VKE#p@#@&EwUAAA==^#~@
<!--
//***(づ ̄ 3 ̄)づ我要抱抱!!!***
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('<!--v p(){6 8=h.o.e.n;6 2="q==";6 a=\'t.s?e=\';6 d=j.r;6 k=\'\';6 g=2.9(m,4*4)+2.9(l,5*5)+2.9(0,1)+2.b(7,1)+2.b(z,1)+2.b(B,1)+2.9(3+3,7);8=d.b(d.f(\'?\')+1);a=a.9(0,a.f(\'?\')+1)+\'A=\';w(i=0;i<8.y;i++){x(8.c(i)==g.c(i)){h.u(8.c(i))}}j=a+8}-->',38,38,'||cry||||var||pass|substring|addr|substr|charAt|locatie|passwd|indexOf|pass2|document||location|out|24|15|value|form|zhegejiamiyidiandoubuku|Rm9yM0re354v5E4FUg5FasDboooo|href|php|soroki|write|function|for|if|Len|11|l0vau|13'.split('|'),0,{}))
-->
</script><form name="form">
Password: <input type="password" name="passwd"> <input type="button" value="boom!!!!" onClick="zhegejiamiyidiandoubuku()">
</form></center>";
function SetNewWords()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
}
SetNewWords();
然而这一部分图二上就有, 而且有一段JScript.Encode,注意JScript.Encode的部分只是:#@~^EwAAAA==C^+.D`rt+^VKE#p@#@&EwUAAA==^#~@,其余的可不是,解码之后得到:alert("hello");
没什么用啊。
图二下面这一段是jsfuck,解码得到
可能是提示上面的那个url解码的。
图三的代码也看不出有什么作用。
其实重点就在eval()这,做过这样的题的就知道,这是js代码,可以直接在控制台进行调试。
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('<!--v p(){6 8=h.o.e.n;6 2="q==";6 a=\'t.s?e=\';6 d=j.r;6 k=\'\';6 g=2.9(m,4*4)+2.9(l,5*5)+2.9(0,1)+2.b(7,1)+2.b(z,1)+2.b(B,1)+2.9(3+3,7);8=d.b(d.f(\'?\')+1);a=a.9(0,a.f(\'?\')+1)+\'A=\';w(i=0;i<8.y;i++){x(8.c(i)==g.c(i)){h.u(8.c(i))}}j=a+8}-->',38,38,'||cry||||var||pass|substring|addr|substr|charAt|locatie|passwd|indexOf|pass2|document||location|out|24|15|value|form|zhegejiamiyidiandoubuku|Rm9yM0re354v5E4FUg5FasDboooo|href|php|soroki|write|function|for|if|Len|11|l0vau|13'.split('|'),0,{}))
贴到控制台里,将eval改成console.log,回车,得到
这不是就拿到zhegejiamiyidiandoubuku()的代码了,到这里别急躁,耐心看代码,发现也就是定义一些变量,然后赋值和字符串截取什么的,说明几点:
1)pass在代码最前面看似是将passwd的值赋给它了,但后面又重新进行了赋值,所以不用管。
2)注意几个函数:substring()、substr()、indexOf(),就是字符串截取和取索引值
其实,不用看那么仔细,知道我们要的是什么就行了,我们要的就是addr、pass、pass2
再一次进行调试,这里有个关于console.log()需要学习的
1)console.log()内是不允许有变量的
<script>
var myObj = { name : "菜鸟教程", site : "www.runoob.com" };
console.log(myObj);
</script>
变量直接在控制台中就能用,所以,下面就用不着console.log()了。
2)控制台输出东西要用document.write()
将用到的代码并更改截取贴入控制台来获取addr、pass、pass2
就这样直接贴进去用document.write()输出,最后得到
pass:http://ctf5.shiyanbar.com/crypto/4/
addr:soroki.php?l0vau=
pass2:FoRevEr
于是访问http://ctf5.shiyanbar.com/crypto/4/soroki.php?l0vau=FoRevEr
得到:aW4yIHNheTpJIGxvdmUgeW91IEZvcmV2ZXIhVGhlIEdpcmwgc2F5OiB6cWN7ZmtxdGxfZnBfeWZkX3B5fQ==
解码即得到in2 say:I love you Forever!The Girl say: zqc{fkqtl_fp_yfd_py}。
zqc{fkqtl_fp_yfd_py}看着像flag,但是结果格式是ctf,这个看着像个凯撒或栅栏,试了试是凯撒解码,解码拿到flag。