史上最完整漏洞上传原理与实践

漏洞上传原理与实践

  • 一、解析漏洞
    • 1.1、lls 5.x/6.0解析漏洞
      • 1.1.1、目录解析
      • 1.1.2、 文件解析
    • 1.2、Apache解析漏洞
    • 1.3、IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
    • 1.4、Nginx <8.03 空字节代码执行漏洞
    • 1.5、其他
  • 二、常见的上传检测方式
  • 三、上传本地验证绕过
    • 3.1、上传检测流程概述
    • 3.2、客户端JS检测绕过(JS检测)
      • 3.2.1、绕过检测两种方法
        • 方法一
        • 方法二
  • 四、上传服务器端验证绕过
    • 4.1、服务端检测绕过(MIME 类型检测)
    • 4.2、服务端检测绕过(目录路径检测)
    • 4.3、服务端检测绕过(文件扩展名检测)
      • 4.3.1、检测的两种方式
        • 1. 黑名单检测
        • 2. 白名单检测
      • 4.3.2、黑名单检测绕过
        • 1. 文件名大小写绕过
        • 2. 名单列表绕过
        • 3. 特殊文件名绕过
        • 4. 0x00 截断绕过
      • 4.3.3、白名单检测绕过
        • 1. 0x00 截断绕过
      • 4.3.4、双文件上传
    • 4.5、服务端验证绕过(文件完整性检测)
      • 3.5.1、文件头检测
      • 3.5.2、文件加载检测
    • 4.6、绕过二次渲染
      • 4.6.1、方法一
      • 4.6.2、方法二
      • 4.6.3、怎么搞
  • 欢迎大家留言一起讨论

一、解析漏洞

1.1、lls 5.x/6.0解析漏洞

1.1.1、目录解析

v.asp/1.jpg
服务器直接解析的v.asp脚本文件,所以会直接执行v.asp。

1.1.2、 文件解析

v.asp;.jpg
会被服务器看成是x.asp还有ll6.0默认的可执行文件除了asp还有三种:
v.asa
v.cer
v.cdx

1.2、Apache解析漏洞

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。

比如 v.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把v.php.owf.rar解析成php脚本文件。

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个v.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀。

1.3、IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞

Nginx解析漏洞这个伟大的漏洞是我国安全组织80sec发现的,一般在互助,微信互刷平台 ,爱心福利等站有这种漏洞,这是08的站 ,PHP的特性。

在默认Fast-CGI开启状况下,黑阔上传一个名字为v.jpg,内容为

’);?>
的文件,然后访问v.jpg/.php,在这个目录下就会生成一句话木马 shell.php

1.4、Nginx <8.03 空字节代码执行漏洞

影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37

Nginx在图片中嵌入PHP代码然后通过访问

v.jpg%00.php
来执行其中的代码

1.5、其他

在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。

如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:


SetHandler application/x-httpd-php
< /FilesMatch>

然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件。

二、常见的上传检测方式

1.客户端JS检测(通常为检测文件拓展名)
2.服务端MIME类型检测(检测Content-Type)
3.服务端目录路径检测(检测跟path参数相关的内容)
4.服务端文件扩展名检测(检测跟文件extension相关的内容)
5.服务端文件内容检测(检测内容是否合法或含有恶意代码)

三、上传本地验证绕过

3.1、上传检测流程概述

选择一脚本文件,点击完上传之后立刻弹出提示框,还没有经过网络,就探测出来不允许上传,这就是本地JS检测,1是看响应速度,2是看代码,响应速度可能不准确,我建议大家最好看一下代码,下面是我在某漏洞平台做的测试。
史上最完整漏洞上传原理与实践_第1张图片
这里我选择一个后缀为asp的脚本文件,点击上传立刻出现“文件不符合要求”的提示,但这样可能不准确,我们右击检查或审查元素,在form表单中看它有没有加载检查文件,如图可以看到“车FileExt”这个检查元素。
在这里插入图片描述
找到这个JS函数,可以清楚的看到它的检查后缀的条件判断。
史上最完整漏洞上传原理与实践_第2张图片

3.2、客户端JS检测绕过(JS检测)

3.2.1、绕过检测两种方法

方法一

1.直接编辑HTML,删除检测函数或者是在检测函数的白名单中加上php或者asp后缀,右击编辑HTML
在这里插入图片描述
可以看到直接把“checkFileExt”删除
史上最完整漏洞上传原理与实践_第3张图片
可以看到加上php这一后缀,再次上传脚本木马
史上最完整漏洞上传原理与实践_第4张图片
可以看到成功上传

方法二

2.使用burpsuite抓包改包

上传V.jpg这一图片马,然后抓包,右击发送给Repeater改包
史上最完整漏洞上传原理与实践_第5张图片
史上最完整漏洞上传原理与实践_第6张图片
把它的后缀改为php,go
史上最完整漏洞上传原理与实践_第7张图片
可以看到脚本木马V.php上传成功,因酷教育以前有这个漏洞。

四、上传服务器端验证绕过

4.1、服务端检测绕过(MIME 类型检测)

如果文件内容检测设置的比较严格,那么上传攻击将变得非常困难,也可以说它是在代码层检测的最后一道关卡,如果它被突破了,就算没有代码层的漏洞,也给后面利用运用层的解析漏洞带来了机会。

MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。

web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。

Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,你可也去看一下。

绕过方法:

直接使用burp抓包,得到post上传数据后,将 Content-Type: xxx改成 Content-Type: image/gif

