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了
Comments | NOTHING