绕过方法

. 0x00
. %(0x00的衍生版)

客户端绕过

抓包改包(先上传一个gif类型的木马,然后通过burp将其改为asp/php/jsp后缀名即可)

服务端校验

content-type字段校验
文件头检验(常见文件头:
() .JPEG;.JPE;.JPG,”JPGGraphic File”
() .gif,”GIF 89A”
() .zip,”Zip Compressed”
() .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”)

服务端绕过 - 文件类型绕过

抓包修改content-type,如将content-type字段改为image/gif(原为 Content-Type: text/plain

服务端绕过 - 文件头绕过

在木马内容基础上再加了一些文件信息
GIF89a<?php phpinfo(); ?>

服务端绕过 - 文件后缀名绕过

前提:
黑名单校验 黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件 绕过方法
()找黑名单扩展名漏网之鱼 - 比如 asa 和 cer 之类 - 上传 html文件进行钓鱼
()可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类 能被解析的文件扩展名列表
jsp jspx jspf
asp asa cer aspx
php php php3 php4
exe exee

服务端绕过 - 配合文件包含绕过

()先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容;
()然后再上传一个.php的文件,内容为<?php Include(“上传的txt文件路径”);?>
此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举包含的语法:
#PHP
<?php Include("上传的txt文件路径");?>
#ASP
<!--#include file="上传的txt文件路径" -->
#JSP
<jsp:inclde page="上传的txt文件路径"/>
or
<%@include file="上传的txt文件路径"%>

服务端绕过 - 配合服务器解析漏洞

WampServer2.0All Version (WampServer2.0i / Apache 2.2.) [Success]
WampServer2.1All Version (WampServer2.1e-x32 / Apache 2.2.) [Success]
Wamp5 All Version (Wamp5_1.7.4 /Apache 2.2.) [Success]
AppServ .4All Version (AppServ - 2.4. /Apache 2.0.) [Success]
AppServ .5All Version (AppServ - 2.5. /Apache 2.2.) [Success]
AppServ .6All Version (AppServ - 2.6. /Apache 2.2.) [Success]

iis漏洞版本
IIS6. (Win2003 SP2 + IIS6.) [Success]
构造:ss.asp;1.jpg
IIS7. (Win2008 R1 + IIS7.) [Success]
IIS7. (Win2008 R2 + IIS7.) [Success]

Nginx漏洞版本
• Nginx 0.5.*
• Nginx 0.6.*
• Nginx 0.7 <= 0.7.
• Nginx 0.8 <= 0.8.
• 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂
文件1.jpg,然后以1.jpg%.php进行请求。
• Nginx 0.8. – 1.5.:
• 以上Nginx容器器的版本下,上传⼀一个在waf白名单之内扩展名的⽂
文1.jpg,然后以1.jpg%%.php进行请求

服务端绕过 - 配合操作系统文件命令规则

()上传不符合windows文件命名规则的文件名
  test.asp.
  test.asp(空格)
  test.php:.jpg
  test.php::$DATA
  shell.php::$DATA…….
会被windows系统自动去掉不符合规则符号后面的内容 ()linux下后缀名大小写
在linux下,如果上传php不被解析,可上传pHp后缀的文件名。

服务端绕过 - 代码审计/CVE

PHPCMS9.6.0

富文本编辑器 - FCK

服务端绕过 - 配合其他规则 - 0x00截断 - include()

PHP版本低于5.3.4
.在url中加入%,如http://xxxx/shell.php%00.jpg
url中的%(形如%xx),web server会把它当作十六进制处理,然后将该十六进制数据hex()翻译成统一的ascii码值“NUL(null)”,实现截断 .在burpsuite的16进制编辑工具将”shell.php .jpg”(带空格的)中间的空格由20改成00
burpsuite用burp自带的十六进制编辑工具将”shell.php .jpg”(中间有空格)中的空格由20改成00,如果burp中有二进制编辑工具

服务端绕过 - 配合其他规则 - 0x00截断 - iconv()

php5.4之前,iconv()函数在转换编码的时候,遇到不合法的字符串的时候会将其截断
<?php
for($k=;$k<=;$k++)
{
$a='shell.php'.chr($k)."1.jpg";
echo 'k:'$k.' '.'$a:'.$a.' '.'iconv("UTF-8","gbk",$a):'.iconv("UTF-8","gbk",$a)."\n";
}
?>
iconv(“UTF-″,”gbk”,$a)或是iconv(“UTF-″,”gb2313″,$a)在chr()到chr()之间截断,使结果为shell.php;在iconv转码的过程中,utf->gb2312(其他部分编码之间转换同样存在这个问题)会导致字符串被截断,如:$filename=”shell.php(hex).jpg”; (hex为0×-×),经过iconv转码后会变成$filename=”shell.php “;
所以,经过iconv后$struct_file['name'])为shell.php,可成功的上传shell.php(前提是上传的文件名为shell.php{%-%}.jpg )

