请选择 进入手机版 | 继续访问电脑版

SSS安全论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

产品
产品
团队
团队
版规
版规
查看: 1011|回复: 6

[原创文章] 补天白帽沙龙上海站“黑客小游戏”通关攻略

[复制链接]
  • TA的每日心情
    奋斗
    2016-7-14 17:48
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2016-7-24 17:06:20 | 显示全部楼层 |阅读模式
    首先打开游戏网址以后,看到一个输入框,如下:
    1.png
    随便输入了一个admin,然后看到返回的数据包里面:
    2.png
    一看就是base64编码,解密以后是:7c43bc96790717a772d50754f9f1f7e6
    然后就是个md5,随后去解密:
    3.png
    基本可以确定密码就是butian了,然后登录的时候发现提示token验证失败,我的天!哪里来的token!!
    调出开发者工具一看源码:

    4.png
    有个hidden的input,估计就是token了,但是没写name,于是添上name=“token”,如下:
    5.png
    然后点击登录,就跳到了第二个题。

    第二题界面如下:

    6.png
    然后各种测试无果……

    看了看标题“你知道md5函数的第二个参数是干嘛用的吗?”

    然后去PHP官方手册查了查:

    7.png
    到这里大概可以知道又是一个PHP的黑魔法了,当md5函数的第二个值为true的时候,md5报文摘要将以16字节的原始二进制格式返回。
    而且应该是密码这里的。。

    卡了很久,随后就是在满Google搜索md5相关的注入了,

    最后搜到老外的一篇文章,http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/
    8.png
    翻译成人话,大概就是说你输入ffifdyop就可以通关了。

    账号随便输入,密码ffifdyop成功通关~


    9.png
    可以看到一个rar的下载地址,看来是到了一个审计题目了 2333

    代码如下:
    [PHP] 纯文本查看 复制代码
    <?php
    
    class sss
        {
            var $flag_file = "sss.php";
    
            function __wakeup(){
                $fp = fopen($this->flag_file,"r");
                echo "Third: ";
                $xxx = fread($fp,80);
                echo $xxx;
                echo "\r\n";
    
            }
    
            function __destruct(){
                echo "object die!";
            }
    
            function hello(){
                echo "Just for fun\r\n";
            }
    
        }
    
    header ('Content-type: text/html; charset=latin1');
    if (!isset($_POST['user']) || !isset($_POST['password'])){
        die("parameter error");
    }
    
    $user = $_POST['user'];
    $pass = $_POST['password'];
    
    mysql_connect("127.0.0.1","root","");
    mysql_select_db("sss");
    
    $u = mysql_real_escape_string($user);
    $pass = mysql_real_escape_string($pass);
    $p = hash("md5",$pass, true);
    
    $query = "select user, pass from users where user='$u' and pass='$p'";
    
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    if (isset($row['user'])) {
        echo "Please Find an easy bug on it: /00e164b2842952de5e168d79928d2e5b.rar,I only know the key is in file 5e2859d3dd1538c586dfeda8343e64a5.php\r\n\r\n";
        $s = $_POST['5e2859d3dd1538c586dfeda8343e64a5'];
        $s = unserialize($s);
        $s->hello();
    
        echo "too young , sample ,sometimes naive!\r\n";
    }
    header("Location: 8b20dff35aaa89ea0660e4b6cdf4348e.html");
    ?>
    
    [/size][/font]
    [font=gotham, helvetica, arial, sans-serif][size=14px]看到了熟悉的__wakeup魔术方法,自然而然的想到了PHP对象注入,
    发现下面果然是用到了unserialize反序列化函数。
    [mw_shl_code=php,true]
    $s = $_POST['5e2859d3dd1538c586dfeda8343e64a5'];
    $s = unserialize($s);
    [/mw_shl_code]


    这里获取了5e2859d3dd1538c586dfeda8343e64a5参数,并且进行反序列化


    I only know the key is in file 5e2859d3dd1538c586dfeda8343e64a5.php


    通过题目的提示可以知道答案应该在5e2859d3dd1538c586dfeda8343e64a5.php里面,


    然后看__wakeup的方法:
    [PHP] 纯文本查看 复制代码
            function __wakeup(){
                $fp = fopen($this->flag_file,"r");
                echo "Third: ";
                $xxx = fread($fp,80);
                echo $xxx;
                echo "\r\n";
    
            }


    读取了$this->flag_file,然后输出,$flag_file默认是sss.php,但是我们可以利用PHP对象注入来让他读取我们想读的任意文件。

    要做这个题需要懂PHP对象注入以及PHP的序列化和反序列化。

    首先序列化如下内容:

    10.png
    返回结果:
    11.png
    然后post生成的内容:
    12.png
    读到了下一题的地址。
    13.png
    图片+文字,一看就是隐写术了,习惯性的把图片保存到本地。

    然后用cat命令就看到了一个网址:

    14.png
    是个zip压缩包,下载下来以后是个apk程序。

    然后使用dex2jar反编译,随后使用JD-GUI进行查看,找到了如下字符串:

    15.png
    然后果断试了试QQ邮箱和网址为密码,发现登陆失败……

    看到“想想你之前都得到了哪些提示”

    突然想到了图片隐写处有一串奇怪的代码:
    随后拿这个密码去登陆,发现竟然密码不对!!!!!最终鼓捣了好久,觉得密码一定是这个,不可能有其他的了。。。


    16.png
    然后下了个Foxmail,连接!!!
    17.png
    成功了!!!!功了!!!!了!!!!

    然后就看到了大表姐的微信二维码!!!!
    18.png

    以上,由@Striker提供
















    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-7-14 17:48
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2016-7-24 17:12:01 | 显示全部楼层
    第一关证明了很多人都不喜欢看返回包,考验非常基础的编码及代码水平
    第二关考验稀有的MD5注入、代码审计。如果不是标题的提示,我想很多人都过不了。因为这道题不止一种解法,从王松的笔记来看,这道题用的是最简单最有效的方法,同样也是技术水平最低的方法。不过CTF这种游戏,本身就是争取时间,所以非常不错
    第三关的图片我相信很多人都眼熟,某社工库的图片,这是一个误导。我估计有人第一眼会以为是翻墙才能见到真实内容吧?这关考验的是简单的apk逆向以及各类邮箱的端口、协议的经验

    未来SSS安全团队会创造更多更好玩的ctf邀请论坛及外界各大知名团队一起来玩
  • TA的每日心情
    奋斗
    2016-7-14 17:48
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2016-7-24 17:14:19 | 显示全部楼层
    其实第三关我是希望用另一种方式的,原谅我没有06年以前的网易邮箱,无法直接设置登陆端口及协议,所以换了QQ邮箱的授权码来测试
  • TA的每日心情
    擦汗
    2016-8-5 00:12
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2016-7-24 17:21:54 | 显示全部楼层

    回帖奖励 +2

    没想到apk藏在图片了面了
  • TA的每日心情
    奋斗
    昨天 20:52
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-30 09:57:45 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-29 09:11
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    发表于 2016-8-2 17:06:15 | 显示全部楼层
    之前都是用binwalk,,,,,,下次直接cat试试看。新姿势
  • TA的每日心情

    3 天前
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2016-12-23 17:36:13 | 显示全部楼层
    哈哈哈,挺有意思的,期待下次
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    关注微信赢邀请码

    QQ|Archiver|手机版|网站地图|网页地图|SSS安全论坛 ( 黔ICP备15010987号  

    GMT+8, 2017-1-22 01:28 , Processed in 0.192760 second(s), 40 queries .

    Powered by SSS团队 X3.2

    © 2014-2015 Comsenz Inc.

    快速回复 返回顶部 返回列表