IDF---CTF----天罗地网

  

不难不易的js加密

  解题地址:here

  过程:打开源码页面,开始分析js代码

 

            

  可以看到好多>.<    而且乱七八糟的感觉(好吧,大神就忽略这句吧)

  首先将网站另存为到本地,其实网上有关于这方面解码的方法,这里我使用的document.write(blablablabla.....) ,改完之后在本地打开文件,就不贴图了,将页面上的代码复制下来替换原来的js代码,调整一下格式,得到如图结果:

    

<script type="text/javascript">
var a=prompt("\u8f93\u5165\u4f60\u7684\x66\x6c\x61\x67\u5427\uff0c\u5c11\u5e74\uff01","");
var b="\x66\x33\x33\x37\x33\x65\x33\x36\x63\x36\x37\x37\x37\x35\x30\x37\x37\x39\x66\x35\x64\x30\x34\x66\x66\x37\x38\x38\x35\x62\x33\x65";
var c=/.+_.+_.+/gi;//  g匹配所有  i对大小写不敏感
var d=0x0;
var e=a.substr(0x8,0x5);//
//d = 0
if($.md5(e)==b.replace(/7/ig,++d).replace(/8/ig,d*0x2)){// 8-12  jiami
    //d = 1
    
    var f=a.substr(0x0/d,0x7);
    if(f.substr(0x5,0x2)=="\x6a\x73"&&$.md5(f.substr(0x0/d,d+0x3))=="\x64\x30\x31\x35\x34\x64\x35\x30\x34\x38\x62\x35\x61\x35\x65\x62\x31\x30\x65\x66\x31\x36\x34\x36\x34\x30\x30\x37\x31\x39\x66\x31"){//5-6js 0-3wctf
        //d = 1
        document.write("2:"+d+"\n");
        document.write("a:"+a+"\n");
        r=a.substr(0xd);//Oxd=>13
        //0xd = 1
        document.write("rr:"+r+"\n");
       // d = 0x1;
        if(r.charCodeAt(d)-0x19==r.charCodeAt(++d)-0x19&&r.charCodeAt(--d)-0x19==r.charCodeAt(--d)){//charCodeAt() 返回指定位置的unicode值
            //d = 3
            document.write("3:"+d+"\n");
            var g=String.fromCharCode(0x4f);
            g=g.toLowerCase()+g.toLowerCase();//g =>oo
            document.write(r.substr((++d)*0x3,0x6)==g.concat("\x65\x61\x73\x79")+" ");
            //document.write("g:"+g.concat("\x65\x61\x73\x79")+"\n");
            document.write(c.test(a));
            if(c.test(a)){//easy
                document.write("4:"+d+"\n");
                d=String(0x1)+String(a.length);
                document.write("5:"+d+"\n");
            }
        }
    }
};
if(a.substr(0x4,0x1)!=String.fromCharCode(d)||a.substr(0x4,0x1)=="\x7a"){
    alert("\u989d\uff0c\u518d\u53bb\u60f3\u60f3\u3002\u3002")
}else{
    alert("\u606d\u559c\u606d\u559c\uff01")
}

</script>
View Code

 

  好吧,接下来分析代码==>ok   wctf{js_jiami_xxooeasy}

COOKIE欺骗

  这道题目花了好几天(技术太渣T^T)

    

  解题地址:here

  过程:

    面对页面一大串的乱码,第一反应就是去解码,结果大概都知道了...

    查看url   /index.php?line=&file=ZmxhZy50eHQ

    传了2个值,其中file参数值有点加密的感觉,那就再来吧!通常url用的是base64加密,所以解之,附上在线解密网站:here

    解出来该值为flag.txt,好吧看样子该目录下应该还有其他的文件等着我们来访问,那就随便试试几个常用的文件名吧,最后试出来是index.php的base64密文aW5kZXgucGhw,接下来就是使用line这个参数了,随便改了改1,2,3,4,5..... 我们可以发现页面有php代码出现,好吧,那就写个脚本来拿这个文件吧

 

import urllib

url1 = "http://ctf.idf.cn/game/web/40/index.php?line="
url2 = "&file=aW5kZXgucGhw"

result = ""

for i in range(200):
    url = url1 + str(i) + url2
    #print url
    wp = urllib.urlopen(url)
    content = wp.read()
    print content
    result += content

print result
View Code

 

得到该php文件后,分析,cookie中如果有key并且对应idf,则加入flag.php   base64加密后放入url,cookie中加入key:idf   ok    wctf{idf_c00kie}

<?php


    error_reporting(0);


    $file=base64_decode(isset($_GET['file'])?$_GET['file']:"");


    $line=isset($_GET['line'])?intval($_GET['line']):0;


    if($file=='') header("location:index.php?line=&file=ZmxhZy50eHQ");


    $file_list = array(


        '0' =>'flag.txt', 


        '1' =>'index.php',


    );





    if(isset($_COOKIE['key']) && $_COOKIE['key']=='idf'){


        $file_list[2]='flag.php';


    }





    if(in_array($file, $file_list)){


        $fa = file($file);


        echo $fa[$line];


    }


?>
View Code

古老的邮件编码

  uuencode编码,随便找个网站解一下   

超简单的js题

  纯粹的解码

简单的js解密

  解题地址:here

  查看js源码,源码有提示返回字符的ascii值

if ('ENCRYPT' == method) {
    // Variable for output string
    var output = '';
    // Algorithm to encrypt
    for (var x = 0, y = string.length, charCode, hexCode; x < y; ++x) {
      charCode = string.charCodeAt(x);//
      if (charCode < 128) {
        charCode += 128;
      } else if (charCode > 127) {
        charCode -= 128;
      }
      charCode = 255 - charCode;
      hexCode = charCode.toString(16);
      if (hexCode.length < 2) {
        hexCode = '0' + hexCode;
      }
      
      output += hexCode;
    }
    // Return output
    return output;
  } else if ('DECRYPT' == method) {
    // DECODE MISS
    // Return ASCII value of character
     return string;
  }

 

解密过程为加密过程的逆过程,首先我们将字符串2个一组来处理,当做hex值转化为acsii值,由于加密过程对acsii值小于128的加了128,所以解密过程要将128减去(还有一个是大于127减128的处理,但是因为密文没有超过128的,所以我没有在解密代码中对该步骤进行逆转化)

解密代码:

var charCode = "";
    var hexCode = 0;
    var output = "";
    for(var i=0;i<string.length;i+=2){
        if(string[i] == '0'){
            charCode = string[i+1];
        }
        else {
            charCode = string[i]+""+string[i+1];
        }
        
        hexCode = parseInt(charCode,16);
    
        output += String.fromCharCode(255-hexCode-128);
    }
    // Return output
    return output;
View Code

 在页面上输出得到一串MD5值:b0bef4c9a6e50d43880191492d4fc827

 再次打开原来的网页,提交该字符串,得到key   wctf{jS_decRypt__Eaaasy}

一种编码而已

  复制贴到控制台,答案就出来了,可以查查  jsfuck

 

posted @ 2015-04-30 16:32  webFuckeeeer  阅读(838)  评论(0编辑  收藏  举报