CVE-2004-1306 (CNNVD-200412-244)

MEDIUM 有利用代码
中文标题:
Microsoft Windows winhlp32.exe 堆溢出漏洞
英文标题:
Heap-based buffer overflow in winhlp32.exe in Windows NT, Windows 2000 through SP4, Windows XP throu...
CVSS分数: 5.1
发布时间: 2005-01-19 05:00:00
漏洞类型: 授权问题
状态: PUBLISHED
数据质量分数: 0.30
数据版本: v4
漏洞描述
中文描述:

Microsoft Windows是一款商业视窗操作系统。 Microsoft Windows winhlp32.exe在解析.hlp文件的时候存在着一个堆溢出,远程攻击者可以利用这个漏洞可能以用户进程权限在系统上执行任意指令。 当hlp文件是以分段来进行压缩的,他包含一个以phrase命名的内部文件,这个phrase文件由一个phrase表头和多个phrase表组成,phrase的表头处于.hlp文件的偏移0x19处,结构定义如下: unsigned short wNumberOfPhrases; unsigned short wOneHundred; 0x0100; long decompressedsize; phrases表头后面立即跟着phrases表,每个phrases表项占4个字节,2个字段phrasesHeadOffset和phrasesEndOffset,分别都是即unsigned short类型。代表phrases的头尾的偏移。 处理phrases表的函数具有3个参数(在中文2000 sp4上该函数的地址是0x0100A1EF),其中第3个参数为指向phrases表头的指针,第2个参数指向一个堆内存,用于保存phrases数据.但是在计算数据长度时并没有判断数据长度是否合法,这就导致可以构造一个.HLP,可以覆盖由第2个参数所指向的堆内存。以下是对该函数的分析: 0100A1EF sub_100A1EF proc near ; CODE XREF: sub_100A14C+6Fp .text:0100A1EF .text:0100A1EF arg_0 = dword ptr 4 .text:0100A1EF arg_4 = dword ptr 8 .text:0100A1EF arg_8 = dword ptr 0Ch .text:0100A1EF .text:0100A1EF mov eax, [esp+arg_8] ;arg_8 指向phrase表头 .text:0100A1F3 push ebx .text:0100A1F4 push esi .text:0100A1F5 push edi .text:0100A1F6 movzx edx, word ptr [eax+2] ;[eax+2] -> wOneHundred .text:0100A1FA mov ecx, [eax+0Ch] ;[eax+0Ch] -> phrase 表 .text:0100A1FD mov eax, [esp+0Ch+arg_0] ;以下计算 phrase表的偏移 .text:0100A201 sub eax, edx .text:0100A203 mov ebx, [esp+0Ch+arg_4] .text:0100A207 mov edi, eax .text:0100A209 shr eax, 1 .text:0100A20B and edi, 1 .text:0100A20E movzx edx, word ptr [ecx+eax*2] ;phrase_offset1 .text:0100A212 movzx esi, word ptr [ecx+eax*2+2] ;phrase_offset2 .text:0100A217 sub esi, edx .text:0100A219 add ecx, edx .text:0100A21B push esi ; size_t ;size = phrase_offset2 - phrase_offset1 .text:0100A21C push ecx ; void * .text:0100A21D push ebx ; void * ;ebx -> 第二个参数,即堆内存 .text:0100A21E call ds:memmove 在这里,存在着2个导致溢出的问题: 1.整数溢出,如果phrasesEndOffset比phrasesHeadOffset小,phrasesEndOffset-phrasesHeadOffset为一个负数,这里并没有做检查,实际调用memmove的时候,触发了溢出。 2.另外,在堆分配的时候,并非是根据phrasesEndOffset-phrasesHeadOffset计算时候进行分配的,而是根据hlp文件里的另外字段进行解码计算和分配的,由于解码和计算过程过于复杂,这里不在详细描述,只要修改一个正常的hlp文件的某个phrases表项,增大phrasesEndOffset字段也将触发这一漏洞。

英文描述:

Heap-based buffer overflow in winhlp32.exe in Windows NT, Windows 2000 through SP4, Windows XP through SP2, and Windows 2003 allows remote attackers to execute arbitrary code via a crafted .hlp file.

