文件上传漏洞渗透与攻防(一)

目录

前言

 文件上传漏洞原理

Webshell介绍

一句话木马:

 小马:

大马:

Webshell集合:

网站控制工具

文件上传漏洞危害

文件上传漏洞靶场练习

 Pass-01

 Pass-02

 Pass-03

 Pass-04

 Pass-06

 Pass-07

 Pass-08

 Pass-09

 Pass-10

 Pass-11

 Pass-12

 Pass-13

 Pass-14

 Pass-15

 Pass-16

 Pass-17

 Pass-18

 Pass-19

 Pass-20 

 Pass-21

文件上传漏洞发现与利用

文件上传漏洞利用流程

发现

文件上传漏洞防御

文件上传漏洞发生的前提

防御


前言

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。 这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。 这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。 如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

 文件上传漏洞原理

文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本,或者webshell等。

文件上传的漏洞条件:

  1. 上传的文件能够被Web服务器当做脚本执行
  2. 我们能够访问到上传文件的路劲

文件上传功能:

一般什么网站有上传文件的功能?

文件上传漏洞渗透与攻防(一)_第1张图片

Webshell介绍

一句话木马:

代码短,只有一行代码。

场景多,可以单独生成文件,也可以插入到图片中。

安全性高,隐匿性强,可变形免杀

文件上传漏洞渗透与攻防(一)_第2张图片

 php中eval()函数的作用:

文件上传漏洞渗透与攻防(一)_第3张图片

 小马:

体积小,功能少

只有文件上传功能

大马:

体积大,功能全

能够管理数据库、文件管理、对站点进行快速的信息收集,甚至能够提权

Webshell集合:

https://github.com/tennc/webshell

网站控制工具

1、中国菜刀

2、中国蚁剑

3、哥斯拉

4、weevely

5、冰蝎

文件上传漏洞危害

文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务器端命令的能力。

危害:

黑链

挖矿

文件泄露

文件上传漏洞靶场练习

我们在之前的文章里已经讲述过了文件上传漏洞的原理以及及其危害,我们今天就来通过靶场来练习一下文件上传漏洞的绕过。

Pass-01

我们从第一关开始:

文件上传漏洞渗透与攻防(一)_第4张图片

我们点击提示查看:

文件上传漏洞渗透与攻防(一)_第5张图片

 这里说了这里对上传文件的验证是在前端。

我们这里直接去上传一句话木马试试看:

文件上传漏洞渗透与攻防(一)_第6张图片

文件上传漏洞渗透与攻防(一)_第7张图片 显示如上,说允许上传.png .jpg .gif三种文件格式类型的文件。

我们该如何去绕过呢?

在浏览器url一栏中输入about:config

文件上传漏洞渗透与攻防(一)_第8张图片

 将javascript:enabled切换成Flase,以禁用前端js。

文件上传漏洞渗透与攻防(一)_第9张图片

 

 我们再来上传一下试试看:

上传成功。

文件上传漏洞渗透与攻防(一)_第10张图片

Pass-02

文件上传漏洞渗透与攻防(一)_第11张图片

文件上传漏洞渗透与攻防(一)_第12张图片

MIME

文件上传漏洞渗透与攻防(一)_第13张图片

常见类型

文件上传漏洞渗透与攻防(一)_第14张图片

MIME用法

文件上传漏洞渗透与攻防(一)_第15张图片

我们来看一下这关的源码:

文件上传漏洞渗透与攻防(一)_第16张图片

这关校验了上传文件的MIME类型,我们只要将文件上传的MIME类型修改就可以绕过了。

漏洞描述:只检测 content-type 字段导致的漏洞。 ( 后端利用 PHP 的全局数组
$_FILES() 获取上传文件信息 )
利用方法:修改 content-type 字段的值为图片格式。
常用 content-type 字段:
文件上传漏洞渗透与攻防(一)_第17张图片

 我们上传shell.php文件:

文件上传漏洞渗透与攻防(一)_第18张图片

然后到开Burp Suite抓包:

文件上传漏洞渗透与攻防(一)_第19张图片

然后我们将 content-type字段修改为image/jpeg:

