标题: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):