-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathhttps-c2.sh
More file actions
executable file
·185 lines (171 loc) · 5.56 KB
/
https-c2.sh
File metadata and controls
executable file
·185 lines (171 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/bin/bash
# author: cham423
# Global Variables
runuser=$(whoami)
tempdir=$(pwd)
certpath=""
# check for root privs, before getting started
if [ $(id -u) -ne '0' ]; then
echo
echo ' [ERROR]: This Setup Script Requires root privileges!'
echo ' Please run this setup script again with sudo or run as login as root.'
echo
exit 1
fi
# read args
while [ "$1" != "" ]; do
case $1 in
-c | --cert-path) shift
certpath="$1"
;;
esac
shift
done
# validate certpath
if [ "$certpath" != "" ]; then
echo "YOU FOUND A CERT! GOOD JOB"
echo "the cert you gave was: $certpath"
if [[ ! -d $certpath ]]; then
echo " [ERROR]: provided certpath was not a directory, exiting."
echo " provide the path to the directory with the fullchain.pem file in it, not the file itself."
exit 1
fi
echo
fi
# check if ubuntu 18.04 or ubuntu 20
func_check_os(){
if [ $(lsb_release -rs) == '20.04' ]; then
ubuntu=20
elif [ $(lsb_release -rs) == '18.04' ]; then
ubuntu=18
elif [ $(lsb_release -rs) == '10' ]; then
ubuntu=10
else
echo
echo ' [WARNING]: Unsupported OS! you are not running ubuntu 18 or 20.'
echo ' this script may behave weirdly.'
echo
fi
}
# install java first
func_prereqs(){
echo '[Starting] Installing Dependencies'
apt-get update && apt-get -y install openjdk-11-jdk snapd
}
func_read_vars(){
echo -n "Enter your DNS (A) record for domain [ENTER]: "
read domain
echo
echo -n "Enter your common password to be used [ENTER]: "
read password
echo
echo -n "Enter your CobaltStrike server location (go copy/update it over now if you didn't already) [ENTER]: "
read cobaltStrike
echo
domainPkcs="$domain.p12"
domainStore="$domain.store"
cobaltStrikeProfilePath="$cobaltStrike/httpsProfile"
}
func_check_tools(){
# Check for keytool
if [ $(which keytool) ]; then
echo '[Sweet] java keytool is installed'
else
echo
echo ' [ERROR]: keytool does not seem to be installed'
echo
exit 1
fi
if [ $(which openssl) ]; then
echo '[Sweet] openssl keytool is installed'
else
echo
echo ' [ERROR]: openssl does not seem to be installed'
echo
exit 1
fi
if [ $(which git) ]; then
echo '[Sweet] git keytool is installed'
else
echo
echo ' [ERROR]: git does not seem to be installed'
echo
exit 1
fi
if [ $(which java) ]; then
echo '[Sweet] java is already installed'
echo
else
apt-get update
apt-get install default-jre -y
echo '[Success] java is now installed'
echo
fi
}
func_install_certbot(){
echo '[Starting] updating snapd'
snap install core; snap refresh core
echo '[Success] snapd is good to go'
echo '[Starting] installing certbot'
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
echo '[Success] certbot is good to go'
echo '[Starting] to build letsencrypt cert!'
certbot certonly --standalone -d $domain -n --register-unsafely-without-email --agree-tos
if [ -e /etc/letsencrypt/live/$domain/fullchain.pem ]; then
echo '[Success] letsencrypt certs are built!'
else
echo "[ERROR] I didn't find a built certificate file."
echo " Look for the certbot error above. Potential reasons for failure:"
echo " Check that DNS A record is properly configured for this domain"
echo " Copy error and create github issue or contact @cham423 on keybase"
echo " "
echo
echo " if it looks like the cert built, properly, you can go hunt for the certificate file in this directory:"
echo " /etc/letsencrypt/live/<your_domain>/fullchain.pem"
echo
echo " if you find it, specify the directory in the --cert-path option when running this script and run again."
exit 1
fi
}
func_build_pkcs(){
cd /etc/letsencrypt/live/$domain
echo "[Starting] Building PKCS12 .p12 cert."
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out $domainPkcs -name $domain -passout pass:$password
echo "[Success] Built $domainPkcs PKCS12 cert."
echo "[Starting] Building Java keystore via keytool."
keytool -importkeystore -deststorepass $password -destkeypass $password -destkeystore $domainStore -srckeystore $domainPkcs -srcstoretype PKCS12 -srcstorepass $password -alias $domain
echo "[Success] Java keystore $domainStore built."
mkdir $cobaltStrikeProfilePath
cp $domainStore $cobaltStrikeProfilePath
echo '[Success] Moved Java keystore to CS profile Folder.'
}
func_build_path(){
echo "[Starting] Building PKCS12 .p12 cert from specified path"
openssl pkcs12 -export -in $certpath/fullchain.pem -inkey $certpath/privkey.pem -out $certpath/$domainPkcs -name $domain -passout pass:$password
echo "[Success] Built $domainPkcs PKCS12 cert."
echo "[Starting] Building Java keystore via keytool."
keytool -importkeystore -deststorepass $password -destkeypass $password -destkeystore $certpath/$domainStore -srckeystore $certpath/$domainPkcs -srcstoretype PKCS12 -srcstorepass $password -alias $domain
echo "[Success] Java keystore $domainStore built."
mkdir $cobaltStrikeProfilePath
cp $certpath/$domainStore $cobaltStrikeProfilePath
echo "[Success] Moved Java keystore to CS profile Folder."
}
func_build_c2(){
cd $cobaltStrikeProfilePath
echo "todo - clone sourcepoint, automate profile creation "
echo "keystore name (append to profile) \"$domainStore\""
echo "keystore password (append to profile) \"$password\""
}
# Main section where all the stuff happens
func_check_os
func_prereqs
func_read_vars
func_check_tools
if [ "$certpath" == "" ]; then
func_install_certbot
func_build_pkcs
else
func_build_path
fi
func_build_c2