服务端绕过 - 双文件上传

右键审查元素,修改,上传文件<input ......>,出现两个上传框,第一个上传正常文件,第二个选择一句话木马,提交
<form enctype="multipart/form-data" method="post" action="http://pai.xx.com/server/">
<input type="file" name="files[]" />
<input type="file" name="files[]" />
<input type="submit">
</form>

服务端绕过 - 配合其他规则 - 0x00截断 - file_get_contents()

服务端绕过 - 配合其他规则 - 0x00截断 - file_exists()

服务端绕过 - 配合其他规则 - 0x00截断 - magic_quotes_gpc = Off php版本<5.3.4

http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00

test.php(0x00).jpg
test.php%.jpg

服务端绕过 - 配合其他规则 - .htaccesss

服务端绕过 - 配合其他规则 - 幻数检测绕过

服务端绕过 - 配合其他规则 - 结构加载绕过

服务端绕过 - 配合其他规则 - 渲染测试绕过

服务端绕过 - 配合其他规则 - 二次渲染绕过

Waf绕过 - 垃圾数据

有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,比如1M。此种情况可以构造一个大文件,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验;

Waf绕过 -  filename

针对早期版本安全狗,可以多加一个filename

Waf绕过 - POST/GET转换

Waf绕过 - 利用waf本身缺陷

Conten-Type字段
Content-Disposition字段
Boundary字段
NTFS ADS特性
filename字段
name字段

 

实例 - 图片上传处

a.asp;.jpg
AutoReName ->

防御

1.文件扩展名服务端白名单校验 #0x00可绕过
2.文件内容服务端校验
3.隐藏上传文件路径
4.检查配置信息无误
5.上传后,文件重命名+时间戳+随机数
6.安装必要的防护软件

应用安全 - Web安全 - 上传漏洞 - 攻防的更多相关文章

  1. web文件上传漏洞

    什么是文件上传漏洞? 指利用系统的对文件上传部分的控制不足或处理缺陷,上传可执行的动态脚本文件/webShell进行攻击行为. 原因 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的 ...

  2. WEB文件上传漏洞介绍解决办法

    引用:http://blog.csdn.net/kobejayandy/article/details/35861499 问题: -1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传 ...

  3. 攻防:文件上传漏洞的攻击与防御,转自H3C

    WebShell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器WEB目 ...

  4. [红日安全]Web安全Day5 - 任意文件上传实战攻防

    本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...

  5. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  6. WEB安全:文件上传漏洞

    文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...

  7. DVWA 黑客攻防演练(五)文件上传漏洞 File Upload

    说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...

  8. web服务端安全之文件上传漏洞

    一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...

  9. 基于 java 【Web安全】文件上传漏洞及目录遍历攻击

    前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...

随机推荐

  1. CentOS7搭建FastDFS+Nginx

    1. FastDFS 介绍 FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件 ...

  2. muduo

    https://blog.csdn.net/zxm342698145/article/details/80689016 https://blog.csdn.net/u010087886/article ...

  3. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  4. apply_test

    //object apply_test {// def main(args:Array[String]): Unit ={// println("apply 方法:"+apply( ...

  5. 错误:非法字符:“\ufeff”

        导入开源的项目的时候,你可以碰到以上的编码问题,这一般这个项目是用eclipse开发的.主要原因是: Eclipse可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但Android ...

  6. fs.mkdir

    fs.mkdir(path[, mode], callback) 要求父目录必须存在 let fs = require('fs'); fs.mkdir('./c/b/a', res=>{ // ...

  7. css 3D动画

    一.今天让我们来学习一下css 3D吧! 1.首先我们要学习好css3 3d一定要有一定的立体感! 2.再来那就聊聊原理吧! 3.css3 3d 顾名思义是由两个2d名片组成的 但不是让你建立连个2d ...

  8. layui数据表格,当数据过长出现三个...的时候,点击会弹出一个框全部显示,如何去掉这个框

    最笨的方法就是通过css把那个框隐藏掉 .layui-table-tips-main{display:none} .layui-table-tips-c{display:none}

  9. SpringBoot的启动简述

    一.注解和启动类SpringBootApplication 它是一个复式注解. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME ...

  10. Spring boot @Transactional

    1.注解@Transactional 2.异常回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @Ov ...