文件上传漏洞——服务器检测与绕过2

2、MIME类型检测与绕过

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME类型如下:

文件扩展名 Mime-Type
.js application/x-javascript
.html text/html
.jpg image/jpeg
.png image/png
.pdf application/pdf

在HTTP协议中,使用Content-Type字段表示文件的MIME类型。

 1、检测原理:

 2、操作实例

1、登录地址:http://ip/upfile/3/upload.html

2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传失败,不允许的格式application/octet-stream

5、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具,并设Bp中的参数和浏览器代理

6、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

7、将数据包中Content-Type值application/octer-stream修改为image/jpeg

8、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

9、关闭浏览器代理,访问http://ip/upfile/3/upload/info.php,上传的脚本文件成功解析

 通过Burp Suite工具抓包将php脚本的MIME类型修改为图片文件的MIME类型,绕过MIME类型的检测。


3、 文件内容检测与绕过

1、检测原理:

 

 

 2、绕过方法:

文件内容的检测是利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
文件内容检测的绕过常见的有两种方式:

  • 在脚本文件前面补充对应的文件头
    常见的图片文件头
JPG:FF D8 FF E0 00 10 4A 46 49 46
GIF:47 49 46 38 39 61(GIF89a)
PNG:89 50 4E 47
  • 制作图片马
    制作图片马的方式也有很多,常见的有:
在图片后写入脚本代码
在cmd中使用命令 copy 1.jpg/b+1.php/a 2.jpg
- 参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
- 参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

 3、绕过实例

文件内容检测与绕过之文件幻数

前面的4个步骤跟上一个操作实例是一样的,这边就不作演示了

5、以记事本或编辑器的方式打开脚本文件,补充图片的文件头(比如GIF文件头)

6、再次选择脚本文件

7、点击“submit”按钮,再次上传文件,脚本文件成功上传

8、访问http://ip/upfile/4/upload/info.php,上传的脚本文件成功解析


文件内容检测与绕过之图片马

前面的4个步骤跟上一个操作实例是一样的,这边就不作演示了

5、再准备一张正常的图片,打开cmd命令框,制作图片马

 

6、再次选择脚本文件,点击“submit”按钮,再次上传文件,脚本文件成功上传

8、访问http://ip/upfile/4/upload/info.jpg,上传的脚本文件不能解析,因为图片马需要配合文件包含漏洞或者解析漏洞


4、00截断检测与绕过(利用的条件比较苛刻)

检测原理:

截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (" "),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除。攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
利用00截断绕过需要同时满足两个条件:

1. PHP版本必须小于5.3.4
2. php.ini配置文件中的magic_quotes_gpc为Off状态(GPC关闭)

基于GET方式的00截断绕过

1、登录地址:http://ip/upfile/5/up.php

2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传失败,不允许的后缀,且URL中有参数

5、将脚本文件info.php的后缀名修改为可允许上传的图片文件的后缀名,比如info.jpg,然后再次选择脚本文件

6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具,并设置Bp里的参数和浏览器代理,开启抓包

7、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

8、将数据包"jieduan"参数添加"info.php%00"

9、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

10、关闭浏览器代理,访问http://ip/upfile/5/upload/info.php1820220922073441.jpg,脚本解析失败,找不到文件

11、访问http://ip/upfile/5/upload/info.php,上传的脚本文件成功解析


 基于POST方式的00截断绕过

 前6个步骤跟上面一样

7、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

8、在Burp Suite中点击右侧的"INSPECTOR",并点击"Body Parameters(3)"

9、选中"jieduan"参数,点击右侧的">",显示细节

10、将"VALUE"中"./upload/“修改为”.%2fupload%2finfo.php%00",然后将下方"DECODED FROM"中的字符串复制到左侧的"./upload/"处

11、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

12、关闭浏览器代理,访问http://ip/upfile/5/upload/info.php2720220922075850.jpg,脚本解析失败,找不到文件

13、访问http://ip/upfile/5/upload/info.php,上传的脚本文件成功解析


5、条件竞争检测与绕过

原理:

条件竞争是一种服务器端的漏洞,由于服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,将会导致此类问题的发生。
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。如果在删除之前访问上传的php文件,从而执行上传文件中的php代码。在这整个过程中,会出现以下三种情况:

1. 访问时间点在上传成功之前,没有此文件
2. 访问时间点在刚上传成功但还没有进行见判断检查,该文件存在
3. 访问时间点在判断之后,文件被删除,没有此文件

绕过方法:
 

1、登录地址:http://ip/upfile/6/upload.html

2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传成功

5、访问http://ip/upfile/6/upload/info.php,找不到该文件

6、将脚本文件info.php的脚本内容修改

7、点击“选择文件”按钮,再次选中要上传的文件

8、点击“submit”按钮,上传文件,并立即访问http://ip/upfile/6/upload/info.php(利用时间差,要),没有报错,说明上传的脚本成功解析

9、访问http://ip/upfile/6/shell.php,新的脚本文件成功解析

 上传脚本文件,成功上传,但访问时找不到文件,可能存在条件竞争。可以上传一个生成新的文件的脚本文件,利用成功上传到删除文件的时间差(时间差太短可以利用Python脚本实现),在未删除之前立即访问(访问时不报错,说明上传的文件访问时成功解析),则会自动生成一个新的文件,新文件不在检查范围内,即不会被删除。


 这篇文章就写到这里了!!

猜你喜欢

转载自blog.csdn.net/weixin_54055099/article/details/126987369