白嫖金币之学习笔记CV大法

huangjw428   ·   发表于 2022-06-20 12:17:09   ·   学习杂记

听说社区发文章能得金币,而且好像随便发表文章也可以白嫖,我也来试试;
暂时没有什么可写的文章,但又不想水贴,那就复制我学习的一个笔记吧~~ 大佬请绕过

一、文件上传漏洞原理解析
文件上传本身是一个功能,不是漏洞,任意文件上传才是一个漏洞;
文件上传漏洞的利用条件:

  1. 文件需要能够上传;
  2. 上传后的文件需要能够解析;(上传后的文件能够被当作后端代码运行)
  3. 能够访问到上传的文件:i. 知道上传的路径;ii. 该路径下的文件能够被直接访问(默认情况下只有根目录里的文件才能被访问到。)

漏洞利用的突破口:需找文件上传点,有些网站没有明确可使用的上传功能,但存在上传代码、上传函数,一般需要代码审计才能够发现;

二、文件上传漏洞防护与绕过
文件上传漏洞防护方法:

  1. 文件类型检测
    1. 按检测所在位置(检测端)可分为:
      1. 客户端检测:在浏览器JS代码检测,很好绕过,检测有效性低;
      2. 服务端检测:在目标主机后端代码检测;
    2. 按检测规则分为:
      1. 黑名单检测:例如不允许.php、.asp、.aspx、.jsp文件上传;
      2. 白名单检测:例如只允许.txt、.jpg、.png文件上传;
    3. 按检测类型分为:
      1. 文件后缀检测,最常见检测方式,操作系统是基于文件后缀决定如何处理这个文件;
      2. Content-Type类型检测,一般随文件后缀生成,可以BP抓包修改;

