这次我来讲讲怎么用CobaltStrike(简称CS)把生成的Shellcode给加载执行了。CS是个团队渗透用的神器,服务端跟客户端都在里面,想怎么连都行。它能干的事特别多,不光能转端口,还能给Listener设置多种模式,甚至能编Windows可执行文件、DLL、Java和Office宏,甚至把网站克隆下来抓浏览器的信息,功能是真的多。 这Shellcode其实就是一段机器码,长得像填充一样。因为是直接跑在内核态的,通常写成16进制数字串。得靠我们找个漏洞往内存里扔进去,然后让它跳转到那儿执行才行。 要搞出Payload,就分三步走。 第一步,先建个Listener。在CS左上角点开“监听器”,选“新建”,把端口、协议还有触发条件都设好。这是为了等被攻方主动连上来的时候把它给接住。 第二步就是生Payload了。点“攻击”→“后门”→“Payload生成器”,选x64架构还有刚才建好的Listener,语言挑C语言那个选项就行。一按“生成”,代码自动跑到了剪贴板上。把它复制出来存个档就可以了。 第三步是把Shellcode拿出来。打开刚才存的payload.c文件,找unsigned char shellcode[]这个声明。在它后面的大括号里那一串16进制数字就是我们需要的。 接下来得写个加载器把它塞进去跑。新建个C语言项目,贴进这段骨架代码: 然后在main函数里把刚刚从剪贴板复制出来的那段Shellcode填上。注意引号和反斜杠都得转义一下。 然后得用VirtualAlloc函数在内存里给Shellcode腾出一块地方来。这块地方要能读写还要能执行,所以用MEM_COMMIT和PAGE_EXECUTE_READWRITE这两个参数。 如果这块内存申请失败了,就得报错退出。 把Shellcode拷贝到新申请的那块内存里。 最后把这个地址强制转成函数指针并调用它()((void (*)())exec)();)。 这程序编译好变成可执行文件后就能拿给目标机去跑了。