文件上传漏洞
描述
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。
中国蚁剑安装
1. 官网下载源码和加载器
GitHub地址:https://github.com/AntSwordProject
》加载器咱们下载win64版本(往下滑找到下载地址)
2.解压至同一目录并
3.安装
》点击antSword.exe,进行初始化
》初始化时选择antSword_masster文件夹
4.可能会出现的错误
原因是文件夹目录选择错了,一定要选择安装在antSword_masster文件夹
文件上传过程
#mermaid-svg-585amNf4PN95iqsf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-585amNf4PN95iqsf .error-icon{fill:#552222;}#mermaid-svg-585amNf4PN95iqsf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-585amNf4PN95iqsf .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-585amNf4PN95iqsf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-585amNf4PN95iqsf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-585amNf4PN95iqsf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-585amNf4PN95iqsf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-585amNf4PN95iqsf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-585amNf4PN95iqsf .marker.cross{stroke:#333333;}#mermaid-svg-585amNf4PN95iqsf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-585amNf4PN95iqsf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-585amNf4PN95iqsf .cluster-label text{fill:#333;}#mermaid-svg-585amNf4PN95iqsf .cluster-label span{color:#333;}#mermaid-svg-585amNf4PN95iqsf .label text,#mermaid-svg-585amNf4PN95iqsf span{fill:#333;color:#333;}#mermaid-svg-585amNf4PN95iqsf .node rect,#mermaid-svg-585amNf4PN95iqsf .node circle,#mermaid-svg-585amNf4PN95iqsf .node ellipse,#mermaid-svg-585amNf4PN95iqsf .node polygon,#mermaid-svg-585amNf4PN95iqsf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-585amNf4PN95iqsf .node .label{text-align:center;}#mermaid-svg-585amNf4PN95iqsf .node.clickable{cursor:pointer;}#mermaid-svg-585amNf4PN95iqsf .arrowheadPath{fill:#333333;}#mermaid-svg-585amNf4PN95iqsf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-585amNf4PN95iqsf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-585amNf4PN95iqsf .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-585amNf4PN95iqsf .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-585amNf4PN95iqsf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-585amNf4PN95iqsf .cluster text{fill:#333;}#mermaid-svg-585amNf4PN95iqsf .cluster span{color:#333;}#mermaid-svg-585amNf4PN95iqsf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-585amNf4PN95iqsf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
选择发送的文件
服务器接收
网站程序判断
保存为临时文件
移动到指定目录
必要条件
- 存在上传点
- 可上传
- 可执行且可解析
- 可访问上传的脚本文件
代码示例
dvwa靶场攻击示例
1.书写一句话密码进行上传
2. 拼接上传地址
》1. 拼接为启动目录
》2. 往后依次进行拼接
未返回404 可行
3.使用中国蚁剑链接webshell
成功拿到shell权限,入侵成功
前端js绕过方式
方法1:上传图片(jpg、png等)文件后,使用bp抓包修改文件后缀为php文件
方法2:前端F12模式删除相关校验代码
服务端校验请求头中content-type
把bp抓包后,修改content-type为image/jpeg或image/png
黑名单绕过
1.修改后缀名为黑名单以外的后缀名
》上传黑名单以外的后缀名即可。
在iis里asp禁止上传了,可以上传asacercdx这些后缀,如在网站里允许.net
执行可以上传ashx代替aspx。如果网站可以执行这些脚本,通过上传后门即可
获取webshell。
在不同的中间件中有特殊的情况,如果在apache可以开启application/x-httpd-php
在AddTypeapplication/x-httpd-php.php.phtml.php3
后缀名为phtml、php3均被解析成php有的apache版本默认就会开启。
上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。
2.htaccess重写解析绕过上传
前提:apache开启rewrite重写模块
1.上传含有webshell的txt文件,修改后缀为.jpg文件
2.上传.htaccess文件到网站中内容如下:
<FilesMatch"jpg">
SetHandlerapplication/x-httpd-php
</FilesMatch> #意思为把jpg文件识别为php文件
3.大小写绕过
修改后缀名部分大写或小写后上传
或者使用bp抓包后进行修改大小写
4.空格绕过上传
bp抓包后在上传文件末尾输入空格进行上传
5.利用windows系统特性绕过上传(添加.)
bp抓包后上传文件末尾输入.进行绕过
原理:windows中文后缀名.系统会自动忽略,直接可以执行
6.ntfs交换数据量::$DARA绕过上传
前提:win
bp抓包后修改后缀名为php::$DATA上传即可
7.利用windaows环境叠加特性绕过
1.bp抓包后修改文件后缀为(webshell).php:.jpg,此时在服务器中会生成一个xxx.php空文件
2.再次修改文件后缀为.>>>,会把本文件中的文件写入到xxx.php文件中
匹配规则:
“” = .=? 匹配一个字符 # >>>匹配为php
<=*匹配多个字符
8.双写后缀名绕过
bp抓包后修改php为phphpp,此时会过滤掉一个php
白名单绕过
1.目录可控%00截断绕过上传
前提:
1.请求报文中存在保存的目录
2.gpc为关闭状态
3.php版本小于5.3.4
原理:bp抓包后修改后缀名为php%00.jpg,相当于%00后均在上传过程中不识别,但服务器会识别所以可以造成上传绕过
2.文件头检测绕过
前提:使用getReailFileType检测文件开头是否是jpg、png、gif文件头
常见的图片文件头:
JPEG(jpg),文件头:FFD8FF
PNG(png),文件头:89504E47
GIF(gif),文件头:47494638
TIFF(tif),文件头:49492A00
方法:使用图片和一句话木马合成一个文件进行上传
copy xx.png/b+xxx.php shell.php #生成shell.png文件进行上传
3.绕过图片二次渲染上传
应用场景:上传webshell图片后,网站为了符合要求会二次渲染照片(调整图片大小分辨率等)
方法:使用hxd文件(16进制)打开渲染前和渲染后的照片,对比那些在渲染后未改变,未改变部分修改为webshell木马
其他文件上传漏洞
nginx0.83----- 1.jpg%00php 解析为1.php
apahce1x或者2x------当apache遇见不认识的后缀名,会从后向前解析例如1.php.rar不认识rar就向前解析,直到知道它认识的后缀名。
phpcgi漏洞(nginxiis7或者以上)上传图片后1.jpg。访问1.jpg/1.php也会解析成php。
ApacheHTTPD换行解析漏洞(CVE-2017-15715)
apache通过mod_php来运行脚本,其2.4.0-2.4.29中存在apache换行解析漏洞,在解析php时xxx.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
文件上传漏洞防御方法
服务器端使用白名单防御,修复web中间件的漏洞,禁止客户端存在可控参数,存放文件目录禁止脚本执行,限制后缀名一定要设置图片格式jpg、gif、png文件名随机的,不可预测。
版权归原作者 边缘拼命划水的小陈 所有, 如有侵权,请联系我们删除。