省赛-Web Writeup

Web:

1、http头伪造

利用 bp伪造ip和cookie 得到flag。

2、变量覆盖、php弱类型、时间竞争

代码:

 <?php

    include 'here.php';
    $key = 'kelaibei';

    if(isset($_GET['id'])){
        $id = $_GET['id'];
        @parse_str($id);
        if ($key[99] != 'aabg7XSs' && md5($key[99]) == md5('aabg7XSs')) {
           echo $hint;
        }
        else{
            echo 'try again';
        }
    }
    else{
        show_source(__FILE__);
    } 

看到parse_str()函数,存在变量覆盖漏洞。
parse_str() 函数把查询字符串解析到变量中。 如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。绕过方法提交?id=key…… 接下来是MD5 弱类型,传入一个加密后是0e开头的即可    payload:?id=key[99]=QNKCDZO

进入到第二关,上传文件名和文件内容,提示访问,发现提示太慢,想到了时间竞争。一边用bp上传,一边用bp访问,设置空字典爆破很快得到flag。

3、sqli+ssti

比赛的时候简单看了下,大概的功能是添加内容,再查询内容,能够显示要查的内容。想到了SSTI,但是不太会利用。赛后大佬提示sqli+ssti,以为注入是在添加内容处……菜啊。。。师哥复现出来了,给了payload,发现注入在查询内容处,另外模板注入的时候需要16进制绕过。

在Search Comments处存在注入,测试一下,发现2,3处可以显示:

接下来测试模板注入 {{config}},提示mysql error 然后16进制绕过:

存在模板注入,参考的payload:

[].__class__.__base__.__subclasses__()[40]('/flag').read()

先通过__class__获取列表的类:

再通过__base__获取基础类 object类:

依次获取子类列表__subclasses__():

这样就找了更多可以拓展的类,方便我们找到我们想要执行的函数,第40个索引恰好是想要的file类型,就可以用它进行文件读取了。

1 + 1 =
快来做第一个评论的人吧~