标题:Adobe CoolType SING Table "uniqueName" Stack Buffer Overflow

分析:
    典型的直接调用strcat这类不安全的字符串操作函数而造成的缓冲区溢出漏洞,以上exploit通过覆盖栈上的函数指针来达到漏洞利用的目的。

.text:0803DC6D                 push    offset aSing    ; "SING"
.text:0803DC72                 push    edi             ; int
.text:0803DC73                 lea     ecx, [ebp+var_24]
.text:0803DC76                 call    sub_8021AC6
.text:0803DC7B                 mov     eax, [ebp+var_24] ; eax指向SING表
.text:0803DC7E                 cmp     eax, esi
.text:0803DC80                 mov     byte ptr [ebp+var_4], 2
.text:0803DC84                 jz      short loc_803DCBD
.text:0803DC86                 mov     ecx, [eax]
.text:0803DC88                 and     ecx, 0FFFFh
.text:0803DC8E                 jz      short loc_803DC98 ; 
.text:0803DC90                 cmp     ecx, 100h
.text:0803DC96                 jnz     short loc_803DCB9
.text:0803DC98
.text:0803DC98 loc_803DC98:                            ; 
.text:0803DC98                 add     eax, 10h        ; eax = offset of SING + 0x10, 即指向了SING表的uniqueName字段
.text:0803DC9B                 push    eax             ; 
.text:0803DC9C                 lea     eax, [ebp+0]    ; eax指向栈内存的指针, 用于存储数据
.text:0803DC9F                 push    eax             ; Dest
.text:0803DCA0                 mov     byte ptr [ebp+0], 0
.text:0803DCA4                 call    strcat          ; 直接拷贝uniqueName到栈空间,没有对数据长度进行任何的校验
.text:0803DCA9                 pop     ecx

检测:
    在Adobe的文档中实际规定uniqueName的长度最多为28字节,通过解析CoolType字体文件,找到uniqueName字段即可进行检测。

Exp下载(Shellcode是连接本机端口4444):

    http://www.uudisc.com/user/nuclearatk/file/3506554