文件上传漏洞渗透与攻防(一)_第20张图片

然后放包:

上传成功:

文件上传漏洞渗透与攻防(一)_第21张图片

 Pass-03

文件上传漏洞渗透与攻防(一)_第22张图片

 文件上传漏洞渗透与攻防(一)_第23张图片

漏洞描述:使用黑名单的方式限制文件上传类型,后端利用$_FILES()strrchr()获取文件名后缀。被限制文件类型:.asp .aspx .php .jsp

利用方法:因为是利用黑名单来限制文件上传类型,找漏网之鱼 绕过
例如:
特殊文件名绕过: . php3 . php4 . php5 . phtml . phtm . phps . phpt . php345

文件上传漏洞渗透与攻防(一)_第24张图片

 我们将上传的文件后缀php改成等价的php3绕过。文件上传漏洞渗透与攻防(一)_第25张图片

 上传成功:

Pass-04

 文件上传漏洞渗透与攻防(一)_第26张图片

文件上传漏洞渗透与攻防(一)_第27张图片

 漏洞描述:依然是使用黑名单限制,但几乎过滤了所有有问题的后缀名,但可以允许上传.htaccess 文件。

利用方法:上传 .htaccess 解析文件,利用其配置,将白名单文件的类型解析成php 文件类型。
上传 .htaccess 文件 内容如下: ( 将服务器上的 test.jpg 文件解析成 php 文件 ,这里文件可以自由配置 )

文件上传漏洞渗透与攻防(一)_第28张图片

再上传一个一句话木马,文件名为 test.jpg ,依旧访问 test.jpg ,但其会以 php形式解析。

我们将编辑好的.htaccess 文件上传到服务器上,

文件上传漏洞渗透与攻防(一)_第29张图片

 然后将我们包含有一句话木马的shell.php改成后缀为a.jpg的文件:

去访问这个文件存在的路径:

文件上传漏洞渗透与攻防(一)_第30张图片

 访问成功:

文件上传漏洞渗透与攻防(一)_第31张图片

Pass-05
文件上传漏洞渗透与攻防(一)_第32张图片

文件上传漏洞渗透与攻防(一)_第33张图片 

 

漏洞描述:过滤了 .htaccess
利用方法:
(1) 使用大小写绕过 .htaccess
(2) 利用 .user.ini 配置文件
.user.ini 。它比 .htaccess 用的更广,不管服务器是 nginx/apache/IIS ,当使用 CGI
FastCGI 来解析 php 时, php 会优先搜索目录下所有的 .ini 文件,并应用其中的配置。
类似于 apache .htaccess ,但语法与 .htacces 不同,语法跟 php.ini 一致。
文件上传漏洞渗透与攻防(一)_第34张图片

上传文件 .user.ini, 内容为:
auto_prepend_file=test.jpg
再上传一个内容为 php 一句话脚本,命名为 test.jpg
.user.ini 文件作用:所有的 php 文件都自动包含 test.jpg 文件。 .user.ini 相当于一个用
户自定义的 php.ini

Pass-06

文件上传漏洞渗透与攻防(一)_第35张图片

文件上传漏洞渗透与攻防(一)_第36张图片

漏洞描述:对于文件名后缀的校验时,没有进行通用的大小转换后的校验-> strtolower()
大小写绕过原理:
Windows 系统下,对于文件名中的大小写不敏感。例如: test.php TeSt.PHP 是一
样的。
Linux 系统下,对于文件名中的大小写敏感。例如: test.php TesT.php 就是不一样
的。

利用方法:文件后缀为 .PHP
我们将上传的shell后缀改为大写:
文件上传漏洞渗透与攻防(一)_第37张图片

文件上传漏洞渗透与攻防(一)_第38张图片 上传成功:

文件上传漏洞渗透与攻防(一)_第39张图片

 Pass-07

 文件上传漏洞渗透与攻防(一)_第40张图片

文件上传漏洞渗透与攻防(一)_第41张图片

对上传的文件名未做去空格的操作->trim()

Windows 系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除
空格。从而绕过黑名单.
利用方法: burp 抓包,修改对应的文件名 添加空格。

我们上传文件,抓包:

