作者:WBG
原文链接:https://mp.weixin.qq.com/s/7onBlm6F674y2RWYdAp_aw
关于 Core impact (就是收购 CS 的那家公司的产品)稍微介绍一下吧,Core impact 简单来说就是一款商业渗透测试工具,它不同于普通的RAT,它更像 MSF,自身带有很多 exp 模块,又和 ExploitPack 有些相似,不过 ExploitPack 自身 RAT 属性不强可以说是单纯的 EXP 集成平台包括漏洞利用,漏洞开发,调试一体
使用
安装就不说了
打开 Core impact 界面如下
你要先创建一个工作空间(一个渗透项目一个工作空间),需要输入项目名称和设置密码
创建完成后会自动打开工作空间界面如下
可以双击展开 Agents 目录在其中找到 "Package and Register Agent" 模块双击执行设置如下,生成一个 x86 http 分阶段 exe payload
随后在目标机上执行,成功上线
右键目标可以执行各种操作
如果需要执行左边的模块可以直接拖到目标上
凡是执行过的模块都会按照时间顺序排列在右上方,而右下方则是记录相应模块的执行日志,比如我这里选择启动 shell 然后执行 whoami /all 所有输出都将被记录在模块日志中,可以随时可以查看
RPT 这里则是各种向导,辅助你进行信息收集和渗透
比如我们选择 Information Gathering Wizard 然后拖到到目标上执行会让你填写或选择一些参数然后自动开始信息探测
执行完成后可以在右边查看到各种结果
使用介绍这方面就先介绍这么多吧
Payload 分析
我们分析的 payload 以 x86 http 为例,使用的工具 C32ASM,Cuttter,unicorn,wget,PyCharm
选择 Package and Register Agent 模块生成 payload 具体设置如图
点击 ok 后会启动监听并生成 payload 这里我们选择生成的是一个 x86 http 分阶段 payload
很明显可以看出来 Core impact 生成的 payload 是经过编码器加密过的通过自解密执行,这里为了方便我用 unicorn 写了一个脚本来模拟执行前面的解码器最后把解密后的 shellcode dump 下来
from hexdump import hexdump
from unicorn import *
from unicorn.x86_const import *
X86_CODE32 = bytes.fromhex("E9 62 00 00 00 5B B9 5C 06 00 00 B8 26 BE A5 0E 8B 13 4C 4C 4C 4C 89 0C 24 4C 4C 4C 4C 89 3C 24 4C 4C 4C 4C 89 1C 24 89 D1 89 C7 89 CB 21 F9 F7 D1 09 FB 21 D9 89 CA 8B 1C 24 44 44 44 44 8B 3C 24 44 44 44 44 8B 0C 24 44 44 44 44 89 13 43 43 43 43 49 49 49 49 81 F9 00 00 00 00 0F 85 AE FF FF FF E9 05 00 00 00 E8 99 FF FF FF CE 8C A5 0E 26 D5 C0 7C 48 DB C9 3D 14 90 C1 62 4A 9E E2 6B 52 EE D7 61 45 FF C1 6A 54 DB D6 7D 6A D1 C4 6A 6A D7 C7 7C 47 CC DC 4F 51 CD 97 51 15 8C 8B 6A 4A D2 A5 53 42 35 B8 3E 26 BE A5 85 7D B2 26 CD 2A 37 7F 85 7D BA 9C DD 53 BF 69 85 55 8E 2C E1 4C B3 FC 68 8B B2 85 A0 53 57 47 F9 AD CD BD 83 63 B3 F5 64 28 56 BD 0E 26 BE F5 83 63 A5 F5 64 2A 56 A9 0E 26 BE F5 83 7B 99 F6 F1 F6 2F FF 51 CD .. .. .. ..")
ADDRESS = 0x1000000
STACK_ADDR = 0x0
STACK_SIZE = 1024*1024
print("Emulate i386 code")
try:
# 初始化模拟器
mu = Uc(UC_ARCH_X86, UC_MODE_32)
# 映射内存
mu.mem_map(ADDRESS, 2 * 1024 * 1024)
mu.mem_map(STACK_ADDR, STACK_SIZE)
# 写入shellcode
mu.mem_write(ADDRESS, X86_CODE32)
mu.reg_write(UC_X86_REG_ESP, STACK_ADDR + STACK_SIZE - 1)
mu.emu_start(ADDRESS, ADDRESS + (X86_CODE32[1]+0xA))
print("End of execution")
print(hexdump(mu.mem_read(ADDRESS,len(X86_CODE32))))
f = open('ASM_test_x86.bin', 'ba')
f.write(mu.mem_read(ADDRESS,len(X86_CODE32)))
f.close()
except UcError as e:
print("ERROR: %s" % e)
解密后
到这里 C32ASM 就没办法在处理了因为后面会有很多利用 call pop 这种形式来获取字符串地址所以该换上 Cuttter 了
解密后的 shellcode 开头无非就是找 kernel32.dll 基址然后在找 GetProcAddress 和 LoadLibraryA 这两个函数,都是 shellcode 的经典操作
GetProcAddress 和 LoadLibraryA 获取完成后 jmp 过去开始加载 dll 和获取一些函数地址如 VirtualAlloc , InternetOpenA,InternetOpenUrlA 等等。
CS 和 msf 都是通过 api hash 来获取函数地址,Core impact 则是采用在栈中构建字符串然后调用 GetProcAddress 函数获取
函数地址都获取完毕后开始通过 http 请求核心 payload
这里的 http://192.168.1.97:8888/index.php?page=base64 就是请求 payload 的链接,page 后面跟的是 base64 编码后的参数,不太清楚 Core impact 为什么要这样设计,这样搞特征太明显了,这就必须说两句题外话就是 payload 托管问题其实不管是 CS 还是 Core impact 又或者是 msf 我个人都是不建议使用它们自身的 payload 托管,应该根据实际情况自行导出核心 payload 然后进行单独托管放在一个地方不要直接和 C2 服务器放在一起
下载下来的核心 payload
Core impact 返回的核心 payload 是 url 编码的所以在读取完成后还需要对核心 payload 进行解码操作
基本上和 msf 或 cs 的分阶段 payload 没有太大区别都是使用一小段 shellcode 来下载执行核心 payload,不太相同的是 msf 和 cs 的核心 payload 都是由反射 dll 开发而来在进行修补头来实现转成 shellcode,对这个过程有兴趣可以去看看这个项目:
https://github.com/WBGlIl/ReflectiveDLL_Patch
之前开源过一个修补反射 dll 头的工具,Core impact 这东西的核心 payload 我看了一下是纯 shellcode 开发的大小差不多在 152kb 左右
Payload 生成过程
payload 我们分析完了现在我们来分析一下 payload 的生成过程
Core impact 界面部分是由 MFC 开发的,它的功能实现全是通过 python,利用 boost.python 来实现运行 python 脚本,我这里会简单写一下生成的关键部分
基本上我把分阶段 payload 生成分成 3 个部分
第一部分
modules\classic\site-packages\impact\LibEgg\Win32.py
这部分硬编码就是分阶段 payload 最开始的部分用来查找 kernel32.dll 获得 GetProcAddress 和 LoadLibraryA
第二部分
modules\classic\site-packages\impact\LibEgg\HttpTunnelEgg.py
生成分阶段 shellcode 主体部分,查找函数,调用函数通过 http 接收 payload 然后对 payload 进行 url 解码然后执行,这里主要利用 InlineEgg 库实现
https://www.coresecurity.com/core-labs/open-source-tools/inlineegg-cs
它的核心 payload 解码器
第三部分
前两个部分加起来生成完整的 shellcode 然后交由第三部分编码器处理进行加密
modules\exploits\site-packages\impact\exploitlib\egg_obfuscator.py
它这个 shellcode 编码器实现在 modules\classic\site-packages\impact\LibEgg\PolymorphicEgg.py基本上就是一些简单的运算,算法不是很难比较简单就是代码比较多所以就不展开写了
其他
在分析的过程中还有一个有趣的事情 Core impact 生成的 exe 竟然还带着 pdb 路径根据公开搜索找到了两个相关的 exe 的信息,这点对于反溯源也挺重要的也是提醒各位自己编译东西的时候不必要的信息应该一律不留
结尾
Core impact payload 从上面的分析可以看出来和 msf 或 cs 的差别还是挺多的,不过 Core impact 自身 payload 支持的平台倒是挺多的包括 Linux,Mac OS X,OpenBSD,FreeBSD,Windows,等日后有时间再去继续深入分析一下里面部分功能的实现。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1589/