概述
文件上传漏洞 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。 所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。例如: 验证文件类型、后缀名、大小 验证文件的上传方式 对文件进行一定复杂的重命名 不要暴露文件上传后的路径
upload-labs(21关) 前16关
1.JS绕过
通过代理抓包。发现未产生流量,确定其为前端JS检测 通过禁用JS上传 上传成功 蚁剑连接成功
2.MIME类型绕过
通过代理抓包,修改Content-Type为image/gif放包 蚁剑连接测试成功
3.后缀名解析绕过
将文件后缀名修改为php5上传,上传成功 这里可以上传后缀为php3,pht,phtml,php5,phps等来绕过(它们会被解析为php) 蚁剑连接测试,发现测试失败。原因是由于本地服务器配置的原因无法解析后缀php5为php文件
4…htaccess文件解析绕过
通过测试发现为黑名单绕过,此时可以利用.htaccess文件解析图片马 先上传.htaccess文件
<FilesMatch "as.png">
setHandler application/x-httpd-php
</FilesMatch>
上传之后再上传图片马as.png 蚁剑连接测试成功 利用PHP 和 Windows环境的叠加特性也能getshell
5…user.ini文件解析绕过
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。 .user.ini文件解释 引发 .user.ini 解析漏洞需要三个前提条件 服务器脚本语言为PHP 服务器使用CGI/FastCGI模式 上传目录下要有可执行的php文件(例如index.php) .user.ini
auto_prepend_file=as.png
参考网址: .user.ini导致文件上传绕过 .user.ini配置文件在渗透中的利用
6.大小写绕过
7.空格绕过
8.点(.)绕过
9.::$DATA绕过
10.点空格点(. .)绕过
11.双写绕过
12.%00截断
但是%00截断的条件是要满足以下几点: php 版本小于 5.3.4 php的magic_quotes_gpc为OFF状态 所以上传失败
13.0x00截断
1.这里将%00进行url decode,转换为空字符,进行截断(GET可以url自动转码的,但POST不会) 2.可以使用Hex进行截断,在p后面添加一个空字符(00),p的16进制是0x70 绕过失败是由于php版本的原因
14.文件幻数绕过
文件幻数
GIF (gif),文件头hex:47 49 46 38(也就是GIF89a)
JPEG (jpg),文件头hex:FF D8 FF
PNG (png),文件头hex:89 50 4E 47
利用文件包含漏洞 制作图片马 上传s.png 利用文件包含漏洞 上传s.jpg 利用文件包含漏洞
15.图片马绕过
解法同14关。
16.图片马绕过
前提:需要开启php_exif扩展,php版本>5.2.17 否则会出现以下情况
解法同14关。
|