文件上传

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文件
.htaccess

Options +ExecCGI
AddHandler cgi-script .sh

solve.sh

#!/bin/bash
echo "Content-Type: text/plain"
cat /flag
exit 0

6.防御

对上传路径进行验证,对上传文件进行随机重命名,上传路径禁止执行权限。