文件上传漏洞

文件上传漏洞

概念

上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。

危害

• 网站被控制,对文件增删改查,执行命令,链接数据库
• 如果服务器长久未更新,可以利用exp提权,导致服务器沦陷
• 同服务器的其他网站沦陷

导致漏洞的原因

·服务器配置不当(iis6.0 put 直接写文件)
如果开启web Dav然后脚本目录开启可写脚本资源就是可以访问的不需要任何上传程序只要知道服务器的ip就可以往里面写文件了
·本地文件上传限制被绕过(js验证) 只做了前端验证
·服务端过滤不严格被绕过(禁止php,asp,jsp,aspx,未禁php3、asa(和asp一样)、cer、cdx等)或者试试大小写
·文件路径截断(0x00、\0、?、%00等字符,超长文件路径)列子:a.php.jpg---抓包把点改为00就会过滤后面的字符 =a.php 
0x00截断形成的原因:在c语言当中声明一个字符串的时候在结尾默认添加一个/0来表示字符串的结尾和c语言是一样的声明
1.php.jpg手动的吧.变成/0就会认为到这个位置就结束了
·文件解析漏洞到导致文件执行(iss(如果子在6.0版本中 a.asp;.jpg是图片但是会当做脚本运行)apache(从尾部逐一查看自己识别的后缀名),nginx(1.jpg/xx.php会当成脚本运行))
·开源编辑器上传文件漏洞(fckeditor自定义文件名、文件夹结合IIS6.0解析漏洞,ewebeditor可登陆后台配置上传文件类型)
在iis创建文件夹当是xxx.asp里面的文件都会当做脚本运行

利用条件

1、有文件上传功能
2、上传文件能够执行
3、上传文件路径可知

利用方法

• 找到上传点,尝试上传脚本文件
• 上传成功,访问上传的脚本文件
• 上传失败,采取过滤绕过方法
防御方法
• 上传文件的存储目录不给执行权限
• 文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)
• 不能有本地文件包含漏洞(include dama.jpg)
• 及时更新web应用软件避免解析漏洞攻击
上传文件中写入脚本
使用Burp Suite进行抓包改写HTTP的头部开始位置改为PUT /xx.txt HTTP/1.1在最下面换行写入一句话木马
使用MOVE方法头部改为MOVE /xx.txt HTTP/1.1后面紧跟着换行写路径:Destination: http://192.168.xxx.xxx/xxx.asp

Destination上面是请求头 中间空行是请求行 一句话木马位置是请求主体

常用的一些可执行的文件脚本后缀:

php .php2 .php3 .php5 .phtml
asp .aspx .ascx .ashx
cer .asa .cdx.jsp .jspx.p

过滤不严格或被绕过:

1:某些情况下管理员错误的服务器配置会导致.html、.xml等静态页面后缀的文件也可被执行。
修改配置文件:

2:多文件上传时,有时服务器只对第一个上传的文件进行了检查,这时通过上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过滤。

Web前端绕过方法

1: 使用f12键把元素里的检查元素去掉。
2: 使用Burp Suite抓包改写 filename=”1111.jpg”的后缀名为php

过滤后缀名绕过的方法:

使用Burp Suite抓包改写Content-Type:application/octet-stream(二进制文件)改为:image/jpeg

用类似的方法获取shell

零零截断:
编写上传文件的名字为1111.php.jpg然后用Burp Suite抓包打开十六进制页面找到文件名找到.的url编码2e把2e改为00然后就会变为1111.php
限于5.2版本

文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语
言函数中,处理字符串的函数中0x00被认为是终止符。
例如:
网站上传函数处理xxx.php%00.jpg时,首先后缀名是合法的jpg格式,可以
上传,在保存文件时,遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀
名为xxx.php
绕过服务器端扩展名检测上传-黑名单校验:
过滤不严格可以在文件后缀名后面介质加没有被过滤的后缀名 列子:ftp.php.cdx
构造图片码,绕过文件内容检测上传WebShell-对图片内容进行了检测
可以把1.jpg后面加上.php进行上传因为还是图片但是文件是打不开的但是上传单纯的被限制外的文件是不成功的必须是图片
创建文件在里面写入一句话木马或者是数据编辑前提必须进行空格 <?php phpinfo();?>
用shift键加右键进入cmd窗口复制生成图片码 注:尽量找小一点的图片

附加:
抓包菜刀条件:需要设置IE的代理
原理:是内部传值的形式传过去之后执行里面的内容
自己手写内容思路:把列磁盘目录传给php程序之后接收指引

服务端目录路径检测(检测跟path参数相关的内容)
有的网站不仅是传的上传的文件也有上传文件保存的目录有的时候这个目录在上传的时候就在定义

然后保存的地方就变换成了path
是可以进行伪造的:
Path传值可以伪造一个路径加上…/就进入上一级目录:如果是正常上传的那个文件夹正好不支持脚本运行(没有读和写的权限)可以使用…/跑到根目录下根目录支持脚本运行可以通过子方式进行突破