文件上传漏洞防护机制绕过方法:

  1. 客户端检测机制绕过方法:
    • 前端页面上删除检测的JS代码;
    • 上传允许的文件类型,BP抓包后修改文件类型;
    • 在上传之前抓取上传页面回包,删除检测的JS代码;
  2. 服务端黑名单检测机制绕过方法:
    1. 后缀检测绕过:
      1. 过滤不严谨不全时,可使用其他同样能被当成相应代码执行的其他后缀,如:
        • php:phtml、php3、php4、php5都会被当作php代码执行;
        • jsp:jspx、jspf都会被当作jsp代码执行;
        • asp:asa、cer、aspx都会被当作asp代码执行;
        • exe:exee同样;
        • 但这些其他后缀的解析条件有一定的限制,主要还是靠试,试的OK说明可以被正常解析。
      2. 过滤后缀类型很全,没有遗漏时,可以使用分布式配置文件(文件存在的目的是针对不同的目录实现不同的策略,apache独有的分布式配置文件.htaccess,nginx也有自己独有的)进行绕过;分布式配置文件绕过用法示例如下:
        • AddType application/x-httpd-php .jpg #可将.jpg文件当作php文件执行,.jpg后缀类型可以任意修改
        • .htaccess文件是没有文件名的,只有后缀,上传到网站不同的目录下时,每个目录会分别单独按照该目录下的分布式配置文件的策略来执行;
        • Win7和早期的Win10版本没有办法命名没有名字的后缀文件,无法直接创建.htaccess,可以通过命令行来修改,如ren aaa.txt .htaccess,命令行限制较少。
    2. 大小写绕过:如禁用.php、.pHp后缀的,可以用.pHP后缀来实现绕过;Windows 的文件和文件夹都不区分大小写的,所以改成.pHP的后缀,Windows也会当作.php文件执行,而Linux区分大小写;所以大小写绕过前提目标站点服务端是Windows操作系统,判断操作系统的粗略方法:访问路径上将部分字符修改为对应的大写或小写,若还能正常访问,说明是Windows,否则Linux。
    3. 文件后缀(空)绕过:Windows 会自动去后缀末尾的空格,但检测机制会认为.php和.php空格 不是同一个后缀,进而绕过;因为Windows会自动消除后缀末尾的空格,想创建后缀末尾带有空格的文件名,需要借助BP抓包修改,实现绕过后,到后端的Windows机器上时,会自动再去除末尾空格,变成可执行的php文件。注:要在末尾加空格,不能在后缀中间加,Windows不会自动去除中间的空格,且该后缀文件也执行不了。
    4. 文件后缀(点)绕过:同文件后缀(空)绕过方法一样,只是将空格改为了点。
    5. 文件后缀(点)(空)混用绕过:同理。
    6. ::$DATA(Windows文件流绕过):因Windows的NTFS文件格式,1.txt和1.txt::$DATA是同一个东西,且Windows中文件名不能添加分号:,所以可以通过上传1.php,然后BP抓包修改为1.php::$DATA来实现绕过。
      1. Windows的NTFS文件格式可以允许寄生文件,即111.txt:a.txt,当echo 666 > 111.txt:a.txt时,数据保存在a.txt文件中,a.txt文件寄生在111.txt文件上,不显示在目录中;
      2. 查看111.txt被寄生文件,是没有保存数据的,可以用来存储密码,但当数据迁移时,寄生文件的数据不会迁移到新的存储介质上,这点需要注意;
      3. 被寄生的文件是显示占用0空间的,可通过cmd的dir /R查看寄生文件状态,notepad 111.txt:a.txt来查看寄生文件里的隐藏内容,直接notepad 111.txt是没内容的,notepad a.txt是不存在该文件的,寄生文件必须写一个整体111.txt:a.txt;
      4. 111.txt::$DATA=111.txt;111.txt:a.txt:$DATA=111.txt:a.txt。
    7. 构造文件后缀绕过:利用代码的逻辑,如获取文件后缀的方法用到strrchr()函数,获取最后一个点及之后的字符串;所以可以1.php. .,后台代码会先去除点,就变成1.php.空,然后再获取最后一个点及之后的东西.空,与后缀黑名单比较,都不符合达成绕过效果,然后再去除空格,剩下1.php.,此时Windows系统会自动去除末尾的点,变成1.php,实现成功绕过。
    8. 双写文件后缀绕过:此方法适用于过滤方法为把任何出现与黑名单匹配的字符串都替换为空的情况下,如 $file_name = str_ireplace($deny_ext,””, $file_name);可以用1.pphphp,此时将出现的php替换为空,就变成了1.php。此绕过方法的防御方法为:
      1. 循环检测,重复检测几次,再算双写绕过也会被完全过滤;
      2. 替换为其他非空字符,如下划线。
  3. 服务端白名单检测机制绕过方法:
    1. 00截断绕过:
      1. 00截断绕过的前提条件:
        1. php版本在5.3左右,高版本的php已经修复了00截断问题;
        2. 使用的上传函数允许使用00截断,如move_uploaded_file(),该函数的文件上传流程是:上传文件到缓存目录(temp),再将缓存文件中的内容复制到某某路径下的重命名后的某某文件中;
        3. 靶场中$img_path = $_GET[‘save_path’].”/“.rand(10, 99).date(“YmdHis”).”.”.$file_ext;是对文件以当前时间和随机数10~99的方式生成一个综合随机数,加上文件后缀,作为重命名后的文件,再将缓存目录下上传的文件的内容复制过来;
        4. 靶场此处因为随机数重命名,不能在文件名中加%00截断,此处可以在路径传参中加%00,即save_path=../uploads/1.php%00jsdhajkdhasjk.php,相当于../uploads/1.php;
      2. 00截断和%00截断的区别:
        1. 00截断和%00截断是同一个东西,都是终止符,只是%00需要URL解码后才能代表终止符;
        2. POST传参不会做URL解码,GET传参会,所以%00只用在GET传参中,才会被解析成终止符;
        3. POST传参不能直接写00截断,此处的00不是数字,而是十六进制00,可以写个熟悉的单字符,如a,然后在BP抓包的HEX中将a对应的十六进制数改为00,就是00截断了。
      3. 00截断绕过方法:
        1. GET传参:1.php%001.jpg;
        2. POST传参:1.phpa1.jpg,BP抓包,HEX修改a的61为00;
        3. 若上传的文件被重命名,不能直接在文件名中截断,要在其他传参点加上00截断,如上传路径的传参。
    2. 图片马绕过:
      1. 图片马用途:用于绕过上传条件,只能做到上传,不能够解析,解析需要结合解析漏洞(中间件代码出现了一些问题)、文件包含漏洞等;CGI解析漏洞,后面加/.php,再加传参;
      2. 图片马制作方法:利用Windows的cmd命令copy,格式:copy 1.jpg/b + 2.php 3.jpg #b为二进制使用,图片后面都要加,1.jpg和2.php文件结合,生成新的3.jpg文件;
      3. 使用小技巧:有些检测机制会检测头部是否是图片、尾部是否是图片,检测渲染是否有问题,此时可以生成图片马后,再次与图片结合,图+马+图,生成的最终图片,马被包含在中间,此时需要本地测试改成php后是否能够成功执行,再做利用;
      4. 注意事项:
        1. 图片马不能通过将图片用文本打开后,在末尾或头部写上一句话木马,这样子图片会损坏,打不开;虽然本地是可以利用的,但上传时会上传不了,很多检测机制会检测图片的完整性;
        2. 用来制作图片马的图片不能太大,几至几十kb最好,太大容易出问题导致上传失败,或有上传大小限制,若制作的图片马本地测试有问题,可以多换几张图片做尝试。
    3. 二次渲染防御手段的绕过:
      1. 二次渲染防御手段:图片上传后会进行二次渲染,此时图片中的马不论在哪个位置,都可能会因二次渲染而消失;
      2. 绕过方法:利用gif图做图片马,在特定的位置写入一句话木马(一般建议在HEX模式下查看的第四行尝试写入一句话木马),也可以上传一张gif图后下载下来,与原图进行HEX十六进制查看模式下的对比,看下哪几行是没有变化的,就可以在该位置尝试写入马。
    4. 条件竞争绕过:
      1. 条件竞争绕过原理:
        1. 上传文件的流程:先检测(检测合格,然后上传) or 先上传(上传后检测,不合格则删除)?
        2. 需要在上传流程是先上传后检测的情况下才可以利用;
      2. 条件竞争绕过的利用方法:
        1. 因为检测是需要时间的,在检测的空档期,若访问到了PHP文件就会执行;
        2. 利用二次生成的函数,<?php file_put_contents(“555.php”,‘一句话木马‘)?>,若PHP文件执行了,就会生成新的一句话木马文件,此时生成的新的php文件是不会再检测的,自然就不会删除了;此处一句话木马的代码要用单引号包含,不能用双引号,双引号会去解析传参的变量,导致出错;
        3. 可以利用BP同时分别跑大量的上传和请求包,上传的跑的线程可以设置得比访问的线程慢,消耗服务器资源,即CC攻击,有一定几率生成文件成功。

