目录
要做文件上传的题目首先要了解文件上传的危害
通过文件上传我们可以通过上传木马来获取服务器的webshell权限,从而接管网站的服务器
接着我们需要了解一下一句话木马
eg:<?php @eval($_POST['boom']);?>
其中eval就是执行命令的函数,$_POST[‘boom’]就是接收的数据。eval函数把接收的数据当作php代码来执行。这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句。
一句话木马+webshell客户端就会有更强大的功能。如:中国菜刀,中国蚁剑,冰蝎
1无验证
首先进入题目
这道题如题所示是无任何限制的,那么我们直接上传一句话木马
已经上传成功了,我们把相对路径组合一下成为绝对路径
http://challenge-d2ce6b4eeac11565.sandbox.ctfhub.com:10800/upload/one.php
一句话木马我们已经上传了,而且木马的绝对路径也清楚了,那么我们打开中国蚁剑
将URL地址粘贴进去,链接密码就写自己在一句话木马当中写的密码,我这里密码为boom
成功连接到上传进去的一句话木马了,在html当中我们可以发现一个flag 的文件
打开就找到了这个题目的flag
2前端验证
进入题目
这道题是前端验证,那么我们先上传一个正常的jpg文件找到它的相对路径
接下来我们试着上传一句话木马
因为这道题目是在前端对网页源代码做了限制,所以我们把一句话木马改为jpg格式的文件
上传时我们进行抓包
我们可以看到请求当中就有我们要上传的one.jpg,我们在这里将jpg改为php,然后发送
网页提示上传成功
虽然显示的还是jpg的文件,但其实我们已经改好了
打开蚁剑添加数据
已经成功连接
接着在文件html当中找到flag就完成了
3. .htaccess
首先我们进入题目
我们知道题目的意思就是让我们使用.htaccess
那么我们先创建一个.htaccess,因为windows不能创建没有文件名只有拓展名的文件所以我们先随便起一个名字
AddType application/x-httpd-php .jpg
意思是将jpg为拓展名的文件,作为php来解析
接着我们将它上传,上传时进行抓包
把filename="11.htaccess" 改为 .htaccess
接下来放包,上传成功。
接下来将一句话木马改为jpg的拓展名,这样它就会被作为php的文件来进行解析
上传成功我们进入蚁剑,添加数据
连接成功,添加数据,找到flag
任务完成
4.MIME绕过
首先我们先了解一下什么是MIME
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
也就是说在上传文件时,浏览器会告诉服务器这个要上传的文件是什么类型的
那么我们进入题目
首先我们,上传一个Jpg格式的文件,上传时进行抓包
可以 看到Content-Type: image/jpeg,而且我们上传的时候可以看到是可以成功上传的
那么我们将Content-Type: image/jpeg复制下来
接着去上传一句话木马,我们把原来的Content-Type:改为Content-Type: image/jpeg
上传成功
去蚁剑添加数据查找flag
任务完成
附:
常见的MIME类型
1)超文本标记语言.html文件的MIME类型为:text/html
2)普通文本.txt文件的MIME类型为:text/plain
3)PDF文档.pdf的MIME类型为:application/pdf
4)MicrosoftWord文件.word的MIME类型为:application/msword
5)PNG图像.png的MIME类型为:image/png
6)GIF图像.gif的MIME类型为:image/gif
7)MPEG文件.mpg、.mpeg的MIME类型为:video/mpeg
8)AVI文件.avi的MIME类型为:video/x-msvideo
5.文件头检测
文件头检测说明还会检测文件的文件头来查看文件是否合规
首先我们进入题目,先上传一张图片试试是否能正常上传,我自己试了好多次jpg格式的图片都无法正常上传可能是文件头没法正常读取?最后换了一张png图片可以上传。
上传一个php文件并不可以
我们在cmd当中制作一张图片马
copy 1.jpg/b + 1.php/a 2.jpg
用这个代码来制作自己的图片马,接着打开bp准备开始上传图片马
在这里我们也需要将MIME改好,图片头文件是png就将它改为 image/png
图片代码内容太多了我们删去一些
已经上传成功了接着进入蚁剑
找到flag
6.00截断
进入题目
首先上传一个正常的png文件
上传成功后并没有像以前一样显示文件的相对路径,果然和之前的题目不太一样
那么根据00截断我们给一句话木马加上
%00.png
那么一句话木马的名字会是 文件名.php%00.png
接着我们上传文件
发现文件直接上传成功了
但是我们去蚁剑按照原来的前几题的URL连接发现是连不上的,那么我们抓包看看
查看里面的代码
<!--
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
}
-->
通过查资料了解到
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis")
move_uploaded_file($_FILES['file']['tmp_name'], $des
这里会对我们上传的文件修改文件名并修改地址,在$_GET[‘road’]后面进行00截断
在请求当中POST /?road=/var/www/html/upload/ HTTP/1.1
我们将自己上传的木马名输入后再截断
POST /?road=/var/www/html/upload/2.php%00 HTTP/1.1
上传成功,去蚁剑添加数据记得url是要输入之前的上传目录也就是 upload/2.php
得到flag
7.双写绕过
首先进入题目我们上传一个PHP文件
发现其实是可以上传成功的,只是会对php进行一个屏蔽
那么我们写两遍php
接着上传
也是一样的会都进行屏蔽,那么我们把PHP夹在php当中 比如.pphphp
当拓展名的php被屏蔽后就会形成另一个php,接着上传
一句话木马上传成功,连接蚁剑找到flag。