理解:
通过上传带有危害的文件(某些脚本以拿到webshell )一般都会对文件有限制,但可以利用各种漏洞
防御机制
客户端(js代码
只要利用burpsuite抓包改包即可绕过,或禁用修改相关js代码
客户端只是为了防止用户输入错误,极容易被绕过,所以一般服务器端验证才是真正的验证
- 文件扩展名验证
黑名单为定义不允许上传的内容,较白名单更易绕过
白名单为定义允许上传的内容,较黑名单会安全一点
但两者皆可以利用容器解析漏洞绕过
MIME验证:
MIME用于设定某种扩展名文件的打开方式
同样可以利用burpsuite抓包改 Content-Type 来绕过
目录验证
?不懂
- 文件上传后会放入指定目录中,利用HTML代码中有一个隐藏标签
<input type="hidden" name="" value="">//是文件上传的默认文件夹
我们利用firebug修改value=" .asp"即可建立畸形文件夹
- 利用非正常文件命名
如 .aaspsp绕过验证
容器解析漏洞
如:
- llS解析漏洞:当建立 .asa .asp为后缀的文件夹时其目录下的任意文件都可以被当成asp文件来解析,这样我们就可以上传带有危险的代码被当作asp解析执行。
当文件为 .asp;1.jpg 时,llS6.0同样会以ASP脚本执行- Apeche解析漏洞:其解析文件顺序为从后往前,直到遇到认识的扩展名为止(如上传1.asp.rar rar不认识,则会解析asp脚本
- Nginx解析漏洞:若在上传的图片地址后加/ .php ,则改图片会被当成php解析(图片木马)
4.windows:如果文件名以 . 或空格结尾,系统会自动去除空格
严格的上传:
1.对文件扩展名及MIME验证
2.对文件进行重命名
??? 3.对路径进行验证
做题:
简单的
可以发现,没有对文件进行验证,我们直接上传一段php代码
会返回地址,用 …/…/文件地址 即可访问到
. 中等难度
会限制文件格式,只要抓包改一下content-type即可
- 将conten-type改为题目中要求的
- 放包即可发现文件成功上传
- 访问文件的相对位置
高等级
需要和文件包含漏洞相结合,以及PHP伪协议(file
结果如下:
tip:
如Python、ASP、PHP、CGI、JSP等,都是脚本语言。
. 辅助工具:
burp suite
. 一句话木马:
PHP: <?php @eval($_POST['密码']);?>
<?fputs(fopen("shell.php","w"),'<?php @eval($_POST[zt]);?>')?>
ASP: <%eval request("密码") %>