文件上传
文件上传
漏洞描述
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。
修复方案
- 在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问。
- 文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚本也不能解析,导致攻击者放弃这个攻击途径。
- 设置上传白名单,白名单只允许图片上传如,jpg png gif 其他文件均不允许上传
- 上传的后缀名,一定要设置成图片格式如 jpg png gif
- 服务器端使用白名单防御
- 修复 web 中间件的漏洞
- 禁止客户端存在可控参数
- 上传的文件名随机,不可预测
常见可执行脚本后缀
asp,asa,cdx,cer,php,aspx,ashxjsp,php3,php.a,shtml,phtml
绕过方法
js前端检测
- 使用F12审查元素,把检测文件函数取消调用

- 先把恶意文件改成允许上传的后缀,然后点击上传并抓包,抓到包再后修改文件名后缀为可执行文件后缀。

contnet-type 检测
上传文件,脚本文件,抓包把 content-type 修改成 image/jpeg 即可绕过上传。

黑名单检测
大小写、在后缀名后加空格、windows可以php.、
.php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".
pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jsp
a",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHt
ml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",
".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf
htaccess 重写解析绕过上传
上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。在 htaccess 文件中可以把jpg文件重写成 php 文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache是多数都开启这个模块,所以规则一般都生效。

上传.htaccess 到网站里,再上传恶意的 jpg 到.htaccess 相同目录里,访问图片即可获取执行脚本
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
NTFS 交换数据流::$DATA 绕过上传
如果后缀名没有对::\(DATA 进行判断,在后缀名后面添加“::\)DATA”,利用 windows 系统 NTFS 特征可以绕过上传。

windows 环境的叠加特征
先上传一个 “a.php:.jpg”文件,此时会上传成功一个a.php的空文件,然后直接重发包,把a.php:.jpg改为a.>>>即可。


文件上传参数目录可控
利用条件:
上传目录参数可控,POST需要把%00做url解码
- 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
- php 版本小于 5.3.4
文件头检测
- JPEG (jpg),文件头:FFD8FF
- PNG (png),文件头:89504E47
- GIF (gif),文件头:47494638
- TIFF (tif),文件头:49492A00
- Windows Bitmap (bmp),文件头:424D
一般是在文件前加GIF89a
图片马制作
copy 1.jpg/a+1.php/b 3.jpg #要以图片为主合并
中间件漏洞
-
nginx 0.83 /1.jpg%00php
-
apahce 1x 或者 2x
- 当 apache 遇见不认识的后缀名,会从后向前解析例如 1.php.rar 不认识 rar 就向前解析,直到知道它认识的后缀名。
-
phpcgi 漏洞(nginx iis7 或者以上) 上传图片后 1.jpg。访问 1.jpg/1.php 也会解析成php。
-
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
- apache 通过 mod_php 来运行脚本,其 2.4.0-2.4.29 中存在 apache 换行解析漏洞,在解析 php 时 xxx.php\x0A 将被按照 PHP 后缀进行解析,导致绕过一些服务器的安全策略
文件名使用数组拼接


浙公网安备 33010602011771号