10.2.5 指定账户恶意攻击
逻辑漏洞也能恶意攻击指定账户?没错。
在一些安全性较高的网站经常会遇到以下场景:在输入密码时,不小心输入错误,系统提示"失败三次后,将锁定账户"、"您还有三次输入机会"等,如图10-19所示,就是一个典型的密码输入错误次数过多而导致无法登录的例子。
图10-19 密码错误提示
一般情况下,普通用户输入密码错误次数不会超过三次,如果超过三次,就有可能是攻击者正在尝试破解你的密码。
有人可能会说:这不正是一个很好的方案吗?可以有效地防止攻击者破解密码。但反过来想想,如果攻击者不是想入侵你的账户,而仅仅是"封锁"你的账户呢?
例如,某银行系统安全体系较高,限制用户登录,当密码输入错误次数大于5次后,则封锁账户一天,一天之内此账户无法登录。这就意味着你的银行卡号千万不要随便让别人知道。如果碰到有心的"攻击者"每天在凌晨时刻就开始输入错误的密码,进行另类攻击,那么最终结果就是你的卡号无法使用。
在上述例子中这种"有心的"攻击者可能很少见,但如果换一个场景呢?如:商城拍卖系统,当密码连续输入错误时,就会封锁一天,那么你的竞争对手在得知你的账户之后,每天都会多次输入错误的密码,这样的结局可想而知。
如果安全体系较高,必须要提供"封锁"账户的功能,那么应该怎么办呢?针对这种逻辑漏洞场景,最好的办法就是不要暴露登录账户,而对外仅仅暴露NikeName(昵称)。就像人与人交流一样,交流的时候只说名字就可以,不需要用身份证号码。
10.3 代码注入
对于代码注入(Code injection),OWASP将其定义为在客户端提交的代码在服务器端接收后当作动态代码或嵌入文件处理。而Wikipedia将其定义为客户端所提交的数据未经检查就让Web服务器去执行,这个范围比OWASP定义的代码注入范围要广阔得多。
OWASP: https://www.owasp.org/index.php/Code_Injection
Wikipedia:http://www.wikipedia.org
按照OWASP分类,以下漏洞可以视为代码注入。
(1)OS命令执行
<?php
$command = $_REQUEST["command"];
system($command);
?>
http://www.secbug.org/cmd.php?command=ls
(2)文件包含
<?php
$page = $_REQUEST["page"];
include($page);
?>
http://www.secbug.org/page.php?page=info.txt
(3)动态函数调用
<?php
function A(){
echo "A";
}
function B(){
echo "B";
}
$func = $_REQUEST["fun"];
$func();
?>
(4)代码执行
<?php
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
?>
如果按照Wikipedia的意思,那么范围就大了许多,例如,SQL注入、XML注入、XSS、文件包含、命令执行等都可视为代码注入的范畴。
本文选自《Web安全深度剖析》第十章,本站经电子工业出版社和作者的授权。
版权声明:51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。