三、文件解析漏洞利用

  1. IIS解析漏洞
    1. IIS默认版本:IIS是Windows Server自带,2003的IIS版本是6.0,2008的是7.5,2012R2及之后的 版本更高;
    2. 不同的Web容器(中间件),默认支持不同的文件后缀执行:
      1. IIS => asp、aspx、php
      2. apache => php、jsp、jspx
      3. nginx => php、其他
      4. IIS的特性:在默认配置文件中,还配置了支持.asa、.cer、.cdx…..等很多其他后缀的文件当作asp来执行;
      5. aspx:.net,默认兼容asp,马也通用。
    3. IIS解析漏洞多种利用(存在于IIS 6.0版本中):
      1. 其他允许解析的后缀文件:上传属于.asa、.cer、.cdx等其他未受限制,但在IIS环境下又能默认当成asp文件执行的后缀的文件;如果前端做了限制,可以上传.jpg文件,BP抓包修改后缀;
      2. 截断绕过:IIS 6.0中分号属于终止符,利用分号截断,如 1.asp;.jpg;
      3. 解析逻辑绕过:1.asp/444.txt,444.txt里的一句话木马代码会被当作/前面的asp后缀文件来解析;真实环境中一般是要配合具有后台权限来利用,如后台能创建文件夹,创建一个如a.asp的文件夹后,将上传的.jpg文件移动到该文件夹下,结合IIS 6.0解析漏洞,马就会生效。
  2. CGI解析漏洞
    1. 漏洞是PHP特有的,PHP+Nginx,PHP+IIS 7.5的环境都可能有该漏洞,但存在的本质都是PHP;
    2. 漏洞利用方法:1.jpg/.php,此时1.jpg是访问的文件,/.php是解析的根据,1.jpg文件会被当作.php文件执行;
    3. 漏洞的判断方法:在网页上传或已存在的图片路径后面加上/.php,若图片从正常变成乱码了,说明存在漏洞。

写的不好,写的不对的地方,欢迎评论指出~

用户名金币积分时间理由
Track-子羽 10.00 0 2022-06-20 14:02:17 一个受益终生的帖子~~

打赏我,让我更有动力~

0 Reply   |  Until 13天前 | 143 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.