實驗吧-密碼學-他的情書(進一步瞭解js代碼調試和console.log)

打開網站,在白色背景下的任一點上點擊鼠標,白色部分都會消失(包括password輸入框),那麼就沒法輸入。php

查看源碼,發現是明顯的從源碼解決問題。函數

火狐F12查看器查看源碼(若是是簡單的操做,能夠view-source看源碼,用到控制檯的話,儘可能用開發者工具查看)。工具

先看頁面上輸入密碼的地方的代碼:學習

能夠看到,輸入密碼,點擊按鈕就會執行zhegejiamiyidiandoubuku(),咱們若是知道zhegejiamiyidiandoubuku()是什麼做用,輸不輸人就不重要了,因此,可疑目標:zhegejiamiyidiandoubuku()網站

(有的時候就是先找到一個可疑的目標,而後一點點去驗證猜測是否正確)編碼

把源碼所有展開,發現一些可疑的地方(直接看圖):url

圖1:調試

圖2:code

 圖3:orm

下面對這些地方進行分析:

 圖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。

相關文章
相關標籤/搜索