Xctf Web刷题记录

发布于 2020-05-16  1403 次阅读


XCTF 4th-WHCTF-2017 Cat

有一个框可以输入域名,输入127.0.0.1会返回ping的结果,且URI加上了?url=127.0.0.1。尝试用|拼接命令无果。

这题的考点是Django使用的是gbk编码,超过%F7的编码不在gbk中有意义。于是传入一个url=%88,发现其弹出错误界面。

经过fuzz以后发现只有数字、. 和@没有被过滤

在比赛的时候有提示去阅读PHP CURL的MANUAL,查阅之后发现在php 5.5之前可以用@来表示之后要选取本地文件。

Django中,配置文件存放的目录是(文件目录)/项目名/项目名/settings.py

结合刚刚的报错文件,找到/opt/api/api/settings.py 之后再去读取sqlite文件就可以拿flag了。

XCTF 4th-CyberEarth

查看源码发现有一个?page=index.php,猜测又是file_get_contents ,于是给他来一个?page=php://filter/read=convert.base64-encode/resource=index.php

拿到源码,关键部分:

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }
}

学到了一个新的知识:preg_replace的/e修饰符(https://www.cnblogs.com/dhsx/p/4991983.html

于是传入pat=任意内容+/e

rep=shell内容(空格要用%20)

就可以拿到shell了


等风来,不如追风去。