文件上传漏洞渗透与攻防(一)_第42张图片

然后在这里filename后面添加上一个空格:

文件上传漏洞渗透与攻防(一)_第43张图片

放包,上传成功:

文件上传漏洞渗透与攻防(一)_第44张图片

 Pass-08

文件上传漏洞渗透与攻防(一)_第45张图片

文件上传漏洞渗透与攻防(一)_第46张图片漏洞描述:对上传的文件后缀名未做去点.的操作 ->strrchr($file_name, '.') 

利用 Windows 系统下,文件后缀名最后一个点会被自动去除
利用方法:文件后缀名为 .php.
我们上传文件,抓包:
文件上传漏洞渗透与攻防(一)_第47张图片

 在这里添加一个.

文件上传漏洞渗透与攻防(一)_第48张图片

放包,上传成功:

 Pass-09

文件上传漏洞渗透与攻防(一)_第49张图片

文件上传漏洞渗透与攻防(一)_第50张图片

漏洞描述:对上传的文件后缀名未做去::$DATA 处理

Windows 系统下,如果上传的文件名为 test.php::$DATA 会在服务器上生成一个test.php 的文件,其中内容和所上传文件内容相同,并被解析。
利用方法:上传带有一句话木马的文件,其文件名为 test.php::$DATA
我们上传文件,抓包:
文件上传漏洞渗透与攻防(一)_第51张图片
在文件名后添加上::DATA

文件上传漏洞渗透与攻防(一)_第52张图片

 放包,上传成功:文件上传漏洞渗透与攻防(一)_第53张图片

 Pass-10

文件上传漏洞渗透与攻防(一)_第54张图片

文件上传漏洞渗透与攻防(一)_第55张图片漏洞描述:将文件名进行过滤操作后,将文件名拼接在路径后面,所以需要绕 过前面的首尾去空以及去点。

利用方法:上传文件名为 .php. .( +php+ + 空格 + )

我们上传文件,抓包:

文件上传漏洞渗透与攻防(一)_第56张图片

在文件后缀加上. .

文件上传漏洞渗透与攻防(一)_第57张图片

 放包,上传成功:

文件上传漏洞渗透与攻防(一)_第58张图片

Pass-11

文件上传漏洞渗透与攻防(一)_第59张图片

文件上传漏洞渗透与攻防(一)_第60张图片

漏洞描述:利用 str_ireplace()将文件名中符合黑名单的字符串替换成空

利用方式:利用双写黑名单字符,对字符串的一次过滤后拼接出 php, 文件
.pphphp

 我们修改上传文件后缀名:

文件上传漏洞渗透与攻防(一)_第61张图片

上传成功:

文件上传漏洞渗透与攻防(一)_第62张图片

 Pass-12

文件上传漏洞渗透与攻防(一)_第63张图片

文件上传漏洞渗透与攻防(一)_第64张图片漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控

利用方法:设置上传路径为 upload/phpinfo.php%00 , 添加 phpinfo.php%00 内容为了控制路径,上传文件后缀为白名单即可 例 :test.jpg ,保存后为/upload/phpinfo.php%00test.jpg ,但服务端读取到 %00 时会自动结束,将文件内容保存至 phpinfo.php
PS: 需要 php 的版本号低于 5.3.29 ,且 magic_quotes_gpc 为关闭状态
文件上传漏洞渗透与攻防(一)_第65张图片
我们上传文件,抓包:

文件上传漏洞渗透与攻防(一)_第66张图片

在路劲后添加上%00:

文件上传漏洞渗透与攻防(一)_第67张图片

放包,上传成功:

文件上传漏洞渗透与攻防(一)_第68张图片

Pass-13

文件上传漏洞渗透与攻防(一)_第69张图片

文件上传漏洞渗透与攻防(一)_第70张图片

漏洞描述:漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径 可控,但因为是 POST 型,需要在 16 进制中修改,因为 POST 不会像 GET 样对 %00 进行自动解码
我们上传文件,抓包:
文件上传漏洞渗透与攻防(一)_第71张图片

在upload/后面加上/shell.php+ 并把filename里的shell.php改成shell.png。

