- A+
s0mun5 | 2014-10-08 12:18
其实是Bugzilla的用户注册漏洞 :)
漏洞成因代码如下
my $otheruser = Bugzilla::User->create({
login_name => $login_name,
realname => $cgi->param('realname'),
cryptpassword => $password});
这是创建新用户的代码
这里调用了 $cgi->param() 类
当我们进行复参请求时
index.cgi?foo=bar&foo=baz&foo=quux
如果我们用数组获取foo的值,输出如下@values = $cgi->param('foo'); --> ['bar', 'baz', 'quux']
但是我们用变量获取foo的值时,输出如下
$value = $cgi->param('foo'); --> 'bar'
而在perl中用哈希表获取数组的值时,会如下
my @array = ("foo", 3, "bar", 6); my %hash = @array; --> { "foo" => 3, "bar" => 6 }
每两个值变成hash表的key值和value值
so 这里就产生了变量覆盖的问题
index.cgi?realname=JRandomUser&realname=login_name&realname=[email protected]
请求上面的url,realname随便,login_name是一个已经注册的用户,这样就覆盖了原来的 login_name
修复方法很简单
scalar $cgi->param('realname'),
使用scalar取第一个值就ok了
看这里 http://blog.gerv.net/2014/10/new-class-of-vulnerability-in-perl-web-applications/
AND
这里 https://krebsonsecurity.com/2014/10/bugzilla-zero-day-exposes-zero-day-bugs/
$("img").load(function(){ if($(this).attr("width")>640) $(this).attr("width",640); });