Web安全漏洞分析—文件包含

在当今数字化时代,随着Web应用程序的广泛应用,网络安全问题愈加凸显。其中,文件包含漏洞作为一种常见但危险的安全隐患,为恶意攻击者提供了可乘之机。在这篇博客中,我们将深入探讨文件包含漏洞的本质、攻击手法以及应对策略。

文件包含漏洞通常发生在Web应用程序中,攻击者通过巧妙构造输入,成功绕过系统的安全防护,进而执行恶意代码或读取敏感文件。特别是在PHP等动态语言中,文件包含函数的使用不当可能导致严重后果。

将以简练而深刻的语言,介绍文件包含漏洞的定义及其对系统安全的威胁。通过具体实例,我们将展示攻击者可能采用的不同手段,以揭示潜在的危害。而为了更全面地了解和应对这一挑战,我们将深入研究防御策略,包括输入验证、白名单控制、关闭不必要的函数等多个层面的解决方案。

一、文件包含漏洞及防御

1、文件包含

1 )、概念

把可重复使用的函数写入到单个文件中在使用该函数时,直接调用此文件,无需再次编写函数。这一过程被称为包含

2、PHP文件包含

1 )、文件包含函数

①、include0: 找不到被包含文件时会产生警告 (E_WARNING)

②、include_once(): 与include () 类似,代码已经被包含则不会再次包含

③、Require(): 找不到被包含的文件时会产生致命错误 (E_COMPILE_ERROR)

④、require_once(): 与require () 类似,代码已经被包含则不会再次包含

2 )、文件包含示例

(3) 、文件包含示例2

分别修改phpinfo.txt扩展名为: jpg、rar、360发现均可解析,

只要文件内容符合PHP语法规范,任何扩展名都可以被PHP解析

(4) 、远程文件包含

(5) 、文件包含漏洞

正常访问页面逻辑:

①、1.html

②、点击标签

③、跳转包含文件

攻击者思路: http://127.0.0.1/include/03/index.php?page=xxx.php

3、PHP文件包含利用

1 )、读取敏感文件

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配置信息

(2)、读取敏感文件

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配置文件

3 )、远程包含shell

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

(4) 、本地包含配合文件上传

已经上传图片木马路径为: /upload/1.png图片代码如下:

会在index.php目录下生成shell.php

访问: http://127.0.0.1/include/03/index.php?page=D: upload\1.png

(5) 、使用PHP封装伪协议

PHP 内置有很多内置 URL 风格的封装协议,可用于fopen()、 copy(),file_exists() 和 filesize()的文件系统函数。

(6)、data://命令执行

http://127.0.0.1/cmd.php?file=data://text/plain,\<?php phpinfo()?>h ttp : / / 1 2 7 .0 .0 .1 / c m d .

p h p ?file = data : / / te x t /plain;base64,PD9waHAgcGhwaW5mbygpPz4=

(7) 、zip://实验

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后在上传,其他几种压缩格式也可以这样操作。

8 )、使用PHP封装伪协议

写入PHP文件 (allow_url include:on)http://127.0.0.1/include/03/index.php?page=php://input

9 伪协议用法小结

(10) 、包含Apache日志文件

①、找到Apache路径,利用保护漏洞包含日志文件获取Webshell。Apache两个日志文件: access.log、error.log

各字段分别为: 客户端地址、访问者标识、访问者的验证名字、请求时间请求类型、状态码、发送给客户端短的字节数

②、当发现网站存在包含漏洞,但无webshell文件包含,也无上传点时?当访问不存在的资源时,apache日志同样会记录。如果访问:127.0.0.1/include/<?php phpinfo0;?>,再包含access.log是否可行?

(11)、截断包含

二、文件包含漏洞实例

1、CVE-2018-12613

1 )、漏洞简介

phpMyAdmin是开源的MySQL数据库管理工具,可实现可视化对数据库进行管理受影版本: 4.8.0~4.8.1

index.php界面存在文件包含功能,代码分析进行绕过可实现漏洞利用

(2) 、漏洞分析

/index.php第55~63行

(3) 、漏洞分析

为了实现文件包含功能,需先通过几个条件判断

①、 target变量不为空;

②、target变量值为字符串;

③、 target变量值不能以'index'开头

④、target变量值不在黑名单中 ;

⑤、调用checkPageValidity函数处理target变量;

4 )、/libraries/classes/Core.php 443~476行

(5) 、漏洞分析

checkPageValidity 函数中五个条件判断

①、引入$goto_whitelist 白名单 (31行)

②、如果$page变量没有定义或不为字符串则返回false;

③、$page值在白名单中返回true;

④、如果$_page 存在白名单中返回true;

⑤、$page经过ulr解码存在于白名单则返回true;

6 )、漏洞利用

Payload: **/index.php?target=db_sql.php%253f/../../../file.txt

注意事项:

(7)、漏洞利用-getshell方法

①、利用数据库功能写入shell,查询文件位置select @@datadir包含.frm文件

②、利用数据库查询语句将shell写入session文件,包含该session文件

相关推荐
叶落阁主13 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954482 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954483 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star3 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954483 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher4 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行7 天前
网络安全总结
安全·web安全
DianSan_ERP7 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet