PHP文件包含漏洞与NC注入和php输入流

2020/03 13 15:03

目录:
文件包含漏洞原理
nc注入
php输入流

1:文件包含漏洞的原理
其实目录遍历漏洞和文件包含漏洞的原理是一样的,无非是文件包含漏洞可以包含远程服务器的文件,不知道业界纠结这个鬼问题干嘛,我就放一块写了。文件包含漏洞又分为两种,一是本地文件包含漏洞,二个是远程文件包含漏洞。造成这种漏洞的主要原因是PHP文件里使用了include函数,但是这个函数本身是没问题的,php引入include函数目的是减少代码量,减少维护成本,然而如果php服务器的配置文件配置不当的话,会造成网站php代码可以跨目录访问其他目录里的内容,如用户名的件/etc/passwd,修复也很简单,只需将php.ini里的allow_url_include=off就可以了。还有就是php文件可以指定包含文件比如:

$file=$GET['file'];
if($file != 'index.php'){
echo "文件包含错误!";
}
else{
//执行后面的代码
}

为了试验,我需要先将php.ini的allow_url_include 设置成on,编辑方法是 sudo vim /etc/php5/apache2/php.ini 再此之前我也补充一个远程登录到服务器的命令:telnet 用法如下

telnet 192.168.1.1 //登录主机
root //用户名
toor //密码!
这个时候可以打开浏览器输入192.168.1.1选DVWA登录。安全等级设置为low。找到file include这个就可以测试了,看一下能不能访问到passwd文件:地址如下,至于为什么是../../../../../../etc/passwd,这个懂linux就明白。其实../可以有多个。也可以用绝对路径:file:///etc/passwd 我就不多扯了,执行后看到root等账号信息被泄露。这个地方的细节比较多,比如有些服务器会设置了防护,然而我们可以利用%00截断绕过或是编码绕过,我就不写了,等下我还得吃饭,时间不多了。。。。

这玩意也可以包含远程的文件,然后服务器会被远程的文件拿过来自己执行。比如:?file=http://www.baidu.com/index.php

2.NC注入
文件包含漏洞其实并没有什么技术含量,考察的也是对linux的目录关系的认识,官方也是把文件包含漏洞定义为中等。因为好像他并不能直接得到最高权限,只是能泄露一些东西而已。其实不然,接下来给大家介绍一下文件包含可以与nc注入结合得到linux的代码执行权限。

首先要知道,apache会将指令的传输存到一个log日志中,这个日志记录着所以提交的数据。然而这个文件一般情况下是没有权限操作的,只有在配置不当的时候会触发,比如管理员为了方便会把log日志文件的执行权给所有人。这样就会有很大的隐患,即使www目录下的权限也可以查看并执行log日志文件。

Nc可以提供如下的网络功能:

1) 监听特定端口,这时候nc就可以作为一个服务器,但是我发现这样使用nc生成的服务器仅仅是一echo服务器而已,没有其他更加强大的功能.
2) 连接特定端口,这时候nc就成为了一个客户端,同样的,也是一个简单的客户端,只能起echo的作用.
3) 扫描端口,这可以作为查询某个机器上是否开启了某个端口.
不扯了,先把文件的权限改成所有用户可执行: sudo chmod a+rx -R /var/log/ -R是递归给这个目录下的所有文件都设置这个权限,然后看下access.log有么有rx权限了。(读和执行)ls -ld /var/log/apache2/access.log

然后文件包含一下这个log文件可以看到成功了。。不过他在疯狂地蹦弹窗。也不知道咋回事。

总之成功了。这时候就用到nc登录服务器,提交一段代码,如下:

nc 192.168.1.1 80//登录服务器,端口80
//cmd是个变量。等下提交数据时候用的到。die();是不执行后面的内容,因为会出现很多无关紧要的东西。
提交了,但是提示报错。这无所谓,我们的目的是将这段代码注入到log文件中执行的。可以看一下log文件。里的这段代码。。cat /var/log/apache2/access.log

可以看到,代码已经被提交到了log文件,这时候再次用的这个文件包含漏洞,提交两个数据,一是传值给cmd这个变量,让其执行,第二个是log文件地址,可以构造一下语句:

?Cmd=ls&page=file:///var/log/apache2/access.log //ls是查看当前目录下的东西。 可以看到,命令是被执行了。。这个目录下有这几个东西。

也可以看一下,当前服务器开启了哪些服务:?cmd=netstat -anp&page=file:///var/log/apache2/access.log

3.php输入流
原理我也没弄明白,太复杂了没看懂。只知道需要用到火狐浏览器的hackerbar。依旧是要利用文件包含漏洞,不过这种方法更牛逼,可以直接得到服务器的权限,而且还简单,利用如下:

?file=php://input
输入的数据为:
<? system(‘cat /flag.txt’); ?>
如果这样不直观,可以在提交数据后面添加die();,他会省略不必要的内容:

好了,到此结束。。

发表回复

欢迎回来 (打开)

(必填)