专栏首页渗透云笔记文件包含漏洞与文件包含Bypass漏洞基础

文件包含漏洞与文件包含Bypass漏洞基础

作者;小仙人

介绍;安全武器库运营团队成员

作者:小仙人

1

0x01 什么是文件包含漏洞

服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。

2

0x02 漏洞产生的根本原因

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件(即恶意文件) 。

3

0x03 是不是只有PHP才有文件包含漏洞

很显然不是,只是文件包含漏洞比较常出现在PHP当中,而且文件包含漏洞在PHP Web Application中居多。几乎所有脚本语言都会提供文件包含的功能,只是在JSP、ASP、ASP.NET程序中却非常少见,甚至没有,这就是语言设计中的弊端。

4

0x04 文件包含漏洞的类型

本地文件包含漏洞(LFI)

网站服务器本身存在恶意文件,然后利用本地文件包含使用。

利用条件:

(1)allow_url_fopen=On

(2)用户可以动态控制变量

远程文件包含漏洞(RFI)

调用其他网站的恶意文件进行打开。

利用条件:

(1)allow_url_include=On&&allow_url_fopen=On(两个选项同时开启)

(2)用户可以动态控制变量

注1:通常我们在Web中是无法知道allow_url_fopen、allow_url_include的,除非有phpinfo。通常本地包含都是开着的,因为它是默认开启的,而且很少人会改它。通常远程包含会被关掉,但是这说不准。

注2:从PHP 5.2开始allow_url_include就默认为Off的,而allow_url_fopen一直默认都是On的。通常开发人员没特殊情况也不会打开,所以说远程包含漏洞出现的概率很低,但是不代表没有。

5

0x05 常见的文件包含函数(白盒测试的时候需要用到)

PHP:Include()、Require()、Include_once()、Require_once()

ASP:include file()、include virtual()

JSP/Servlet:ava.io.file()、java.io.filereader()

注1:当白盒测试的时候,就可以对代码进行全局搜索,看是否用以上函数,若存在以上函数,那么判定可能存在文件包含漏洞,接着进一步测试。

注2:通常开发人员会比较少用带once的那两个函数,因为它会消耗更多的资源去做检测的工作。

注3:我特意问了一下PHP开发的同事,询问他们以上函数哪些函数用得最多,最后得到统一回复:没有所谓的用得最多,只有根据项目情景使用。

6

0x06 如何挖掘文件包含漏洞

从URL上观察关键词page、filename、file、path、dir等等,与文件相关的字眼/关键词,都可能存在文件包含漏洞。当然看过我目录遍历漏洞总结的文章也知道,这里的关键字眼可能会非常类似,甚至可以说一样。所以在挖掘方法上,手法类同。

7

0x07 如何利用文件包含漏洞

(1) PHP伪协议

php://input(接收POST过来的值)

利用条件:

A. allow_url_include=On

B. allow_url_fopen=On

C. PHP版本小于5.3.0

利用姿势:

php://filter

利用条件:

allow_url_fopen=On、allow_url_include不做要求

利用姿势:

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

通过指定末尾的文件,可以读取经base64加密后的文件源码。届时在base64解码即可读取敏感文件。(不能直接获取shell,危害性一般,但是能读取敏感文件,从某个角度上说,危害还是挺大的。)

• phar://

利用条件:

PHP版本大于等于5.3.0

利用姿势:

将内容为一句话木马的1.txt压缩成1.zip,然后指定绝对路径,如下:

index.php?file=phar://D:phpstudyPHPTutorialWWW.zip.txt //绝对路径

index.php?file=phar://1.zip/1.txt //这里1.zip就和index.php同目录下

zip://

利用条件:PHP版本大于等于5.3.0

利用姿势:

index.php?file=zip://D:phpstudyPHPTutorialWWW.zip%231.txt

:使用zip伪协议的方法与phar大致相同,但是zip伪协议不能使用相对路径,否则会包含失败。而且这里要将#编码为%23。

data:URL schema

利用条件:

A. PHP版本大于等于5.2

B. allow_url_fopen=On

C. allow_url_include=On

利用姿势:

index.php?file=data:text/plain,<?php phpinfo();?>

