任意文件上传漏洞又名文件直接上传漏洞 这种漏洞危害极大,如果攻击者能直接上传恶意脚本到网站存放的目录,且这个目录可解析动态脚本语言,那么攻击者就能够直接获取网站权限,甚至进一步权限提升,控制服务器。
1.后端代码分析
直接获取文件名 把上传的临时文件移动到 hackable/uploads 目录下

直接上传文件 网页会返回路径 访问 url 即可 getshell、
上传的文件可以改成其他恶意脚本或者后门,即可获得 webshell。

2.前端js检测上传饶过
在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过 js 文件进行校验,验证不通过则不会提交到服务器进行处理。
按 F12 使用网页审计元素,把校验的上传文件后缀名文件删除,即可上传。把恶意文件改成 js 允许上传的文件后缀,如 jpg、gif、png 等,再通过抓包工具抓取 post 的数据包,把后缀名改成可执行的脚本后缀如 php 、asp、jsp、net 等。即可绕过上传。
删除 js 文件

3.content-type检测上传绕过
1.代码分析
首先进行 submit 提交判断,再检测文件类型如果是 image/jpeg 或者 image/png, 即允许上传。

2.攻击方法
上传文件,脚本文件,抓包把 content-type 修改成 image/jpeg 即可绕过上传。
将content-type:application/octet-stream 改为 Content-Type: image/jpeg
常见的content-type

4.黑名单上传绕过
1.代码分析
首先是检测 submit 是否有值,获取文件的后缀名,进行黑名单对比,后缀名不在黑名单内,允许上传
如果 submit 有值,$deny_ext=array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。
2.攻击方法
上传图片时,如果提示不允许 php、asp 这种信息提示,可判断为黑名单限制,上传黑名单以外的后缀名即可。在 ==iis== 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net 执行 可以上传 ashx 代替 aspx。如果网站可以执行这些脚本,通过上传后门即可获取 webshell。在不同的中间件中有特殊的情况,如果在 apache 可以开启 application/x-httpd-php在 AddType application/x-httpd-php .php .phtml .php3后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本默认就会开启。上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。

5. .htaccess重写解析上传绕过
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess 文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成 php 文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache 是多数都开启这个模块,所以规则一般都生效。

攻击方法
上传.htaccess 到网站里.htaccess 内容是 <FilesMatch "jpg"> SetHandler application/x-httpd-php 再上传恶意的 jpg 到.htaccess 相同目录里,访问图片即可获取执行脚本。
6.大小写上传绕过
1.代码分析
获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
$deny_ext=
array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
2.攻击方法
仔细阅读黑名单,查看是否有被忽略的后缀名

7.空格上传绕过
1.代码分析
在上传模块里,采用黑名单上传,如果没有对空格进行去掉可能被绕过。
检测 submit 后 上传目录存在时,进入黑名单判断。如果文件后缀名在黑名单里。不允许上传,但是文件后缀名,没有过滤空格,可以添加空格绕过。
2.攻击方法
抓包上传,在后缀名后添加空格

8.利用windows系统特征绕过
1.代码分析
同样是黑名单禁止上传,但是可以上传.php.这种文件后缀。
2.攻击方法
抓包修改在后缀名后加上 . 即可绕过。

9.利用 windows 环境的叠加特征绕过上传
在 windwos 中如果上传文件名 moonsec.php:.jpg 的时候,会在目录下生产空白的文件名 moonsec.php再利用 php 和 windows 环境的叠加属性, 以下符号在正则匹配时相等 双引号" 等于 点号. 大于符号> 等于 问号? 小于符号< 等于 星号* 文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名
1.代码分析
同样是黑名单匹配,把.去掉 把空格也过滤了。::$data 也过滤了。
2.攻击方法
首先抓包上传 a.php:.php 上传会在目录里生成 a.php 空白文件,接着再次提交把a.php 改成 a.>>>

10. NTFS交换数据流::$DATA上传绕过
1.代码分析
如果后缀名没有对::deny_ext=array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");同样用黑名单过滤后缀名。 但是程序中没有对::DATA 绕过上传。
2.攻击方法
burpsuite 抓包,修改后缀名为 php::$DATA

11.双写后缀名上传绕过
在上传模块,有的代码会把黑名单的后缀名替换成空,例如 a.php 会把 php 替换成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传。
1.代码分析
同样是黑名单过滤。str_ireplace 对上传的后缀名是黑名单内的字符串转换成空。
2.攻击方法
抓包上传,把后缀名改成 pphphp 即可绕过上传

12.目录可控%00截断上传绕过
以上都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险。
1.代码分析
代码中使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是$_GET'save_path'服务器接受客户端的值,这个值可被客户端修改。所以会留下安全问题。
2.攻击方法
上传参数可控
- 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
- php 版本小于 5.3.4
首先截断攻击,抓包上传将%00 自动截断后门内容。
例如 1.php%00.1.jpg 变成 1.php

13.文件头检测上传绕过
有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测 它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传。
==常见的文件头==

1.代码分析
这个是存在文件头检测的上传,getReailFileType 是检测 jpg、png、gif 的文件头

如果上传的文件符合数字即可通过检测。
2.攻击方法
制作图片马 如: GIF89a 直接上传,利用文件包含漏洞 最后连接蚁剑即可查看
评论区
评论加载中...