00截断上传绕过_【每周一洞】文件上传

----先bb背景----


    记录下时间,2020年7月13日18:21,又是一个愉快的周一。一只刚下班的单身狗不想回家。

    作为刚接触渗透测试2年不到的小白,自学到现在也算是入门了。。吧。1b75fa94ca640fdb14582b49174058f3.png为什么没底气,是因为和大佬差距还是很明显。希望通过坚持写【每周一洞】专题,总结之前学习的内容,巩固知识,向大佬看齐!

----正文开始----


    先问一个问题,你觉得文件上传漏洞在OWASP TOP10中吗?3b5b57270060f2797458a2fa3ca1aba5.png

    以前没有好好学习理论知识,不过这次度娘告诉我,没有包含文件上传漏洞。不过仔细想了下,也确实,OWASP TOP10列表总结的是Web应用程序最可能、最常见、最危险的十大漏洞,结合安全行业所说的“进不来,拿不走,看不懂,改不了,跑不掉”,攻击者都进不来,也就谈不上文件上传了。但我决定总结这个漏洞,是因为“shell在手,天下我有”。

    文件上传,漏洞起因在于程序员(2年前的我)偷懒,没有对上传的文件内容、格式、类型进行校验,或仅做了前端校验导致的,攻击者可上传可执行脚本文件,肆意妄为。遇到这种程序员,攻击者也就乐呵呵了。

 总结下文件上传漏洞的大致利用方法(以PHP环境为例):

  • 绕过客户端校验

    • 绕过前端js脚本校验

  • 绕过服务端校验

    • 绕过文件后缀校验

      • 上传特殊的后缀

      • 上传.htaccess文件

      • 后缀大小写绕过

      • 点绕过

      • 空格绕过

      • ::$DATA绕过

      • 配合解析漏洞绕过

      • 双后缀名绕过

      • MIME类型绕过

      • %00截断

      • 0x0a截断

      • 0x00截断

    • 绕过文件内容校验

      • 绕过文件头检查

      • 绕过文件大小检查

      • 绕过文件内容类型检查

      • 二次渲染

    • 其它绕过方式

      • 条件竞争

   emmm也太多了吧,不过把这些文件上传绕过方法吃透了,也就成长了。来搭个环境吧,这里利用github开源项目upload-labs作为环境。

Github源码:

https://github.com/c0ny1/upload-labs

搭建步骤在作者项目里写的很清楚了,这里就不赘述了。

搭建好以后是这样滴:

e05517eb321c384e6116412f83f1f860.png

Pass-01:

漏洞点:仅在前端校验文件格式,通过抓包修改即可上传任意格式文件。

d4024159626d04c88102672ae39ce9c2.png

直接上传php格式,提示:

b5a7f2244b898c889261ef7597901c23.png

更换为jpg格式后,抓包修改:

c820ba0c003097ebedd02268005434e9.png

成功上传:

27d92e1592854b2b9247e713d7b6bce1.png

Pass-02:

漏洞点:仅校验MIME类型,修改MIME类型即可绕过。

91dcdbf576b9a9fbbf521598c20a6998.png

上传后,抓包修改MIME类型:

4d74ecce533b37144f6c5c3a810e6b44.png


修改为image/jpeg 后成功上传文件:

1c0e3974245fa5a115ad5345778e274c.png

Pass-03:

漏洞点:仅校验了部分文件类型后缀,通过其它可解析的可执行文件格式即可绕过,例如.php3

0a7c775698312e97691b08479dad29d4.png

抓包修改文件后缀:

880852769d7ae2f2e49f06f610420432.png

成功上传,并能执行:

129dc0ce5c15df1d2d4d6fec61d2282c.png

852f078d1fa2f4c88005c4909ee6e42f.png

Pass-04:

漏洞点:基于黑名单过滤,可利用重写.htaccess文件进行绕过

a871fa64bc2ecde3d417d540c7b56dd1.png

抓包,上传黑名单之外格式的文件jpg:

46b9f5a557c057b0f889db9ae18a45a3.png

同时,上传一个能把jpg格式当作php来执行的.htaccess文件,.htaccess内容为:

SetHandler application/x-httpd-php

上传成功:

b4a39479694f92504d7b258d2edf149d.png

尝试菜刀链接,成功读取文件:

1d583d019bec5e533257b3cff5fa5eca.png

Pass-05:

漏洞点:黑名单中有.access文件,但可通过PHP和windows的叠加特性,利用截断上传。

9f4e8ba627b2d07d184afe928e090b17.png

PHP+Windows环境会将以下符号正则匹配相等:

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

上传后抓包修改后缀:

79402abb58dabd0afcdaa4d7f89a57cb.png

成功上传,并解析为.php:

bc7afa1455d17858ad99300400e31e20.png

Pass-06:

漏洞点:基于黑名单识别,并过滤".",但未对其它特殊字符进行过滤,例如" "空格

7a402f66c5aa3cfcb91ee6e95be146ed.png

抓包后,修改后缀,增加空格进行绕过:

bf3220528b23bb71cb5be32392ab394b.png

成功上传并解析:

79566bbd540499c6436bcd3e9c86ac76.png

0948caca16341ee73b97025743993838.png

Pass-07:

漏洞点:查看源码,识别了点,但是没有删除,所以直接改包,加点绕过,这里就不操作了,可参考06

36343b15d11221120b7e70dccbc0072d.png

Pass-08:

漏洞点:删除了末尾的点,首尾去空,但是没有去除字符串::$DATA,利用此漏洞可绕过。

--》Windows文件流特性可将.php::$DATA 保存为.php

