1,文件上传漏洞原理

eval()将括号中的数据按代码进行执行
<?php @eval($_POST['test']);?>

2,Webshell介绍

  1. 一句话木马
    • 代码短
    • 场景多,可以单独生成文件,也可以插入到图片中
    • 安全性高,隐匿性强,可变形免杀
  2. 小马
    • 体积小,功能少
    • 只有文件上传功能
  3. 大马
    • 体积大,功能全
    • 能够管理数据库,文件管理,对站点进行快速的信息收集,甚至能够提权

3,网站控制工具

4,文件上传漏洞危害

文件上传漏洞:指用户上传了一个可执行的脚本文件,而且通过这个脚本获得了执行服务器端命令的能力。

危害:

  1. 挂黑链
  2. 挖矿
  3. 敏感文件泄露

5,靶场安装

6,绕过所用到的知识点

MIME用法
客户端使用:

  1. GET请求不需要这个字段。
  2. POST请求头,放在Content Type字段用来指定上传文件类型,方便服务器解析。放在Accept,告诉服务端允许接收的响应类型。比如只能接收json或者其他。

服务端使用:

  1. 放在响应头里面,Content Type告诉客户端响应的数据类型,方便客户端解析。

常见类型:text/html,application/json,multipart/form-data,image/jpeg

等价扩展名 要在apache配置文件中加入AddType application/x-httpd-php .php .phtml .php3

  • asp = asa,cer,cdx
  • aspx = ashx,asmx,ascx
  • php = php2,php3,php4,php5,phps,phtml
  • jsp = jspx,jspf

Hypertext Access(超文本入口)

  • .htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
  • 通过.htaccess文件,可以实现:网页301重定向,自定义404错误页面,改变文件扩展名,允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

Content-Dispostion

  • 常规的HTTP应答中,Content-Dispostion响应头指示回复的内容该以何种形式展示,是以内联形式(为网页的一部分),还是以附件的形式下载并保存到本地。
  • 各个子部分在Content-Type中定义的分隔符分隔。用在消息体自身则无实际意义。
  • 放在请求中,作用为传输文件名

文件名截断
作用:扫描到截断字符就停止解析。后面所有内容全部无视。

  • 截断字符:chr(0),类似C++的“\0”
  • url encode:%00、ASCⅡ value:0

文件头
文件头的内容会标识该文件类型:

  • png:89 50 4E 47 0D 0A 1A 0A
  • jpg: FF D8
  • gif: 47 49 46 38 39|37 61 ——即为GIF89(7)a
  • bmp: 42 4D
  • java:ca fe ba be

图片+代码生成图片马

  • windows copy 图片 /b + 代码文件 /a 生成的代码图片
  • linux cat 图片 代码 > 生成的代码图片

搭配文件包含漏洞进行getshell操作

  • include.php?file=

条件竞争
程序(保存文件在本地并对其进行校验)执行代码的过程中,趁着保存的文件还在服务器本地而没被服务器检测删除的空隙即时访问,实现攻击目的。

  • <?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>
  • 通过inturder模块不停的向服务器进行文件上传,利用服务器在判断的时间访问上传的文件(上述代码作用:执行后在文件目录下生成一个木马),之后再用工具访问生成的木马。

move_uploaded_file()
函数接受以“/./”结尾的命名存储方式,想方法通过文件结尾加"/.“,”./"进行绕过验证,将木马上传至服务器

7,漏洞发现与利用

利用流程:

  1. 找到上传的位置
  2. 尝试绕过校验,上传文件
    • 绕过方式:
      • 删除/禁用JS
      • 修改MIME
      • 等价扩展名
      • 大小写
      • htaccess(apache解析漏洞)
      • 双写
      • 加空格
      • 加点
      • ::$DATA
      • %00、0x00截断
      • 图片马
      • 条件竞争(时间差)
      • move_uploaded_file()忽略文件结尾的’/.’
  3. 获得文件位置
    • 如何获取文件路径:
      • 开源CMS进行代码审计
      • 做一个文件变动监视器
  4. 蚁间连接,管理文件
    • 文件包含
    • .htaccess
    • 如果文件没有执行权限或重新编码后:
      • 无

思路:

  • Redis KV 持久化+未授权访问的漏洞
  • MySQL读写 select into file …
  • CMS 小马(shell)

8,漏洞防御

文件上传漏洞发生的前提

  1. 网站上传功能能正常使用
  2. 文件类型允许上传
  3. 上传路径可以确定
  4. 文件可以被访问,可以被执行或被包含

据此进行防御:

  • 扩展名黑白名单校验
  • MIME类型校验(image/gif)
  • 文件内容头校验
  • 对文件内容进行二次渲染
  • 对上传的文件重命名,不易被猜测
  • 不要暴露上传文件的位置
  • 禁用上传文件的执行权限
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