q9FFMirqC5EAAAAASUVORK5CYII=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

然后到16进制中将+号改为00

文件上传漏洞渗透与攻防(一)_第72张图片

文件上传漏洞渗透与攻防(一)_第73张图片 放包,上传成功:

文件上传漏洞渗透与攻防(一)_第74张图片

 Pass-14

文件上传漏洞渗透与攻防(一)_第75张图片

文件上传漏洞渗透与攻防(一)_第76张图片 

文件上传漏洞渗透与攻防(一)_第77张图片 

漏洞描述:通过读文件的前 2 个字节,检测上传文件二进制的头信息,判断文件类型,利用图片马绕过检测。
利用方法:图片马制作
cmd 里执行 copy logo.jpg/b+test.php/a test.jpg
logo.jpg 为任意图片
test.php 为我们要插入的木马代码
test.jpg 为我们要创建的图片马
名字可任意
我们来制作图片马:

 

文件上传漏洞渗透与攻防(一)_第78张图片

我们以文本格式打开图片文件,可以看到恶意代码被包含在了图片里

 

上传我们的文件:

文件上传漏洞渗透与攻防(一)_第79张图片

 上传成功:

文件上传漏洞渗透与攻防(一)_第80张图片

 Pass-15

文件上传漏洞渗透与攻防(一)_第81张图片

文件上传漏洞渗透与攻防(一)_第82张图片漏洞描述:通过 getimagesize()获取上传文件信息,图片马绕过 

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组

这一关校验了上传文件的大小,我们直接制作一个图片马,跟上一关一样:

文件上传漏洞渗透与攻防(一)_第83张图片

 上传成功:

文件上传漏洞渗透与攻防(一)_第84张图片

Pass-16

文件上传漏洞渗透与攻防(一)_第85张图片 

文件上传漏洞渗透与攻防(一)_第86张图片 

漏洞描述:利用 php 内置函数 exif_imagetype() 获取图片类型(需要开启php_exif 模块)
利用方法:(1) 图片马
(2) 预定义高度宽度:例 .htaccess 文件
文件上传漏洞渗透与攻防(一)_第87张图片

(3)利用 x00x00x8ax39x8ax39 文件头

文件上传漏洞渗透与攻防(一)_第88张图片 我们这里还是运用图片马(百试不爽):文件上传漏洞渗透与攻防(一)_第89张图片

  上传成功:

文件上传漏洞渗透与攻防(一)_第90张图片

 Pass-17

文件上传漏洞渗透与攻防(一)_第91张图片

文件上传漏洞渗透与攻防(一)_第92张图片 

文件上传漏洞渗透与攻防(一)_第93张图片 

文件上传漏洞渗透与攻防(一)_第94张图片 

漏洞描述:综合判断了后缀名、 content-type ,以及利用 imagecreatefromgif 判断是否为 gif 图片,并在最后对文件内容进行了二次渲染,修改文件内容

 

绕过方法:上传一个 GIF 图片马,然后将其下载下来,查看其十六进制的文件内容,找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方
详细内容可以参考链接: https://xz.aliyun.com/t/2657
这一关会把我们上传的一句话图片马里的恶意代码删掉,我们这里为了方便直接在网上找一个不会被二次渲染删掉恶意代码的图片上传:
文件上传漏洞渗透与攻防(一)_第95张图片

 上传成功:

文件上传漏洞渗透与攻防(一)_第96张图片

Pass-18

文件上传漏洞渗透与攻防(一)_第97张图片 

漏洞描述:先将文件上传到服务器,然后通过 rename 修改名称,再通过unlink 删除文件,因此可以通过条件竞争的方式在 unlink 之前,访问 webshell
利用方法:使用 burp 或者 python 脚本对要上传的文件路径进行不断的访问 (upload/webshell.php) ,上传一个 webshell.php ,但访问该文件,会在目录下生成一
webshell ,文件内容为
文件上传漏洞渗透与攻防(一)_第98张图片
文件上传漏洞渗透与攻防(一)_第99张图片

 我们上传一个条件竞争的文件,文件的内容为,保存为competition.php:

文件上传漏洞渗透与攻防(一)_第100张图片

