#FreeBuf#红队基本操作:通用Shellcode加载器( 三 )


#FreeBuf#红队基本操作:通用Shellcode加载器
本文插图
在上图中 , 我们可以看到将shellcode复制到分配的内存页后会发生什么VirtualAlloc 。 之后memcpy被调用时 , shellcode的地址从堆栈到移动EAX寄存器 。
#FreeBuf#红队基本操作:通用Shellcode加载器
本文插图
如果我们现在看一下中的值EAX;我们可以找到shellcode所在的地址 。
#FreeBuf#红队基本操作:通用Shellcode加载器
本文插图
一旦我们有了地址;我们可以使用x32dbg中的“内存映射”标签找到内存页面 。 如上图所示 , 包含shellcode的内存页面当前具有读取 , 写入和执行权限 。 要注意的另一件事是 , 我们可以在中看到一个具有与payload相同大小的附加内存页面.rdata 。 由于shellcode是未加密地嵌入二进制文件中的 , 因此防御者将能够在不执行启动程序二进制文件的情况下检测到恶意负载 。
#FreeBuf#红队基本操作:通用Shellcode加载器
本文插图
使用x32dbg , 蓝色团队可以查看内存页面中的内容并将其导出到文件中 , 以便以后进行进一步分析 。 对蓝色团队成员有用的注释是 , 即使payload在嵌入发射器二进制文件之前已被加密;通过在调试器中逐步执行 , 仍可以转储未加密的payload 。
如果我们继续逐步执行 , 我们可以看到call eax执行后 , 指令指针跳到了shellcode 。 现在 , 当我们正常继续执行时 , 我们会在Cobalt Strike中收到客户端连接 。
结论Msfvenom , Cobalt Strike和Donut使我们能够轻松支持各种不同的payload 。 但是 , 在使这些payload绕过端点安全解决方案之前 , 必须实现其他功能 。 虽然当前的加载器是基本的 , 但它是一个很好的基础 , 以后可以扩展 。 我们学习了如何格式化原始shellcode , 以及如何将源代码编译为可执行二进制文件 。 另外 , 我们创建了一个Python脚本 , 该脚本可以自动完成该过程 。
*参考来源:nagarrosecurity , FB小编周大涛编译 , 转载请注明来自FreeBuf.COM
精彩推荐
#FreeBuf#红队基本操作:通用Shellcode加载器
本文插图