Virtua1's blog

省赛-Web Writeup

字数统计: 483阅读时长: 1 min
2018/11/07 Share

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' &amp;&amp; md5($key[99]) == md5('aabg7XSs')) {
       echo $hint;
    }
    else{
        echo 'try again';
    }
}
else{
    show_source(__FILE__);
} </code></pre>

看到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处可以显示:

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

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

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

先通过class获取列表的类:

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

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

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

CATALOG
  1. 1. Web:
    1. 1.1. 1、http头伪造
    2. 1.2. 2、变量覆盖、php弱类型、时间竞争
    3. 1.3. 3、sqli+ssti