就可以成功绕过。
实践一下,首先选择V.png上传,抓包
史上最完整漏洞上传原理与实践_第8张图片
将 Content-Type: xxx改成 Content-Type: image/gif,脚本木马后缀改为php
史上最完整漏洞上传原理与实践_第9张图片
go一下,可以看到成功上传
史上最完整漏洞上传原理与实践_第10张图片
(我们一般是上传图片马,图片马可以识别出来是一个图片类型,但最终我们要把它以脚本的格式上传服务器,一般互助的站存在这种漏洞,感兴趣的话可以看看ZWELL这个站,你可能会有惊喜)

4.2、服务端检测绕过(目录路径检测)

目录路径检测,一般就检测路径是否合法,可以利用目录路径绕过配合iis解析漏洞
(很多韩国的站存在这种漏洞)
选择一图片木马上传,还是抓包,go一下 ,可以看到图片保存目录
在这里插入图片描述
在“filepath”下加上/x.asp/或者/x.asp;.解析
史上最完整漏洞上传原理与实践_第11张图片
可以看到目录变为/x.asp/…
在这里插入图片描述

4.3、服务端检测绕过(文件扩展名检测)

4.3.1、检测的两种方式

1. 黑名单检测

黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多 一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件例如 fckeditor 2.4.3 或之前版本的黑名单。

2. 白名单检测

白名单相对来说比黑名单安全一些,但也不见得就绝对安全了。

一般来说白名单难绕,白名单定义的比较死,而黑名单会有一些漏网之鱼,或者可以利用一些解析漏洞帮我们绕过黑名单
的限制,白名单的话,我只受理我定义的几种类型的后缀,其他后缀我不受理,所以难饶。

4.3.2、黑名单检测绕过

1. 文件名大小写绕过

用像 AsP,pHp 之类的文件名绕过黑名单检测。

2. 名单列表绕过

用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类。

3. 特殊文件名绕过

比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。

4. 0x00 截断绕过

给个简单的伪代码
name=getname(http request)//假如这时候获取到的文件名是V.asp.jpg(asp后面为0x00)
type = gettype(name)//而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
if(type==jpg)

4.3.3、白名单检测绕过

1. 0x00 截断绕过

用像 v.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击,在phpweb存在这种漏洞**&00 --ctrl+shift+U**
选择一png木马文件上传,抓包加上.php&00,选中%00,ctrl+shift+U,把它变为方格,,然后go,,可以看到文件上传成功,且为php文件。
在这里插入图片描述

4.3.4、双文件上传

条件:

接受两个文件同时上传,

只检测了第一个文件扩展名,

动易、南方、良精等CMS存在该漏洞,

用burpsuite抓包,然后将请求头部分下面的内容负责,开头为-----,结尾为----------,

其他地方不用负责,然后粘贴到第一个文件结尾-------后面,把第二个文件开头------去掉,

将第一个文件的name=xxxx修改为name=xxxx1,修改文件名为cer或者asa等即可上传成功。
如图
史上最完整漏洞上传原理与实践_第12张图片
史上最完整漏洞上传原理与实践_第13张图片

当然也可以用明小子改cookie双文件上传

如果文件内容检测设置的比较严格,那么上传攻击将变得非常困难,也可以说它是在代码层检测的最后一道关卡,如果它被突破了,就算没有代码层的漏洞,也给后面利用运用层的解析漏洞带来了机会。

4.5、服务端验证绕过(文件完整性检测)

3.5.1、文件头检测

主要是在文件内容开始设置好图片文件的幻数要绕过 jpg 文件检测就要在文件开头写上下图的值
在这里插入图片描述
要绕过 gif 文件检测就要在文件开头写上下图的值

在这里插入图片描述
要绕过 png 文件检测就要在文件开头写上下面的值

在这里插入图片描述
然后在文件头后面加上自己的一句话木马就行了图像大小及相关信息检测常用的就是 getimagesize()函数
只需要把文件头部分伪造好就 ok 了,就是在幻数的基础上还加了一些文件信息
有点像下面的结构
GIF89a(…some binary data…)(… skipping the rest of binary data …)

3.5.2、文件加载检测

这个是最变态的检测了,一般是调用的 API 或函数去进行文件加载测试常见的是图像渲染测试,再变态点的甚至是进行二次渲染(后面会提到) 对它的攻击一般就两种方式,一个是渲染测试绕过,另一个是攻击文件加载器自身

4.6、绕过二次渲染

4.6.1、方法一

攻击函数本身
通过上传不完整的图片让其渲染函数暴露,然后攻击之。

4.6.2、方法二

对文件加载器进行溢出攻击。

4.6.3、怎么搞

二次渲染怎么搞呢,这个就比较操蛋了,如果我们上传图片马,你上传或者数据库备份之后,我们用菜刀连不上,它可能对你的图片马进行二次渲染了,
就是你上传图片携带的木马,它经过二次渲染,把你的木马去掉了,那你再把它修改为脚本格式也没有可以执行的代码了,所以你的菜刀连不上
一个案例就是ImageMagick,其实就是攻击它的图片操作函数,我们保存了一个图片,图片里面放置一段可执行的代码,他调用图片时把我们的命令执行了
执行之后我们反弹一个shell,就可以拿到服务器权限,而且这些站都比较大,权限比较高,感兴趣的朋友可以看看安全客的一篇文章https://www.anquanke.com/post/id/83872

欢迎大家留言一起讨论

你可能感兴趣的:(渗透)