1.原理
使用上传功能时,没有对上传文件进行严格检测,导致***者上传可以执行的恶意脚本
2.危害
上传webshell,被获取服务器权限
3.判断和可能出现位置
a.判断
能否上传,能否找到路径,能否执行
b.可能出现位置
任何上传点,数据库备份,编辑模板。
4.基础利用
上传文件,找到上传路径,想办法执行脚本
5.bypass
- a.文件头检测---使用图片马,用copy命令将图片和小马拼接起来上传。
copy 1.gif/b + shell1.php/a shell2.php
- b.客户端js检测---禁用js或者上传.jpg文件,在burp中改为php。
- c.黑名单检测---使用未被检测的后缀名,比如Asp,Aspx,asa,phtml等
- d.MIME类型检测---在burp中修改请求头中的Content-type为image/jpg
- e.利用00截断---上传1.php+jpg 在burp中把+改为00(要求php版本小于5.2)
- f.利用解析漏洞:
iis6.0解析漏洞---1.asp;xx.jpg
ii7.0/7.5解析漏洞/Nginx解析漏洞---www.wenjian.com/test.jpg/noexist.php(test.jpg中放php代码,noexist.php可以不存在)
Apache文件解析漏洞---上传webshell.php.aa.bb(Apache遇到不认识的扩展名,会从后面向前解析,可以用来绕过黑名单) - g.内容检测---使用无数字字符的shell,利用逗号代替分号,利用=代替php
- h.二次渲染绕过---上传图片会被进行渲染,将图片下载观测被渲染部分,将一句话放在没有被修改的部分。
- i.配合文件包含利用
- j.htaccsess上传
上传.htaccess文件,上传shell文件,服务器就会将shell文件以php形式解析<FilesMatch "shell"> #shell为文件名 SetHandler application/x-httpd-php </FilesMatch>
利用htaccess可以启动cgi,执行bash脚本,上传.htaccess和solve.sh文件
.htaccessOptions +ExecCGI AddHandler cgi-script .sh
solve.sh
#!/bin/bash echo "Content-Type: text/plain" cat /flag exit 0
6.防御
对上传路径进行验证,对上传文件进行随机重命名,上传路径禁止执行权限。