11.11文件上传绕过
绕过
前端绕过
(1)修改前端的JS,添加白名单
(2)浏览器禁用JS
(3)破坏JS代码,修改引用的地方
(4)修改webshell后缀名,shell.php-->shell.png,拦截数据包,修改后放行
后端绕过
(1)后缀名检测绕过
- 大小绕过
- 找不在黑名单内的文件后缀名,需要服务器能够解析php2
- 利用windows系统特性,以空格和.结尾的文件
- 利用NTFS数据流绕过
这里生成的文件内容没有截全,都为<?php phphinfo();?>
(2)MIME验证绕过
截取数据包修改请求头中content-type为常见的图片类型
(3)文件内容检测绕过(文件头检测)
服务器验证单签文件的文件头(魔数头),如果被拦截,可以添加容许上传文件的文件头。
拦截数据包,在恶意代码前面直接添加文件头
制作图片马,上传拦截数据包修改后缀名
copy 1.png/b+ shell.php/a shell.png
edjpgcom一句话木马程序辅助生成图片马
Linux中:
echo “<?php@eval($_POST[‘pass’])?>” >> a.jpg 没有文件头
(>> 表示在后面追加,这里不能用 > )
截断上传
文件加载检测
一般是调用的API或函数去进行文件加载检测,常见的是图像渲染测试
一般两种攻击方式:渲染测试绕过、攻击文件加载器自身
如果遇到二次渲染,想绕过是很难的,一般只能对文件加载器进行攻击
利用.haccess上传webshell
上传的注意事项:如果想通过文件上传来getshell,需要注意:文件可上传+文件可解析(后缀名+路径可知)
解析漏洞
默认情况下服务器或中间件解析了一些图片或者目录等常规文件,这些文件不是脚本文件却被解析了。隐藏在里面的恶意代码被解析,说明该服务器或中间件出现了解析漏洞。
常见的解析漏洞:
(1)IIS6.0解析漏洞
目录解析
原理:服务器默认会把xx.asp目录下的文件都解析成asp文件
文件解析
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg就被解析成asp文件了
文件上传漏洞防御
(1)文件上传的目录设置为不可执行
(2)综合多种方式判断文件类型,综合多种检测方式(MIME+后缀名+白名单)
(3)Webshell=文件可上传+文件可解析,使用随机数改写文件名或者文件路径
(4)设置一个单独的文件服务器,严格控制权限,文件服务器权限设置为可读可写不可执行
(5)针对图片,二次渲染
(6)针对解析漏洞防御(上传+平台解析)
1>升级IIS为高版本,注意cgi_pathinfo的设置
2>低版本IIS需要严格控制文件的上传,使用正则匹配设置文件名
3>升级高版本的apache,并注意安全配置
4>升级版本。注意fix_pathinfo的配置
5>考虑使用第三方防护工具 (WAF、云盾、云锁等)
文件包含漏洞
概念
文件包含:引用打包的类、函数或文件等,方便使用者去调用特定的功能代码,如果包含过来的文件是没有被过滤或者过滤不严谨,就会出现文件包含漏洞,也就意味着包含过来的文件中有恶意代码就有可能被解析
在php中主要是通过特定函数去引入文件,然后引入的文件没有进行合理的校验,最终导致恶意代码的注入
漏洞形成条件:
- 参数用户可控,包含的文件名用户可控
- 服务端对包含的文件没有过滤或者过滤不严谨
Php中用来做文件包含的函数如下:
Include()
Include_once()
Require()
Require_once()
文件包含的分类:
本地文件包含(服务器本地):LFI(localfileinclude),包含的是服务区本地的文件,危害:敏感信息泄露(配置文件/密码文件/数据库文件)、getshell、命令执行等等
远程文件包含(RFI):从目标服务器中去包含远程服务器(攻击者)中恶意文件(一般是恶意代码)。危害:信息泄露、getshell、执行系统命令等等
本地文件包含漏洞利用知识
漏洞条件:allow_url_include : 无要求 是否允许引用URL文件
allow_url_fopen :无要求 是否允许打开URL文件
读敏感文件,比如配置文件:/etc/passwd /etc/shadow session文件等
getshell:(1)直接通过文件包含向服务器中写入木马文件(需要伪协议的帮助)
(2)文件上传(图片马之类)+文件包含
(3)如果服务器开启了日志记录功能,包含日志文件可以getshell