解析web文件操作常见安全漏洞(目录、文件名检测漏洞_PHP教程
推荐:网站模板:web上存漏洞及原理分析、防范方法(安全文件上存方法)这类漏洞,主要是可以读取用户传入路径名称,采用不正确的过滤方法,导致恶意用户,将文件上存到非预期的地方,带来安全隐患。 其实,我们抓住几个地方即可,我们先来分析下,既然用户要上存文件,而且文件将是多种多样格式;可能有的文件内容与用户传入格式不一致,有
做web开发,我们经常会做代码走查,很多时候,我们都会抽查一些核心功能,或者常会出现漏洞的逻辑。随着技术团队的壮大,组员技术日益成熟。 常见傻瓜型SQL注入漏洞、以及XSS漏洞。会越来越少,但是我们也会发现一些新兴的隐蔽性漏洞偶尔会出现。这些漏洞更多来自开发人员,对一个函数、常见 模块功能设计不足,遗留下的问题。以前我们能够完成一些功能模块,现在要求是要安全正确方法完成模块才行。 接下来,我会分享一些常见功能模块,由于设计原因导致漏洞出现。下面,我们先看下,读取文件型功能漏洞。
我们先看下下面一段代码,通过用户输入不同目录,包含不同文件
<?php ///读取模块名称 $mod = isset($_GET['m'])?trim($_GET['m']):'index'; ///过滤目录名称不让跳转到上级目录 $mod = str_replace("..",".",$mod); ///得到文件 $file = "/home/www/blog/".$mod.".php"; ///包含文件 @include($file);
这段代码,可能在很多朋友做的程序里面有遇到过,对于新人来说,也是很容易出现这样问题,记得走查遇到该代码时候,我问到,你这个代码安全方面能做到那些?
答:1. 对”..”目录有做替换,因此用户传入模块名里面有有..目录都会被替换掉了。
2.构造拼接file名称,有前面目录限制,有后面扩展名限制,包含文件就会限制在该目录了
-
这段代码真的做到了目录安全检测吗?
我们来测试下,如果$mod传入这个值将会是什么样的结果。
$mod 通过构造输?mod=…%2F…%2F…%2F…%2Fetc%2Fpasswd%00 ,我们看结果将是:
居然include(“/etc/passwd”)文件了。
-
怎么逃脱了我参数限制呢?
首先:做参数过滤类型去限制用户输入本来就不是一个好方法,一般规则是:能够做检测的,不要做替换 只要是检测不通过的,直接pass 掉!这是我们的一个原则。过滤失败情况,举不胜举,我们来看看,实际过程。
1、输入”…/…/…/” 通过把”..” 替换为”.”后
2、结果是”../../../” 就变成了这个了
有朋友就会说,如果我直接替换为空格是不是就好了?在这个里面确实可以替换掉。但是不代表以后你都替换为空格就好了。再举例子下。如:有人将字符串里面javascript替换掉。代码如下:
……
$msg = str_replace(“javascript”,””,$msg);
看似不会出现了javascript了,但是,如果输入:jjavascriptavascript 替换,会替换掉中间一个变为空后。前面的”j” 跟后面的会组成一个新的javascript了。
其次:我们看看,怎么逃脱了,后面的.php 限制呢。用户输入的参数有:”etc/passwd
分享:网站模板:web上存漏洞及原理分析、防范方法网站提供上存功能,是很多站点经常会有功能,商城,论坛还有常见一些网盘站点。常见互联网上面,我们也是经常听说,某某站点出现上存漏洞,某某开源项目有 上存漏洞。 从互联网开始出现动态程序,上存漏洞像幽灵一样,频繁的出现在各种系统中。为什么,一个上存漏洞会
- 相关链接:
- 教程说明:
PHP教程-解析web文件操作常见安全漏洞(目录、文件名检测漏洞。