![985ac116da9d8d3dea57b06f988a6250.png](https://i-blog.csdnimg.cn/blog_migrate/faab560dc3e7bea558172e09956ff8c2.jpeg)
实验环境:
1、虚机win7 192.168.64.154
2、Kali 192.168.64.148
3、Phpstudy php-5.4.45
文件包含漏洞原理:
文件包含漏洞由于程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。由于代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,往往这种代码的灵活性,从而会导致客户端可以调用一个恶意文件,造成文件包含。
文件包含漏洞分为本地包含和远程包含:
本地包含顾名思义就是利用本地服务器上面存在的一个恶意文件,然后利用本地服务器上面额这个恶意文件进行本地包含。
远程包含顾名思义指的是利用远程服务器上面的一个恶意文件,进行远程文件包含利用。需要注意的是远程文件包含,在配置文件中的php.ini中开启allow_url_include、allow_url_fopen选项。开启后可以直接执行任意代码。
文件包含涉及的函数:
一般php文件包含涉及的比较多,所以下面主要是讲解一下php的文件包含漏洞。
Php文件包含漏洞涉及的函数:
include(),include_once(),fopen(), require(),require_once()
上述是主流的文件包含的函数:
include() :只能找到了include才能包含文件,如果找不到包含文件只是会产生警告的提示,不会影响下面脚本运行;
require(): 与include函数不同的是,程序只要一运行就会包含文件,如果找不到包含的文件就会产生致命的错误,脚本就会立即停止。
include_once()和require_once():这两个函数如果文件包含被运行了,就不会再次被包含。
搭建环境:
首先我先分享一个文件包含绕过的新姿势,这也是我在学习文件包含的时候看到的,下面先说一下:我们可以利用phar://协议特性可以在渗透过程中躲过一些waf的检测,PHP5.3.0起就开始有这个phar://数据流包装器。
利用的过程:
在本地创建cmdback.php:
内容:<?php include ‘phar://cmd.zip/cmd.txt’;?>
![b979cdf8fee64961118cffa15aaa69de.png](https://i-blog.csdnimg.cn/blog_migrate/dd656c5ad49d441e13dcb3967fa02a12.jpeg)
在本地创建cmd.txt,内容为:
<?php phpinfo();?>
![69f163c5a3accc702a95247afeb5eefc.png](https://i-blog.csdnimg.cn/blog_migrate/c5724c6f9709321e194171809f9c3475.jpeg)
下面我们把cmd.txt压缩,文件名可以压缩为ziptarpharrar等格式,然后我们访问cmdback.php,浏览器就会出现phpinfo内容,故在渗透的时候可以写入一句话木马,这样就轻松的拿到了服务器的webshell。
为了能够直观的可以看到测试的效果,下面我们分别将cmdtxt压缩为不同的文件格式(上述提到的压缩格式)
(1) zip格式:
![47f87e701f89d0066f0748619df24974.png](https://i-blog.csdnimg.cn/blog_migrate/82b8893d65b0f22338b200cf955da8b2.jpeg)
在浏览器中我们访问http://192.168.64.154/cmdback.php,浏览器中就会显示phpinfo的信息:
![11f4ce6766f7da492cb997c325c4272a.png](https://i-blog.csdnimg.cn/blog_migrate/3f8ec0dc20b27b3efcbc8de032f728ef.jpeg)
(2) phar格式:
我们将cmd.zip修改为cmd.phar,要注意的是cmdback.php也需要修改以下:
![fe5de5849eae0b79fd138ce7bf881441.png](https://i-blog.csdnimg.cn/blog_migrate/76118c655ce5a28c2a712fe9dda98a83.jpeg)
在浏览器中我们访问http://192.168.64.154/cmdback.php,浏览器中同样会显示phpinfo的信息:
![09fe93d2324530195fae5d8cbc4902a5.png](https://i-blog.csdnimg.cn/blog_migrate/96181187cb6e668da739797e02c5d228.jpeg)
(3) tar格式:
将cmd.phar修改为cmd.tar,也将cdmback.php的内容修改一下:
![aca74c2b431fbcd781176a8387e78157.png](https://i-blog.csdnimg.cn/blog_migrate/e300b2a65c4b541bb24a2d97b92689b9.jpeg)
在浏览器中我们访问http://192.168.64.154/cmdback.php,浏览器中同样会显示phpinfo的信息:
![0c4981f04bad5d71fbd1d4a4df9caba3.png](https://i-blog.csdnimg.cn/blog_migrate/4e1d34c81c95920197ffcb7ae3d41d90.jpeg)
(4) rar格式:
下面为何和上面的内容不重复,修改以下cmd.txt的内容:
![a3fcd0b0246944318d01c98b57a3d92e.png](https://i-blog.csdnimg.cn/blog_migrate/8b560a8bcd0e315203d6f9184bf6a01c.jpeg)
在浏览器中我们访问http://192.168.64.154/cmdback.php,浏览器中同样会输出cmdback.php里面的内容:
![377afcc879d25513a6c890d7b26fab9a.png](https://i-blog.csdnimg.cn/blog_migrate/5395914f08c14de3b594e9c57a635b4f.jpeg)
以上就是利用phar://协议特性来进行进行包含漏洞的利用,有时候也可以绕过安全狗,有兴趣的可以去实验实验。
归入正题:
本地包含:
首先创建一个简单的include函数的php代码cmd.php,变量b接受cmd传过来的值,然后这个函数被执行:
<?php $b=$_POST[‘cmd’];
Include($b);?>
创建shell.txt,内容可以是一句话木马,本着实验的情况,我们先不写一句话:
<?php echo ‘hello hack’;?>
这两个文件需要放在同一目录下面:
![89023c61ab75b1c3697c82273957711d.png](https://i-blog.csdnimg.cn/blog_migrate/9d1605ecb0a3d5213aa1fe0a60c80cca.jpeg)
![254f2433f7b6a92f0e544980545abf24.png](https://i-blog.csdnimg.cn/blog_migrate/e90ecacdf6d3240ae3bd33e9be9a0d0f.jpeg)
在浏览器中访问http://192.168.64.154/cmd.php?cmd=shell.txt,成功输出shell.txt里面的内容:
![d79ba3f8549d720fa2b6de27ffe01dd9.png](https://i-blog.csdnimg.cn/blog_migrate/d3b88564aa9b99ae7cf77d536969c9d7.jpeg)
套路来一波,实验看一下把shell.txt后缀修改后会不会出现报错,这个测试主要是为了说明无论扩展名修改为什么,都会以php代码执行,如果不符合php规则的,都会通过include可以输出源码内容:
Shell.txt---shell.doc
![377afcc879d25513a6c890d7b26fab9a.png](https://i-blog.csdnimg.cn/blog_migrate/5395914f08c14de3b594e9c57a635b4f.jpeg)
关于远程文件包含以及%00截断、配合上传拿服务器webshell、插入log日志获取webshell等内容,等小白下次总结。今天先总结到这里。在测试过程中本地包含漏洞遇见的比较多,如果能getshell的话,那就爽的不得了。大佬们有什么意见,本小白欢迎指教。