CWE类型:
(暂无数据)
标签:
remote windows flashsky fangxing OSVDB-12625
受影响产品
厂商 产品 版本 版本范围 平台 CPE
microsoft windows_2000 * - - cpe:2.3:o:microsoft:windows_2000:*:*:*:*:*:*:*:*
microsoft windows_2003_server datacenter_64-bit - - cpe:2.3:o:microsoft:windows_2003_server:datacenter_64-bit:sp1_beta_1:*:*:*:*:*:*
microsoft windows_2003_server enterprise - - cpe:2.3:o:microsoft:windows_2003_server:enterprise:*:64-bit:*:*:*:*:*
microsoft windows_2003_server enterprise_64-bit - - cpe:2.3:o:microsoft:windows_2003_server:enterprise_64-bit:*:*:*:*:*:*:*
microsoft windows_2003_server r2 - - cpe:2.3:o:microsoft:windows_2003_server:r2:*:64-bit:*:*:*:*:*
microsoft windows_2003_server standard - - cpe:2.3:o:microsoft:windows_2003_server:standard:*:64-bit:*:*:*:*:*
microsoft windows_2003_server web - - cpe:2.3:o:microsoft:windows_2003_server:web:*:*:*:*:*:*:*
microsoft windows_nt 4.0 - - cpe:2.3:o:microsoft:windows_nt:4.0:*:enterprise_server:*:*:*:*:*
microsoft windows_xp * - - cpe:2.3:o:microsoft:windows_xp:*:*:64-bit:*:*:*:*:*
解决方案
中文解决方案:
(暂无数据)
英文解决方案:
(暂无数据)
临时解决方案:
(暂无数据)
参考链接
12092 vdb-entry
cve.org
访问
无标题 x_refsource_MISC
cve.org
访问
20041223 Microsoft Windows winhlp32.exe Heap Overflow Vulnerability mailing-list
cve.org
访问
win-winhlp32-bo(18678) vdb-entry
cve.org
访问
ExploitDB EDB-25049 EXPLOIT
exploitdb
访问
Download Exploit EDB-25049 EXPLOIT
exploitdb
访问
CVE Reference: CVE-2004-1306 ADVISORY
cve.org
访问
CVSS评分详情
5.1
MEDIUM
CVSS向量: AV:N/AC:H/Au:N/C:P/I:P/A:P
CVSS版本: 2.0
机密性
PARTIAL
完整性
PARTIAL
可用性
PARTIAL
时间信息
发布时间:
2005-01-19 05:00:00
修改时间:
2024-08-08 00:46:12
创建时间:
2025-11-11 15:32:22
更新时间:
2025-11-11 16:21:18
利用信息
此漏洞有可利用代码!
利用代码数量: 1
利用来源:
未知
数据源详情
数据源 记录ID 版本 提取时间
CVE cve_CVE-2004-1306 2025-11-11 15:17:30 2025-11-11 07:32:22
NVD nvd_CVE-2004-1306 2025-11-11 14:50:55 2025-11-11 07:41:08
CNNVD cnnvd_CNNVD-200412-244 2025-11-11 15:08:45 2025-11-11 07:48:55
EXPLOITDB exploitdb_EDB-25049 2025-11-11 15:05:57 2025-11-11 08:21:18
版本与语言
当前版本: v4
主要语言: EN
支持语言:
EN ZH
其他标识符:
:
:
安全公告
暂无安全公告信息
变更历史
v4 EXPLOITDB
2025-11-11 16:21:18
references_count: 4 → 7; tags_count: 0 → 4; data_sources: ['cnnvd', 'cve', 'nvd'] → ['cnnvd', 'cve', 'exploitdb', 'nvd']
查看详细变更
  • references_count: 4 -> 7
  • tags_count: 0 -> 4
  • data_sources: ['cnnvd', 'cve', 'nvd'] -> ['cnnvd', 'cve', 'exploitdb', 'nvd']
v3 CNNVD
2025-11-11 15:48:55
vulnerability_type: 未提取 → 授权问题; cnnvd_id: 未提取 → CNNVD-200412-244; data_sources: ['cve', 'nvd'] → ['cnnvd', 'cve', 'nvd']
查看详细变更
  • vulnerability_type: 未提取 -> 授权问题
  • cnnvd_id: 未提取 -> CNNVD-200412-244
  • data_sources: ['cve', 'nvd'] -> ['cnnvd', 'cve', 'nvd']
v2 NVD
2025-11-11 15:41:08
cvss_score: 未提取 → 5.1; cvss_vector: NOT_EXTRACTED → AV:N/AC:H/Au:N/C:P/I:P/A:P; cvss_version: NOT_EXTRACTED → 2.0; affected_products_count: 0 → 9; data_sources: ['cve'] → ['cve', 'nvd']
查看详细变更
  • cvss_score: 未提取 -> 5.1
  • cvss_vector: NOT_EXTRACTED -> AV:N/AC:H/Au:N/C:P/I:P/A:P
  • cvss_version: NOT_EXTRACTED -> 2.0
  • affected_products_count: 0 -> 9
  • data_sources: ['cve'] -> ['cve', 'nvd']