.htaccess文件攻击:
.htaccess文件攻击即结合黑名单攻击服务器的 .htaccess文件 。
通过move_uploaded_file函数把自己写的 .htaccess文件覆盖掉服务
器上的这样就可以解析定义名单了。
.htaccess文件用处:
通过.htaccess文件调用php解释器去解析一个文件名中只要包含
“haha”这个字符串的任意文件,无论你文件名是什么样子,只要包
含”haha”这个字符串,都可以被以php的方式来解析。
.htaccess文件内容:
<FilesMatch “haha”>(文件匹配) 意思:找到带有haha字符的文件去当做php去执行
SetHandler application/x-httpd-php

创建.htaccess文件可以通过sublime_text.exe等软件和cmd命令窗口也可以。

然后再创建一个hahaha.txt在里面写入一句话或者其他语言就可以了当你在打开的时候就会被当成php脚本运行
注:系统支持.htaccess文件类型
作用的范围:当前目录和子目录。注:传到上一级目录就不行了除非在根目录传一个hahaha.txt
服务端文件内容拓展检测:
如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难。也可
以说它是在代码层检测的最后一道关卡。如果它被突破了,就算代码层的漏
洞,也可以结合解析漏洞进行攻击。
1.文件幻数检测 jpg(JFIF) gif(GIF89a) png(%PNG)
2.文件相关信息检测(文件头加一些图片信息中间夹杂攻击代码)
用构成图片码的方法在代码的底部再添加一张图片(防止检测是出现检测头部和尾部)

3.文件加载检测(调用API或者函数进行文件加载测试 php的 gd库)
Apache解析漏洞:
test.php.aaa.bbb.ccc任意不属于黑名单且不属于Apache解析白名单之内的后缀名.
一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往
php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么
Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的
拓展名为止。(可以绕过黑名单的限制)
环境:
WampServer2.0All Version (WampServer2.0i / Apache 2.2.11) [Success]
WampServer2.1All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success]
Wamp5 All Version (Wamp5_1.7.4 /Apache 2.2.6) [Success]
AppServ 2.4All Version (AppServ - 2.4.9 /Apache 2.0.59) [Success]
AppServ 2.5All Version (AppServ - 2.5.10 /Apache 2.2.8) [Success]
AppServ 2.6All Version (AppServ - 2.6.0 /Apache 2.2.8) [Success]
IIS解析漏洞:
Iis 6.0:有俩个解析漏洞 put协议也是解析漏洞
1.test.asp(里面是文件夹)/任意文件名(中的一个文件会当做脚本来运行)
2.test.asp;任意文件名(中的一个文件会当做脚本来运行)
3[适合7.0和7.5版本的漏洞]:任意文件名/任意文件名.php 例如:1.jpg/xx.php服务器上只有jpg的后缀名但是后面
拼接上xx.php后1.jpg会当做php脚本去运行
IIS6.0 在解析 asp 格式的时候有两个解析漏洞.
一个是如果目录名包含".asp 、.asa、.cer “字符串,那么这个目录下所
有的文件都会按照 asp 去解析。eg: “test.asp/1.jpg”
另一个是只要文件名中含有”.asp;、.asa;、.cer;会优先按 asp 来解析
eg: “1.asp;.jpg”
IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞, 对任意文件
名只要在URL
后面追加上字符串"/任意文件名.php"就会按照 php 的方式去解析
eg:”http://www.target.com/upload/1.jpg/1.php”
Nginx 解析漏洞:
任意文件名/任意文件名.php | 任意文件名%00.php
目前 Nginx 主要有这两种漏洞:
• 一个是对任意文件名,在后面添加/任意文件名.php的解析漏
洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行
解析攻击。
• eg: “http://www.target.com/upload/1.jpg/1.php”
• 一种是对低版本的 Nginx 可以在任意文件名后面添加%00.php
进行解析攻击。
环境:
Nginx 0.5.*
• Nginx 0.6.*
• Nginx 0.7 <= 0.7.65
• Nginx 0.8 <= 0.8.37
• 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂
文件1.jpg,然后以1.jpg%00.php进行请求。
• Nginx 0.8.41 – 1.5.6:
• 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂
文1.jpg,然后以1.jpg%20%00.php进行请求

总结:
轻量级的检测绕过攻击
• 绕过javascript对后缀名的检测
• 绕过服务端对http requst包MIME类型的检测
• 绕过文件内容幻术头的检测
路径/ / 拓展名检绕过
• 黑名单绕过
• 文件名大小写绕过
• 名单列表绕过
• 特殊文件名绕过
• 0x00截断绕过
• .htaccess文件攻击
• Apache解析漏洞
• IIS解析漏洞
• Nginx解析漏洞
• 白名单绕过
• 文件名后缀0x00截断绕过
• PHP文件包含漏洞
• IIS解析漏洞
• Nginx解析漏洞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值