11.11文件上传绕过

绕过

前端绕过

(1)修改前端的JS,添加白名单

(2)浏览器禁用JS

(3)破坏JS代码,修改引用的地方

(4)修改webshell后缀名,shell.php-->shell.png,拦截数据包,修改后放行

 

后端绕过

(1)后缀名检测绕过

  1. 大小绕过
  2. 找不在黑名单内的文件后缀名,需要服务器能够解析php2
  3. 利用windows系统特性,以空格和.结尾的文件
  4. 利用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解析漏洞

目录解析

形式:www.xxx.com/xx.asp/xx.jpg

原理:服务器默认会把xx.asp目录下的文件都解析成asp文件

文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服务器默认不解析;号后面的内容,因此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中主要是通过特定函数去引入文件,然后引入的文件没有进行合理的校验,最终导致恶意代码的注入

漏洞形成条件:

  1. 参数用户可控,包含的文件名用户可控
  2. 服务端对包含的文件没有过滤或者过滤不严谨

Php中用来做文件包含的函数如下:

Include()

Include_once()

Require()

Require_once()

文件包含的分类:

本地文件包含(服务器本地):LFIlocalfileinclude),包含的是服务区本地的文件,危害:敏感信息泄露(配置文件/密码文件/数据库文件)、getshell、命令执行等等

远程文件包含(RFI):从目标服务器中去包含远程服务器(攻击者)中恶意文件(一般是恶意代码)。危害:信息泄露、getshell、执行系统命令等等

本地文件包含漏洞利用知识

漏洞条件:allow_url_include : 无要求 是否允许引用URL文件

allow_url_fopen  :无要求 是否允许打开URL文件

读敏感文件,比如配置文件:/etc/passwd  /etc/shadow  session文件等

getshell:(1)直接通过文件包含向服务器中写入木马文件(需要伪协议的帮助)

2)文件上传(图片马之类)+文件包含

3)如果服务器开启了日志记录功能,包含日志文件可以getshell

原文地址:https://www.cnblogs.com/x98339/p/11834126.html