抓包:

文件上传漏洞渗透与攻防(一)_第101张图片

右键:

文件上传漏洞渗透与攻防(一)_第102张图片

设置如下:

文件上传漏洞渗透与攻防(一)_第103张图片

文件上传漏洞渗透与攻防(一)_第104张图片 然后开始爆破:

文件上传漏洞渗透与攻防(一)_第105张图片 文件上传漏洞渗透与攻防(一)_第106张图片

然后我们在浏览器输入上传文件的路劲,不断刷新访问,直到一句话木马被生成:

文件上传漏洞渗透与攻防(一)_第107张图片

然后我们在中国蚁剑之中成功连接:

文件上传漏洞渗透与攻防(一)_第108张图片

Pass-19

文件上传漏洞渗透与攻防(一)_第109张图片

文件上传漏洞渗透与攻防(一)_第110张图片 

文件上传漏洞渗透与攻防(一)_第111张图片 

文件上传漏洞渗透与攻防(一)_第112张图片 

 漏洞描述:后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以 不断利用 burp 发送上传图片马的数据包,由于条件竞争,程序会出现来不及 rename 的问题,从而上传成功

利用方法:区别于 Pass-18, 这里需要使用图片马

Pass-20 

文件上传漏洞渗透与攻防(一)_第113张图片

文件上传漏洞渗透与攻防(一)_第114张图片 

漏洞描述:使用 pathinfo($file_name,PATHINFO_EXTENSION) 的方式检查文件名后缀(从最后一个小数点进行截取),并使用的是黑名单方式。
文件上传漏洞渗透与攻防(一)_第115张图片

利用方法:上传一句话木马,在文件名后缀加一个小数点绕过 phpinfo.php. ,上传成功可以直接访问 phpinfo.php
我们上传shell.php文件 保存名称为upload-19.php/.
文件上传漏洞渗透与攻防(一)_第116张图片

 上传成功:

文件上传漏洞渗透与攻防(一)_第117张图片

 

Pass-21

文件上传漏洞渗透与攻防(一)_第118张图片

文件上传漏洞渗透与攻防(一)_第119张图片 

文件上传漏洞渗透与攻防(一)_第120张图片 

 

漏洞描述:对参数 $file 进行判断,如果不是,将其修改为数组,但我们提前传
入数组时,造成漏洞
文件上传漏洞渗透与攻防(一)_第121张图片

利用方法:数组绕过

文件上传漏洞渗透与攻防(一)_第122张图片 我们上传文件,抓包:

文件上传漏洞渗透与攻防(一)_第123张图片

文件上传漏洞渗透与攻防(一)_第124张图片 将filename的shell.php改成shell.jpg :

文件上传漏洞渗透与攻防(一)_第125张图片

MIME类型也需要改:

文件上传漏洞渗透与攻防(一)_第126张图片

在这里添加上数组:

文件上传漏洞渗透与攻防(一)_第127张图片 这里也需要改:

文件上传漏洞渗透与攻防(一)_第128张图片

 下面两个地方也需要改:文件上传漏洞渗透与攻防(一)_第129张图片

放包,上传成功:

文件上传漏洞渗透与攻防(一)_第130张图片

 

文件上传漏洞发现与利用

文件上传漏洞利用流程

1、找到上传的位置
2、尝试绕过校验,上传文件
3、获得文件位置
4、蚁剑连接,管理文件

发现

工具下载地址:https://github.com/almandin/fuxploider

文件上传漏洞渗透与攻防(一)_第131张图片

他这个项目可以自动去检验网站文件上传的表单有没有可以上传文件的点。

文件上传漏洞防御

文件上传漏洞发生的前提

1、网站上传功能能正常使用
2、文件类型允许上传
3、上传路径可以确定
4、文件可以被访问,可以 被执行 或被包含

防御

扩展名(后缀)黑白名单
MIME类型校验(image/gif)
文件内容头校验(GIF89a)
对文件内容进行二 次渲染
对上传的文件重命名,不易被猜测
不要暴露上传文件的位置
禁用上传文件的执行权限

你可能感兴趣的:(Web漏洞,安全,web安全,系统安全,网络安全)