index.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b:加号+的URL编码为%2b,这里利用base64解码,常用于绕过。原本这一点我这里不太想写的,因为利用条件严苛,能满足这个条件那还不如直接利用远程文件包含漏洞。但是,这个有利于绕WAF,所以还是拿出来描述。

(2) 包含上传文件

利用条件:

上传文件的绝对路径以及文件名称

:利用姿势这里没法提,要提的话,又能出一文章了。有时候文件上传遇到白名单检测,那么我们上次的图片马又无法配合解析漏洞,恰好这时候又有文件包含漏洞的话,那么就能利用组合拳getshell了。

:以上列出的两大点是文件包含常用姿势,其它很少用的我就不一一列出,因为本文也是自己的学习总结,我觉得像包含session、包含日志、包含environ等等这些姿势很少用到,所以这里不描述,但是我是有印象的,当我以后用到的时候,再回头仔细研究,否则现在学了一遍,很久没用过也是会忘记。

如果想全面了解,这里推荐看前辈总结的几篇文章

https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/

https://www.freebuf.com/articles/web/182280.html

8

0x08 漏洞造成的危害

1. 严重的能写入恶意文件从而Getshell

2. 任意读取文件导致的敏感信息泄露

注:该漏洞本身的危害程度有限,但是如果配合起文件上传,其危害程度巨大。

9

0x09 如何防范此漏洞

1. 对文件进行严格的权限管理;

2. 过滤危险字符,如../、~/等;

3. 通过白名单策略,只允许包含运行指定的文件。(本人觉得此方式最妥当)如下:

这一串代码就写死了当变量file不等于include.php的时候,就会输出错误提示,文件未被发现。这种方式在我看来基本能够杜绝此漏洞出现,当然不排除是我水平不够找不到方法的原因。

phar://和zip://的区别:

phar://

可以查找指定压缩包内的文件,可传绝对路径,也可传相对路径。

zip://

用法与phar类似,不过有两点要注意,只能传入绝对路径,要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23。

PS:以上是我在学习和实践后的总结,纯属个人看法,若有不足之处,欢迎各位在评论区中指出。

常见的绕过思路:

有限制的本地文件包含绕过

(指定了后缀)

1

0x01 %00截断

前提条件:

PHP < 5.3.4、magic_quotes_gpc=Off

利用姿势:

?Path=../../../../etc/passwd%00

2

0x02 路径长度截断

前提条件:PHP<5.2.8

利用姿势:

?File=flag.txt/./././././././././././././././././././

:在Linux下4096字节时会达到最大值,在Windows下256字节时会达到最大值。只要不断重复./ 。

3

0x03 点号截断

前提条件:

PHP<5.2.8,只适用于Windows操作系统

利用姿势:

?File=flag.txt...............................................................

以上利用姿势,基本在PHP 5.3版本之后都失效了。在版本之后有什么截断方法吗?这里我看到前辈的一篇文章,介绍一种伪截断的方式来实现文件截断的。

注:以下思路摘自

https://www.jianshu.com/p/fb054a6fd851

有限制的远程文件包含绕过

(指定了后缀)

4

0x04 问号截断

前提条件:

未知,PHP>5.3的都可以尝试。

利用姿势:

?File=http://localhost/phpinfo.txt?

:其原理是WebServer?后面的内容当作请求的参数,而phpinfo.txt不在WebServer里面解析,从而使用问号来实现伪截断。

5

0x05 #号绕过

前提条件:

未知,PHP>5.3的都可以尝试。

利用姿势:

?File=http://localhost/phpinfo.txt#

6

0x06 空格绕过

前提条件:

未知,PHP>5.3的都可以尝试。

利用姿势:

?File=http://localhost/phpinfo.txt%20

7

0x07 利用伪协议绕过

前提条件:无

利用姿势:

?File=

zip://D:phpstudyWWWileincludechybeta.zip%23chybeta

这里要事先将phpinfo压缩好噢!不懂的可以看基础篇。

注:图片及思路摘自

https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/

绕WAF的奇淫技巧

绕WAF的姿势各种各样,我在这里也没法和大家说出一个详细方案,毕竟在绕WAF的道路上,通常都需要自己记录观察WAF的过滤规则,以下只是自己的一些心得。

