• 文件解析漏洞


    接上一篇文件上传漏洞
    (主要以apache+php环境为例 因为只用过这个组合

    0x00 概述,什么是文件解析漏洞

    从上一篇我们知道了如何绕过服务器的过滤,把不合法的文件上传到服务器上。但是现在还没有结束,上传的文件还没有被执行,没有实现它应有的功能。

    如果我们知道上传的文件放在哪里,就可以通过url请求这个脚本文件,同时如果服务器正好支持了PHP的解析,这样上传的文件将会通过apache激活PHP处理器,执行php代码。显而易见的是,apache应该至少支持一种脚本文件用以正常的网站访问,所以总会有脚本文件被解析执行,所以不能通过禁止解析所有种类的脚本文件来确保安全。

    但是由于文件在上传的时候进行了过滤且假设过滤成功,那么所有以.php结尾的脚本文件都无法上传,使得服务器内部的php文件全部来自网站,是可信的,可以正常解析执行。然而我们设法绕过了上传的检测,使得一些异形的php脚本文件上传到了服务器上,类似于.php .pht .phtml .php5 .php3 .php4 .php7 .pHp .PhP之类,同时服务器由于不安全的配置使得这些异形php文件可以被执行。

    这样一来,几个要素:上传的恶意脚本、脚本存放的位置、可以执行脚本的不安全配置,齐活,接下来使用一些菜刀类的webshell管理工具或者直接以浏览器打开url并以get/post方式发送命令就可以远程控制服务器。

    0x01 关于web服务器(以apache为例)

    web服务器用来处理客户端发来的请求。

    个人的理解是一个平台一样的应用程序,由系统赋予权限执行。

    在这个应用平台之上,有若干容器,apache的各个模块通过相应的配置文件,形成了web应用运行所必须的环境同时,apache也是由这些模块组织起来运行的,而配置文件由apache进行管理和解读。

    而在容器中,维护着若干树形的文件结构,组织成了web应用即动态网站

    当接到客户端发来的请求时,apache进行解析,若是请求一个静态文件,则直接返回给浏览器;而当请求一个动态页面譬如一个php脚本文件时,如果apache通过配置文件发现这个文件是可执行的,便将请求转发给php引擎,php引擎解析并执行了相应的脚本文件,形成了一个“临时的、动态生成的”HTML文件,交回给apache,apache再将其返回给浏览器渲染展示。而如果apache通过配置文件发现不允许执行php文件,便会认为它只是一个静态的文档,将会直接返回代码显示在浏览器上。

    以下为运行于kali上的apache,可以看到很多配置文件,看名字就知道作用。apache运作时,通过这些配置文件才能正确安全的运行,不安全的配置带来可能的漏洞。

    root@kali:~# cd /etc/apache2/
    root@kali:/etc/apache2# ls
    apache2.conf    conf-enabled  magic           mods-enabled  sites-available
    conf-available  envvars       mods-available  ports.conf    sites-enabled
    

    至于什么样的php脚本可以生成这类动态HTML文件,为什么可以生成HTML文件,这牵涉到cgi编程、中间件(?)和其他的一些东西,不做展开

    前方灵魂画手高能,非战斗人员迅速撤离

    image

    不同的web容器用于执行不同的网站后台文件。常见的有:IIS执行asp,apache、nginx执行php,tomcat执行Java等


    那么什么是IIS、apache、nginx、tomcat呢?

    以下来源于百度百科,反正没有人会看这些介绍,抄百度百科一点凑个字数(笑),也可以跳过介绍或者自行百度

    IIS:基于windows的互联网基本服务,包括ftp/ftps、nntp、HTTP/HTTPs、smtp等服务,其使用.net flameworks类库作为底层运行框架,ASP.NET作为开发工具

    apache:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中

    nginx:Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    tomcat:Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目。Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

    0x02 常用的web容器的解析漏洞

    • apache

    apache解析文件有一个原则,当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名为止,如果都不认识则暴露其源代码。

    例如:apache接到请求访问一个shell.php.aaa.bbb 文件。很明显,apache不认识.bbb扩展名,向前找到.aaa扩展名,也不认识,再向前找到.php扩展名,发现是php文件,便交给php解析器去执行。

    那么apache如何认识各种类型的扩展名呢?如下所示是apache的配置文件,有一个默认的配置文件,bbs.conf是我们另行添加的。内容很简单:指示apache碰到扩展名中含有php的,就把它当作php文件发给php解释器执行。作用之后会体现出来,暂且按下不表。

    root@kali:/etc/apache2/sites-enabled# ls
    000-default.conf bbs.conf
    root@kali:/etc/apache2/sites-enabled# cat bbs.conf
    AddHandler application/x-httpd-php .php

    /var/www/html(apache的默认网站文件存放目录)之下,手动添加一个1.php.aaa文件和一个正常的1.php文件,如下所示

    root@kali:/etc/apache2/sites-enabled# cd /var/www/html
    root@kali:/var/www/html# ls
    1.php    1.php.aaa   _create_admin_pwd.php  index.php    Model      readme_tech.txt  Template  View
    1.php.1  Controller  Engine                 LICENSE.txt  README.md  static           Upload
    root@kali:/var/www/html# 
    

    二者的内容均为

    root@kali:/var/www/html# cat 1.php
    <?php
    phpinfo();
    ?>
    root@kali:/var/www/html# cat 1.php.aaa
    <?php
    phpinfo();
    ?>
    
    //phpinfo();是一个简单的测试函数,用于输出php的一些配置
    

    使用浏览器访问1.php文件,看到正常解析执行,输出了php配置信息。
    image
    这个时候,apache进行的是正常的逻辑。

    但如果我们去访问1.php.aaa,会发现没有被执行
    image
    这个时候apache执行的逻辑中,确实把1.php.aaa发送给了php解释器去执行,但是php解释器拿到这个文件,也不认识扩展名,那咋办呢?那就只能发回原来的代码本身了。但是在我这里浏览器无法显示源代码,所以使用wget 127.0.0.1/1.php.aaa命令,访问服务器。

    root@kali:/var/www/html# wget 127.0.0.1/1.php.aaa
    --2018-12-25 05:57:53--  http://127.0.0.1/1.php.aaa
    正在连接 127.0.0.1:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:20
    正在保存至: “1.php.aaa.2”
    
    1.php.aaa.2               100%[=====================================>]      20  --.-KB/s  用时 0s      
    
    2018-12-25 05:57:53 (1.76 MB/s) - 已保存 “1.php.aaa.2” [20/20])
    
    root@kali:/var/www/html# cat 1.php.aaa.2
    <?php
    phpinfo();
    ?>
    

    可以看到服务器返回给我的是源代码。

    如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
    SetHandler application/x-httpd-php
    然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件

    • IIS6.0

    1、当建立*.asa、*.asp格式的文件夹时,其目录下的所有文件将被IIS当作asp文件解析
    2、当文件名为 *.asp;1.jpg 时,IIS6.0将以asp脚本执行
    3、//WebDav扩展协议漏洞

    • nginx

    访问http://www.xxxx.com/1.jpg/1.php,此时1.jpg将被当作PHP脚本来解析。这导致攻击者可以上传图片马,并在访问时url后加/xxx.php,就可以执行php脚本.

    • IIS7.0/nginx<8.03:

    传一个名字为wooyun.jpg,内容为');?>的文件,然后访问wooyun.jpg/x.php,在这个目录下就会生成一句话木马 shell.php

    • nginx<8.03

    影响版:0.5.,0.6, 0.7 <= 0.7.65, 0.8 <= 0.8.37 Nginx在图片中嵌入PHP代码然后通过访问 xxx.jpg%00.php 来执行其中的代码

    • windows

        test.asp.
        test.asp(空格)
      test.php:1.jpg
      test.php::$DATA
      shell.php::$DATA…….
    

    会被windows系统自动去掉不符合规则符号后面的内容。

    在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。

  • 相关阅读:
    DML
    DDL
    SQL的分类
    SQL语句的规范
    sql的演示
    运算符
    导入导出数据
    mysql的数据类型
    python+selenium2自动化---复用已有的浏览器
    python+selenium2自动化---通过js脚本给时间控件赋值
  • 原文地址:https://www.cnblogs.com/unknown404/p/10176272.html
Copyright © 2020-2023  润新知