- 前言
- Cobalt Strike 简介
- Cobalt Strike 基本使用
- Cobalt Strike Beacon 命令
- Cobalt Strike 脚本使用
- Cobalt Strike 脚本编写
- Cobalt Strike 扩展
- Cobalt Strike 原理介绍
- Cobalt Strike 攻击防御
Beacon 加载执行过程
前面粗略的分析了一下stager现在我们来动态调试一下,我也不用啥分析模拟工具了,就一小段也没混淆反调试,直接x32dbg手工走起(随意用啥都行看个人喜好)
shellcode转成exe直接x32dbg打开
断在系统断点后直接F9来到shellcode入口点
F7几次来到第一个call ebp看堆栈我们可以看到loadlibrarya api的哈希值第二个就是loadlibrarya函数的参数wininet,很明显是用来加载wininet.dll的,因为后面需要用到wininet.dll里的函数所以必须要先加载wininet.dll
msf和cs的shellcode基本都是这样来调用win api的有兴趣的可以跟一下,我这里直接向下走到VirtualAlloc
调用VirtualAlloc分配内存可写可读可执行属性
调用InternetReadFile循环读取stage到VirtualAlloc分配的空间中
读取完成后直接ret到stage(shellcode)去执行
开始运行接收到的stage(shellcode)
跳过来后,还是一个call pop 将call后面的地址放到ebx里
这里就是循环xor解密我写有注释可以看一下
解密完成准备跳转去执行Beacon.dll(可以看到内存中的4D5A一个明显的PE头特征)
跳转到Beacon.dll头开始执行
这个解密出来的stage其实就是Beacon.dll(一个修补过的反射dll)。我们把东西dump出来重建一下看看
dump记得重建一下PE,dump大小源自上面解密过程中的解密长度
dump完了用PE工具查看一下
可以看到两个非常明显的特征
这个beacon.dll就是核心所在,前面所有的工作都是为了加载执行beacon.dll这个反射dll
关于反射dll的原理请自行谷歌,反射dll修补技术可以看我曾经开源的一个项目我这里就不在做详细讲解了 仅供参考写的比较垃圾 https://wbglil.github.io/2020/03/27/%E5%85%B3%E4%BA%8E%E5%8F%8D%E5%B0%84dll%E4%BF%AE%E8%A1%A5/
基本上这块就写这么多吧,写的有些匆忙
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论