相信各位师傅们在挖掘文件包含漏洞时会遇到WAF过滤../、~/、read、以及一些特殊符号等等,像单引、双引、#号等等。不仅仅是在挖掘文件包含漏洞才遇到,挖注入、XSS、RCE等等,相信都会遇到过吧。每一个厂商的WAF的过滤规则都不一样,具体还是要通过观察得出。

0x01 ../和..绕过

利用URL编码:如%2e%2e%2f / %2e%2e%5c、..%2f / ..%5c等等

利用二次编码:在一次URL编码基础上再进行编码

如:%252e%252e%252f / %252e%252e%255c

0x02 贪婪包含

场景:index.php?img=1.jpg

前提条件:未知

利用姿势:

Index.php?=img=php://filter/resource=../flag.php|jpg

(此利用姿势出自某CTF的题目)

0x03 通配符绕过

这里关于通配符绕过的姿势未知,我也查阅了一些文章,但是总结不到什么骚姿势出来,待定着吧。若是师傅们知道的,多多指导。

0x04 Base64编码绕过

利用姿势:

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

0x05 使用data伪协议读取文件

前提条件:allow_url_include=On

利用姿势:

file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

知识总结

1. 能利用00截断的场景有限,根据情况尝试使用。

2. 使用PHP伪协议对于绕WAF的效果更好。

3. 大多数文件包含漏洞都是需要截断的。

4. PHP 5.3版本之后全面修复了%00截断的问题。

5. 在URL中使用问号(?)、井号(#)可能会影响include包含的结果。

6. 总之有事没事就使用%00截断试试看吧,嘻嘻。

参考资料:

https://www.freebuf.com/articles/web/182280.html

https://www.cnblogs.com/xiaozi/p/7793857.html

https://bbs.ichunqiu.com/thread-28688-1-1.html?from=sec

https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/

http://mang0.me/archis/844a29d4/

https://wizardforcel.gitbooks.io/mst-sec-lecture-notes/%E6%BC%8F%E6%B4%9E%E7%AF%87%20%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB.html

以上是我在学习和实践后的总结,纯属个人看法,若有不足之处,欢迎各位在评论区中指出。

PS:这里推荐一款LFISuite全自动扫描本地包含漏洞:

https://github.com/D35m0nd142/LFISuite

本文分享自微信公众号 - 渗透云笔记(shentouyun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 后渗透之权限维护 整理

    可以看一下对比,创建test用户,net user查看用户是可以看见的,而admin$,因为加了个$符号,用net user命令是看不见的。

    天钧
  • 网络安全自学篇(五)| IDA Pro反汇编工具初识及逆向工程解密实战

    介绍;自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真...

    天钧
  • 慕课网三小时入门php笔记

    自己深知自己的底子不好,十分的懒惰,所以打算5个小时入门PHP来弥补基础,因为入行较早,所以知道怎么去学,怎么才能让自己的记忆深刻。

    天钧
  • 老电脑如果从windows7升级到windows10不断重启进不了系统,还是想用windows10,怎么办?

    先说一下我的配置:08年的acer aspire 5520g,很老的电脑,除了内存加到4g,其他都不变。官方只支持到windows7,并且官方说明该型号不在官方...

    williamwong
  • Kali Linux Web渗透测试手册(第二版) - 6.1

    thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

    用户1631416
  • Kali Linux Web渗透测试手册(第二版) - 6.1 - 寻找文件包含漏洞

    thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

    7089bAt@PowerLi
  • 文件包含漏洞原理利用方式及修复

    文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所...

    cn0sec
  • ts的九大数据类型,记录一下

    用户7413032
  • 用Python做一只真·多足机器人,钢铁蜈蚣能弯曲还能蠕动

    足式机器人是如今机器人设计的热点,相较于轮式和履带式机器人,足式设计的优势在于其极强的地形通过能力。

    大数据文摘
  • 用Python做一只真·多足机器人,钢铁蜈蚣能弯曲还能蠕动

    足式机器人是如今机器人设计的热点,相较于轮式和履带式机器人,足式设计的优势在于其极强的地形通过能力。

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券