应用安全 - Web安全 - 上传漏洞 - 攻防
绕过方法
. 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安全 - 上传漏洞 - 攻防的更多相关文章
- web文件上传漏洞
什么是文件上传漏洞? 指利用系统的对文件上传部分的控制不足或处理缺陷,上传可执行的动态脚本文件/webShell进行攻击行为. 原因 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的 ...
- WEB文件上传漏洞介绍解决办法
引用:http://blog.csdn.net/kobejayandy/article/details/35861499 问题: -1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传 ...
- 攻防:文件上传漏洞的攻击与防御,转自H3C
WebShell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器WEB目 ...
- [红日安全]Web安全Day5 - 任意文件上传实战攻防
本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...
- Web应用安全之文件上传漏洞详解
什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...
- WEB安全:文件上传漏洞
文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...
- DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...
- web服务端安全之文件上传漏洞
一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...
- 基于 java 【Web安全】文件上传漏洞及目录遍历攻击
前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...
随机推荐
- 可视化缺失值的办法——R语言
在数据分析中,对缺失值的处理是很关键一步,一般用summary()函数 a<-c(,,,NA) B<-c("a","b","c" ...
- PAT Advanced 1065 A+B and C (64bit) (20 分)(关于g++和clang++修改后能使用)
Given three integers A, B and C in [−], you are supposed to tell whether A+B>C. Input Specificati ...
- Linux 下安装中文字体
本文以安装黑体为例,简单演示如何在Linux下安装中文字体. 环境信息介绍 [root@thatsit ~]# cat /etc/redhat-release CentOS Linux release ...
- flask框架上下文
上下文 上下文:相当于一个容器,保存了 Flask 程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文 请求上下文(request context) 在 flask 中,可以 ...
- 图解NuGet服务器搭建和使用过程
听语音 浏览:0 | 更新:2017-10-31 09:13 | 标签:服务器 1 2 3 4 5 6 7 分步阅读 本篇经验将和大家介绍内网搭建NuGet服务器的步骤,希望对大家的工作和学习有所帮助 ...
- SSH自动登录脚本
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11926792.html vi app-stg.sh #!/usr/bin/expect -f #aut ...
- element和iView初步研究(-)
element 1.可以通过npm 和使用cdn 2,支持多种语言组件 3.基本组件还是可以的 iView iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产 ...
- vue安装 js-cookie
首先在命令行工具输入:npm install vue-js-cookie 安装完成之后在需要使用的页面导入:import Cookies from 'js-cookie' 这样就可以使用了,如下图,先 ...
- MySql的导入导出
可以参看之前的博客:https://www.cnblogs.com/shijinglu2018/p/8672699.html 可以参看视频:https://i.cnblogs.com/EditPost ...
- linux运维、架构之路-linux基础知识
1.PATH环境变量 LANG ——————>变量名字 $LANG ——————>查看变量内容 LANG= ——————>修改变量 系统环境变量填加内容前面使用export expo ...