-
Notifications
You must be signed in to change notification settings - Fork 322
/
Install.sh
executable file
·205 lines (183 loc) · 7.66 KB
/
Install.sh
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/bash
# Install PoshC2
echo ""
echo """
__________ .__. _________ ________
\_______ \____ _____| |__ \_ ___ \ \_____ \\\\
| ___/ _ \/ ___/ | \ / \ \/ / ____/
| | ( <_>)___ \| Y \ \ \____/ \\\\
|____| \____/____ >___| / \______ /\_______ \\\\
\/ \/ \/ \/
================= www.PoshC2.co.uk ================"""
echo ""
echo ""
if [[ $(id -u) -ne 0 ]]; then
echo -e "[-] You must run this installer as root.\nQuitting!";
exit 1;
fi
command -v apt >/dev/null 2>&1
if [ "$?" != "0" ]; then
echo "[-] This install script must be run on a Debian based system with apt installed."
echo "[-] Look at PoshC2's Docker support for running PoshC2 on none-Debian based systems."
exit 1
fi
# A POSIX variable
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Initialize our own variables:
GIT_BRANCH="master"
MANUAL_BRANCH_SET=false
POSH_DIR="/opt/PoshC2"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
if [ -f "$SCRIPT_DIR/poshc2/server/C2Server.py" ]; then
POSH_DIR="$SCRIPT_DIR"
fi
show_help(){
echo "*** PoshC2 Install script ***"
echo "Usage:"
echo "./Install.sh -b <git branch> -p <Directory to clone PoshC2 to>"
echo ""
echo "Defaults are master branch to /opt/PoshC2"
}
while getopts "h?b:p:" opt; do
case "$opt" in
h|\?)
show_help
exit 0
;;
b) GIT_BRANCH="$OPTARG"
MANUAL_BRANCH_SET=true
;;
p) POSH_DIR="$OPTARG"
;;
esac
done
command -v git >/dev/null 2>&1
if [ "$?" != "0" ]; then
echo "[*] Git not found - installing via apt"
apt-get update
apt-get install -y git
fi
if [[ ! -d "$POSH_DIR" ]]; then
# Git cloning PoshC2
echo -e "\n[+] Installing PoshC2 in \"$POSH_DIR\" for branch \"$GIT_BRANCH\"\n"
mkdir -p `dirname $POSH_DIR`
git clone -b "$GIT_BRANCH" https://github.com/nettitude/PoshC2 "$POSH_DIR"
else
pushd "$POSH_DIR" >/dev/null
git fetch >/dev/null 2>&1
if [ "$MANUAL_BRANCH_SET" == "false" ]; then
GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`
fi
echo -e "[+] Updating existing PoshC2 install at \"$POSH_DIR\" to branch \"$GIT_BRANCH\"\n"
git stash
git checkout "$GIT_BRANCH" && git reset --hard origin/"$GIT_BRANCH"
fi
# Update apt
echo -e "\n[+] Performing apt-get update\n"
apt-get update
# Install requirements for PoshC2
echo -e "\n[+] Installing requirements using apt\n"
apt-get install -y screen python3 python3-dev python3-pip build-essential mingw-w64-tools mingw-w64 mingw-w64-x86-64-dev mingw-w64-i686-dev mingw-w64-common espeak graphviz mono-complete apt-transport-https vim nano libpq-dev curl sudo sqlite3 binutils unzip
apt-get install -y python3.8-dev python3-distutils python3-lib2to3 python3.7-dev python3.7 2>/dev/null
# Setting the minimum protocol to TLS1.0 to allow the python server to support TLSv1.0+
echo -e "\n[+] Updating TLS protocol minimum version in /etc/ssl/openssl.cnf"
echo "[+] Backup file generated - /etc/ssl/openssl.cnf.bak"
sed -i.bak 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1.0/g' /etc/ssl/openssl.cnf
# If Python3.11 is externally managed Posh will not be able to utilise pipenv currently
echo -e "\n[+] If Python3.11 is externally managed - sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED"
# Check if PIP is installed, if not install it
command -v pip3 > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo -e "[+] Installing pip as this was not found\n"
wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py >/dev/null
python3 /tmp/get-pip.py >/dev/null
fi
echo ""
echo "[+] Installing requirements using pip"
echo "[+] python3 -m pipenv install"
echo ""
python3 -m pip install --upgrade pip > /dev/null
python3 -m pip install pandas pipenv > /dev/null
cd "$POSH_DIR"
python3 -m pipenv install >/dev/null
cd resources/SharpSocks/
unzip -o SharpSocksServer.zip
chmod +x SharpSocksServer/SharpSocksServer
cd ../../
echo ""
echo "[+] Symlinking useful scripts to /usr/bin"
rm -f /usr/local/bin/_posh-common
rm -f /usr/local/bin/fpc
rm -f /usr/local/bin/posh
rm -f /usr/local/bin/posh-server
rm -f /usr/local/bin/posh-config
rm -f /usr/local/bin/posh-log
rm -f /usr/local/bin/posh-service
rm -f /usr/local/bin/posh-stop-service
rm -f /usr/local/bin/posh-update
rm -f /usr/local/bin/posh-cookie-decryptor
rm -f /usr/local/bin/posh-project
rm -f /usr/local/bin/posh-api-server
ln -s "$POSH_DIR/resources/scripts/_posh-common" /usr/local/bin/_posh-common
ln -s "$POSH_DIR/resources/scripts/fpc" /usr/local/bin/fpc
ln -s "$POSH_DIR/resources/scripts/posh" /usr/local/bin/posh
ln -s "$POSH_DIR/resources/scripts/posh-server" /usr/local/bin/posh-server
ln -s "$POSH_DIR/resources/scripts/posh-config" /usr/local/bin/posh-config
ln -s "$POSH_DIR/resources/scripts/posh-log" /usr/local/bin/posh-log
ln -s "$POSH_DIR/resources/scripts/posh-service" /usr/local/bin/posh-service
ln -s "$POSH_DIR/resources/scripts/posh-stop-service" /usr/local/bin/posh-stop-service
ln -s "$POSH_DIR/resources/scripts/posh-update" /usr/local/bin/posh-update
ln -s "$POSH_DIR/resources/scripts/posh-cookie-decrypter" /usr/local/bin/posh-cookie-decryptor
ln -s "$POSH_DIR/resources/scripts/posh-project" /usr/local/bin/posh-project
ln -s "$POSH_DIR/resources/scripts/posh-api-server" /usr/local/bin/posh-api-server
chmod +x "$POSH_DIR/resources/scripts/fpc"
chmod +x "$POSH_DIR/resources/scripts/posh"
chmod +x "$POSH_DIR/resources/scripts/posh-server"
chmod +x "$POSH_DIR/resources/scripts/posh-config"
chmod +x "$POSH_DIR/resources/scripts/posh-log"
chmod +x "$POSH_DIR/resources/scripts/posh-service"
chmod +x "$POSH_DIR/resources/scripts/posh-stop-service"
chmod +x "$POSH_DIR/resources/scripts/posh-update"
chmod +x "$POSH_DIR/resources/scripts/posh-cookie-decrypter"
chmod +x "$POSH_DIR/resources/scripts/posh-project"
chmod +x "$POSH_DIR/resources/scripts/posh-api-server"
mkdir -p "/var/poshc2/"
cp "$POSH_DIR/resources/config-template.yml" "/var/poshc2/config-template.yml"
echo "[+] Adding service files"
cp "$POSH_DIR/resources/scripts/poshc2.service" /lib/systemd/system/poshc2.service
cp "$POSH_DIR/resources/scripts/poshc2.api.service" /lib/systemd/system/poshc2.api.service
echo ""
echo "[+] Setup complete"
echo """
__________ .__. _________ ________
\_______ \____ _____| |__ \_ ___ \ \_____ \\\\
| ___/ _ \/ ___/ | \ / \ \/ / ____/
| | ( <_>)___ \| Y \ \ \____/ \\\\
|____| \____/____ >___| / \______ /\_______ \\\\
\/ \/ \/ \/
================= www.PoshC2.co.uk ================"""
echo ""
echo "Create a new project with: "
echo "# posh-project -n <project-name>"
echo ""
echo "Then edit the config file - run: "
echo "# posh-config"
echo ""
echo "Then run:"
echo "# posh-server <-- This will run the C2 server, which communicates with Implants and receives task output"
echo "# posh <-- This will run the ImplantHandler, used to issue commands to the server and implants"
echo ""
echo "Other options:"
echo "posh-service <-- This will run the C2 server as a service instead of in the foreground"
echo "posh-stop-service <-- This will stop the service"
echo "posh-api-service <-- This will run the C2 API server as a service instead of in the foreground"
echo "posh-stop-api-service <-- This will stop the api service"
echo "posh-log <-- This will view the C2 log if the server is already running"
echo "fpc -c Seatbelt <-- This will query the C2 DB for the Command Seatbelt"
echo ""
echo "Add the following to your .bashrc or .zshrc to be able to quickly switch to the PoshC2 project directory using posh-dir"
echo "
function posh-dir(){
cd \`posh-project -g\`
}
"