Bootstrap

关于 文件读取+文件上传+文件包含 的介绍

  • 一、文件读取

  • 考虑读取可能有敏感信息的文件
    • 用户目录下的敏感文件

      • .bash_history
      • .zsh_history
      • .profile
      • .bashrc
      • .gitconfig
      • .viminfo
      • passwd
    • 应用的配置文件

      • /etc/apache2/apache2.conf
      • /etc/nginx/nginx.conf
    • 应用的日志文件

      • /var/log/apache2/access.log
      • /var/log/nginx/access.log
    • 站点目录下的敏感文件

      • .svn/entries
      • .git/HEAD
      • WEB-INF/web.xml
      • .htaccess
    • 特殊的备份文件

      • .swp
      • .swo
      • .bak
      • index.php~
    • Python的Cache

      • pycache_init_.cpython-35.pyc
  • =================================================================
  • 二、文件上传

    • 1、文件类型检测绕过

      • 1.1、更改请求绕过

        • 有的站点仅仅在前端检测了文件类型,这种类型的检测可以直接修改网络请求绕过。
        • 同样的,有的站点在后端仅检查了HTTP Header中的信息,比如 Content-Type 等,这种检查同样可以通过修改网络请求绕过。
      • 1.2、Magic检测绕过

        • 有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。
        • 常见的文件类型的头字节如下表所示
      • 1.3、后缀绕过

        • 部分服务仅根据后缀、上传时的信息或Magic Header来判断文件类型,此时可以绕过。
        • php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。
        • jsp引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀,asp支持 asa/ asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。
        • 除了这些绕过,其他的后缀同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com / bat / pl / cfc / cfm / ini 等
      • 1.4、系统命名绕过

        • 在Windows系统中,上传 index.php. 会重命名为 . ,可以绕过后缀检查。也可尝试 index.php%20 , index.php:1.jpg index.php::$DATA 等。
        • 在Linux系统中,可以尝试上传名为 index.php/. 或 ./aa/../index.php/. 的文件。
      • 1.5、 .user.ini

        • 在php执行的过程中,除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在web 根目录之外,则只扫描该目录。
        • .user.ini 中可以定义除了PHP_INI_SYSTEM以外的模式的选项,故可以使用 .user.ini 加上非php后缀的文件构造一个shell,比如 auto_prepend_file=01.gif 。
      • 1.6、 WAF绕过

        • 有的waf在编写过程中考虑到性能原因,只处理一部分数据,这时可以通过加入大量垃圾数据来绕过其处理函数。另外,Waf和Web系统对 boundary 的处理不一致,可以使用错误的 boundary 来完成绕过。(在HTTP协议中,Boundary是一种用于分隔多个实体(如文件、表单字段等)的标识符。它通常用于 multipart/form-data 类型的请求中,用于将多个部分组合在一起,并指示它们的边界。)
      • 1.7、 竞争上传绕过

        • 有的服务器采用了先保存,再删除不合法文件的方式,在这种服务器中,可以反复上传一个会生成Web Shell的文件并尝试访问,多次之后即可获得Shell。
    • 2、攻击技巧

      • 2.1、Apache重写GetShell

        • Apache可根据是否允许重定向考虑上传.htaccess
        • 内容为
          • AddType application/x-httpd-php .png
          • php_flag engine 1
          • 就可以用png或者其他后缀的文件做php脚本了
      • 2.2、软链接任意读文件

        • 上传的压缩包文件会被解压的文件时,可以考虑上传含符号链接的文件,若服务器没有做好防护,可实现任意文件读取的效果
    • 3、防护技巧

      • 使用白名单限制上传文件的类型
      • 使用更严格的文件类型检查方式
      • 限制Web Server对上传文件夹的解析
  • 参考链接
  • =====================================================================
  • 三、文件包含

  • 1、基础

    • 常见的文件包含漏洞的形式为          <?php include("inc/" . $_GET['file']); ?>
    • 考虑常用的几种包含方式为
      • 同目录包含 file=.htaccess
      • 目录遍历 ?file=../../../../../../../../../var/lib/locate.db
      • 日志注入 ?file=../../../../../../../../../var/log/apache/error.log
      • 利用 /proc/self/environ
    • 其中日志可以使用SSH日志或者Web日志等多种日志来源测试
  • 2、绕过技巧

    • 常见的应用在文件包含之前,可能会调用函数对其进行判断,一般有如下几种绕过方式
    • 2.1、URL编码绕过
      • 如果WAF中是字符串匹配,可以使用url多次编码的方式可以绕过
    • 2.2、特殊字符绕过
      • 某些情况下,读文件支持使用Shell通配符,如 ? * 等
      • url中 使用 ? # 可能会影响include包含的结果
      • 某些情况下,unicode编码不同但是字形相近的字符有同一个效果
    • 2.3、%00阶段
      • 几乎是最常用的方法,条件是magic_quotes_gpc打开,而且php版本小于5.3.4。
    • 2.4、长度截断
      • Windows上的文件名长度和文件路径有关。具体关系为:从根目录计算,文件路径长度最长为259个bytes。
      • msdn定义 #define MAX_PATH 260 ,其中第260个字符为字符串结尾的 \0 ,而linux可以用getconf来判断文件名长度限制和文件路径长度限制。
      • 获取最长文件路径长度:getconf PATH_MAX /root 得到4096获取最长文件名:getconf NAME_MAX /root得到255
      • 那么在长度有限的时候,././././ (n个) 的形式就可以通过这个把路径爆掉
      • 在php代码包含中,这种绕过方式要求php版本 < php 5.2.8
    • 2.5、伪协议绕过
      • PHP input: 把payload放在POST参数中作为包含的文件,要求 allow_url_include=On ,
        • payload为 ?file=php://input 的形式
      • Base64: 使用Base64伪协议读取文件,
        • payload为 ?file=php://filter/convert.base64-encode/resource=index.php 的形式
      • data: 使用data伪协议读取文件,
        • payload为 ?file=data://text/plain;base64,SSBsb3ZlIFBIUAo= 的形式,要求 allow_url_include=On
  • 参考链接
;