d4f9b6db0a7dca47f04e6d3f4d73eb2c.png

抓包修改后缀,并成功上传:

8011220bee2f47577e379f58ed534696.png

294853b880ea84c87885c282c3f413e9.png

Pass-09:

漏洞点:查看源码,会删除末尾的点,并去除::$DATA以及首尾空格,并基于黑名单过滤,这种情况可考虑Pass-06的加空格,加点号,直接构造可绕过的后缀。

2fd004eedb445751a85b206587cf4891.png

此种类型不再赘述,都是根据代码进行绕过的。

Pass-10:

漏洞点:代码会替换黑名单字符,这种时候可进行双写的方式绕过,例如:利用phphpp,当代码过滤php后会被解析成phpfb45a26ee8bb5cdcf52cbc32d234a7e9.png

a9c39ea2bdffce743bf26670e8133bec.png

抓包修改后成功上传文件:

7b695c3a254618f245926c7dfe4b2cc4.png

eccccc2a45425c4b2bcc039fdb8f8bf4.png

Pass-11:

漏洞点:上传的路径可控,利用00截断,可直接绕过文件类型校验

PS:php5.3.4以上版本此漏洞已经被修复

905fb30ec7aea79172dfff1fb172651d.png

抓包修改,并成功上传文件:

34357c38f20a5041384e292111659a60.png

723d11181c2d0b144199c0830acd08c7.png

Pass-12:

漏洞点:与11一样,但是可以通过另一种方式绕过,即0x00截断

284c722e154e805e4585e0dddd0290fd.png

抓包修改,在后缀处利用0x00截断实现绕过。(修改后缀处16进制为0x00)

f2c120ba148d4e07076fa688efaff752.png

成功上传:

63005d555f7cb008241103c6e183b588.png

Pass-13:

漏洞点:校验了图片16进制文件头,抓包后增加16进制图片格式文件头即可绕过

195f597581f375801d2dd7d7e35a2b61.png

法一:直接在包中增加图片文件头

6a3c09aedfbf9b05036cf00538f594b7.png

法二:修改16进制,增加图片类型文件头

313aa8c3e32fd1cad181abc00c02bcaf.png

改为:

2ba737aa20f69a975adf918abb4b5cc5.png

上传后效果和法一一样。

成功上传文件:

402cbeb04a2cfc7a65cedd452fa76621.png

Pass-14:

漏洞点:代码中利用getimagesize来检查是否为图片文件,获取图片图像大小信息,成功获取后会返回一个数组,失败则返回FALSE并产生一条E_WARNING级别的错误信息。

通过构造图片马可以绕过此种类型的校验。

be92f9500ea35103f1d354d1bc1882bc.png

图片马构造命令:

copy 1.jpg /b + 1.php  2.jpg#参数/b指定以二进制格式复制、合并文件; 用于图像类/声音类文件 #意思是将1.jpg以二进制与1.php合并成2.jpg  2.jpg就是图片马 

cf29df44d5041af52be783825008e98c.png

可看到图片马的16进制数据,末尾为木马数据:

fdd579a945a1c1819607dd576432ae30.png

Pass-15:

漏洞点:与Pass-14相似,利用exif_imagetype函数对图片类型进行校验,同样可以通过上传图片马的方式进行绕过。

828a9fbae66503e47e864073e9698fa2.png

Pass-16:

漏洞点:查看代码,本关综合判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片并且会对上传的图片进行二次渲染,即会生成新图片,然后删除用户上传的图片

a55083fda59f63a2f50e7f7a697f1218.png

修改php文件后缀为图片后缀,修改Centent-type为图片格式,增加图片头字节即可绕过:

8ff1d79ab2dda27bd8e74c9b5dfd6dc6.png

成功上传:

ff15e90947f5ef16fd7f508a827ae228.png

Pass-17:

漏洞点:代码审计后看到,rename函数会删除上传的php文件,那么我们可以想到,如果利用条件竞争的方式,在删除文件的间隙去请求文件是否能够实现绕过?

只要我够快,你就抓不到我?嘿嘿嘿6924d34f6a1556147b7706a794d72dfc.png

f61b3141b30a8e14b9fb2ec085f74131.png

利用burp不断发送上传文件的请求:

2dc4919af5a047e2c9a897b718467a18.png

dd247a94b75fc2391927c038f35839e7.png

成功实现条件竞争!看来你还追不上我~条件竞争后连接,显示404:

94b2d879b053808767b6a46bb8d2824e.png

Pass-18:

漏洞点:通过代码审计看到,对后缀做了白名单,检查了文件大小、文件是否存在,并将上传的文件重命名,但是仍然存在条件竞争漏洞。利用重复发包,能够成功绕过。

代码仅列举一部分,不过多展示了。

5d6ec4405961e9828ba9a94e7c7925b3.png

Pass-19:

漏洞点:CVE-2015-2348。

可以看到代码中有明显的“move_uploaded_file”函数,此函数就是CVE-2015-2348漏洞的特征,可使用00截断绕过。

7ca088761f0c643b784459c0d908e55e.png

即在save_name利用00截断或"."绕过:

d68c04a20504fc2507876a7580e54c3c.png

26e02bc8e498aaaeadd19374600b8196.png

成功上传文件:

1777c6314039675b58224001797a88b1.png

----结束咯----


写完了,以上对经典的文件上传漏洞进行了复现,枚举了多种情况的文件上传漏洞,在实际操作过程中,还是要一个一个试,通过反馈和响应来判断该用什么方法去绕过,毕竟魔高一尺道高一丈!

下班下班,回家吃饭。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值