Initial public portfolio release

Sanitized version of red team infrastructure automation platform.
Operational content (implant pipelines, lures, credential capture)
replaced with documented stubs. Architecture and infrastructure
automation code intact.
This commit is contained in:
Operator
2026-06-23 16:12:14 -04:00
commit 98103466d8
239 changed files with 40012 additions and 0 deletions
@@ -0,0 +1,752 @@
---
# Attack Box Configuration Tasks
# Creates /root/<deployment_id> workspace structure
- name: Set user variables for headless deployment
ansible.builtin.set_fact:
target_user: "root"
user_home: "/root"
# Always use deployment_id for directory name (no hardcoded operator aliases)
work_dir: "{{ work_dir | default('/root/' + deployment_id) }}"
tool_name: "{{ tool_name | default('toolkit' if enhanced_opsec | default(false) else 'trashpanda') }}"
project_name: "{{ project_name | default(deployment_id) }}"
- name: Display attack box configuration start
debug:
msg: |
================================================================
ATTACK BOX CONFIGURATION STARTED
================================================================
Deployment ID: {{ deployment_id }}
Target: {{ ansible_host }}
OPSEC Mode: {{ 'Enhanced' if enhanced_opsec | default(false) else 'Standard' }}
Working Directory: {{ work_dir }}
Configuration Steps:
1. Create {{ 'secure' if enhanced_opsec | default(false) else 'TrashPanda' }} directory structure
2. Install base packages (~100 packages)
3. Install pipx and Python tools (~30 tools)
4. Install Go tools (~12 tools)
5. Clone Git repositories (~20 repositories)
6. Configure scripts and automation
7. Set up PATH and environment
This process may take 30-60 minutes depending on network speed.
Progress will be displayed for each step.
================================================================
- name: Record configuration start time
set_fact:
config_start_time: "{{ ansible_date_time.epoch }}"
- name: Create TrashPanda directory structure
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0755'
loop:
# Main TrashPanda directories (exactly like trashpanda.py)
- "{{ work_dir }}"
- "{{ work_dir }}/tools"
- "{{ work_dir }}/scans"
- "{{ work_dir }}/logs"
- "{{ work_dir }}/loot"
- "{{ work_dir }}/payloads"
- "{{ work_dir }}/targets"
- "{{ work_dir }}/screenshots"
- "{{ work_dir }}/reports"
- "{{ work_dir }}/notes"
- "{{ work_dir }}/exploits"
- "{{ work_dir }}/wordlists"
- "{{ work_dir }}/pcaps"
# Scan subdirectories (exactly like trashpanda.py)
- "{{ work_dir }}/scans/nmap"
- "{{ work_dir }}/scans/dns"
- "{{ work_dir }}/scans/snmp"
- "{{ work_dir }}/scans/smb"
- "{{ work_dir }}/scans/web"
- "{{ work_dir }}/scans/ssl"
- "{{ work_dir }}/scans/vulns"
- "{{ work_dir }}/scans/ldap"
- "{{ work_dir }}/scans/ftp"
- "{{ work_dir }}/scans/ssh"
- "{{ work_dir }}/scans/databases"
- "{{ work_dir }}/scans/custom"
- "{{ work_dir }}/scans/reachability"
# Loot subdirectories (exactly like trashpanda.py)
- "{{ work_dir }}/loot/credentials"
- "{{ work_dir }}/loot/hashes"
- "{{ work_dir }}/loot/keys"
- "{{ work_dir }}/loot/configs"
- "{{ work_dir }}/loot/databases"
- "{{ work_dir }}/loot/files"
# Tools subdirectories for organization
- "{{ work_dir }}/tools/scripts"
- "{{ work_dir }}/tools/windows"
- "{{ work_dir }}/tools/linux"
- "{{ work_dir }}/tools/web"
- "{{ work_dir }}/tools/wireless"
- "{{ work_dir }}/tools/privesc"
# Attack Box Configuration
# Uses TrashPanda directory structure under /root/<deployment_id>
- name: Update package cache only (avoid grub-pc issues)
apt:
update_cache: yes
cache_valid_time: 3600
retries: 3
delay: 10
- name: Install base packages with progress feedback
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- curl
- wget
- git
- vim
- htop
- screen
- tmux
- python3
- python3-pip
- python3-venv
- python3-dev
- build-essential
- binutils
- hashcat
- john
- hydra
- aircrack-ng
- recon-ng
- exploitdb
- gobuster
- dirb
- nikto
- whatweb
- wapiti
- uniscan
- theharvester
- dnsenum
- dnsmap
- dnsutils
- whois
- netcat-traditional
- netcat-openbsd
- socat
- ncat
- nmap
- masscan
- unicornscan
- hping3
- tcpdump
- tshark
- dsniff
- arp-scan
- nbtscan
- enum4linux
- smbclient
- rpcclient
- showmount
- rpcinfo
- snmp
- snmp-mibs-downloader
- onesixtyone
- ldap-utils
- sslscan
- sslyze
- testssl.sh
- openssl
- ike-scan
- sleuthkit
- autopsy
- foremost
- scalpel
- binwalk
- exiftool
- steghide
- outguess
- stegosuite
- hexedit
- ghex
- bless
- radare2
- gdb
- valgrind
- ltrace
- strace
- lsof
- psmisc
- tree
- file
- less
- most
- unzip
- p7zip-full
- rar
- unrar
- cabextract
- cpio
- binutils-dev
- libc6-dev
- gcc
- g++
- make
- cmake
- autoconf
- automake
- libtool
- pkg-config
- libssl-dev
- libffi-dev
- libxml2-dev
- libxslt1-dev
- zlib1g-dev
- libjpeg-dev
- libpng-dev
- libgif-dev
- libfreetype6-dev
- libmagic-dev
- libpcap-dev
- libnetfilter-queue-dev
- libnfnetlink-dev
- libdnet-dev
- libpcre3-dev
- libgtk2.0-dev
- libgtk-3-dev
register: apt_install_result
ignore_errors: true
- name: Show package installation progress
debug:
msg: "Package {{ item.item }} installation: {{ 'SUCCESS' if item.changed else 'ALREADY INSTALLED' }}"
loop: "{{ apt_install_result.results }}"
when: apt_install_result.results is defined
- name: Check if pipx is available
ansible.builtin.command: pipx --version
register: pipx_version_check
failed_when: false
- name: Install pipx if not available
ansible.builtin.apt:
name: pipx
state: present
update_cache: yes
when: pipx_version_check.rc != 0
retries: 2
delay: 5
- name: Display pipx availability
debug:
msg: "Pipx version: {{ pipx_version_check.stdout if pipx_version_check.rc == 0 else 'Pipx was not found but has been installed' }}"
- name: Ensure pipx is properly configured
ansible.builtin.shell: pipx ensurepath
args:
executable: /bin/bash
register: pipx_ensurepath_result
failed_when: false
- name: Display pipx configuration result
debug:
msg: "Pipx ensurepath: {{ pipx_ensurepath_result.stdout }}"
- name: Upload pipx tools installation script
ansible.builtin.copy:
src: "../../modules/attack-box/files/install_pipx_tools.sh"
dest: /tmp/install_pipx_tools.sh
mode: '0755'
- name: Execute pipx tools installation script
ansible.builtin.shell: /tmp/install_pipx_tools.sh
register: pipx_install_result
ignore_errors: true
- name: Display pipx installation summary
debug:
msg: |
Pipx installation completed!
Check the detailed output above for individual tool status.
Full output captured in deployment logs.
- name: Display pipx installation status
debug:
msg: "Pipx installation {{ 'completed successfully' if pipx_install_result.rc == 0 else 'completed with some failures' }}"
when: pipx_install_result is defined
- name: Install additional Python packages via pip3 (for libraries)
ansible.builtin.pip:
name:
- requests
- beautifulsoup4
- lxml
- selenium
- paramiko
- capstone
- keystone-engine
- unicorn
- dnspython
- netaddr
- python-nmap
state: present
executable: pip3
retries: 2
delay: 5
ignore_errors: true
- name: Check if Go is available
ansible.builtin.command: go version
register: go_version_check
failed_when: false
- name: Display Go version
debug:
msg: "Go version: {{ go_version_check.stdout if go_version_check.rc == 0 else 'Go not found - skipping Go tools installation' }}"
- name: Upload Go tools installation script
ansible.builtin.copy:
src: "../files/install_go_tools.sh"
dest: /tmp/install_go_tools.sh
mode: '0755'
- name: Execute Go tools installation script
ansible.builtin.shell: WORK_DIR="{{ work_dir }}" /tmp/install_go_tools.sh
register: go_install_result
when: go_version_check.rc == 0
ignore_errors: true
- name: Display Go tools installation summary
debug:
msg: |
Go tools installation completed!
Check the detailed output above for individual tool status.
Full output captured in deployment logs.
- name: Configure PATH for all installed tools
ansible.builtin.blockinfile:
path: /root/.bashrc
block: |
# Attack Box Tool Paths
export WORK_DIR="{{ work_dir }}"
export GOPATH="{{ work_dir }}/tools/go"
export PATH="$PATH:/root/.local/bin" # pipx tools
export PATH="$PATH:/usr/local/go/bin" # Go binary
export PATH="$PATH:$GOPATH/bin" # Go tools
export PATH="$PATH:{{ work_dir }}/tools" # Custom tools
export PATH="$PATH:/opt/metasploit-framework/bin" # Metasploit
# Useful aliases for attack box
alias workspace="cd {{ work_dir }}"
alias tools="cd {{ work_dir }}/tools"
alias scans="cd {{ work_dir }}/scans"
alias loot="cd {{ work_dir }}/loot"
alias trashpanda="python3 {{ work_dir }}/tools/{{ tool_name }}.py"
alias ll="ls -la"
alias la="ls -la"
# Persistent tmux socket (prevents /tmp cleanup from killing sessions)
export TMUX_TMPDIR="/root/.local/share/tmux"
marker: "# {mark} ATTACK BOX CONFIGURATION"
create: yes
- name: Create persistent tmux socket directory
ansible.builtin.file:
path: /root/.local/share/tmux
state: directory
mode: '0700'
- name: Source bashrc to apply PATH changes
ansible.builtin.shell: source /root/.bashrc
args:
executable: /bin/bash
- name: Upload Git repositories cloning script
ansible.builtin.copy:
src: "../files/install_git_repos.sh"
dest: /tmp/install_git_repos.sh
mode: '0755'
- name: Execute Git repositories cloning script
ansible.builtin.shell: WORK_DIR="{{ work_dir }}" /tmp/install_git_repos.sh
register: git_clone_result
ignore_errors: true
- name: Display Git repositories cloning summary
debug:
msg: |
Git repositories cloning completed!
Check the detailed output above for individual repository status.
Full output captured in deployment logs.
- name: Install Metasploit (latest nightly build)
shell: |
cd /tmp
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
./msfinstall
args:
creates: /opt/metasploit-framework/bin/msfconsole
- name: Copy TrashPanda tool to workspace directory
copy:
src: "../files/{{ tool_name }}.py"
dest: "{{ work_dir }}/tools/{{ tool_name }}.py"
mode: '0755'
owner: "{{ target_user }}"
group: "{{ target_user }}"
when: not (enhanced_opsec | default(false))
- name: Copy OPSEC monitoring scripts
copy:
src: "{{ item }}"
dest: "{{ work_dir }}/tools/scripts/"
mode: '0755'
owner: "{{ target_user }}"
group: "{{ target_user }}"
loop:
- "../files/opsec-check.sh"
- "../files/emergency-wipe.sh"
- "../files/trash-cleanup.sh"
- name: Copy OPSEC-aware shell aliases
copy:
src: "../files/clean-shell-aliases"
dest: "{{ work_dir }}/tools/scripts/shell-aliases"
mode: '0644'
owner: "{{ target_user }}"
group: "{{ target_user }}"
when: enhanced_opsec | default(false)
- name: Copy automation scripts to tools directory
copy:
src: "{{ item }}"
dest: "{{ work_dir }}/tools/scripts/"
mode: '0755'
owner: "{{ target_user }}"
group: "{{ target_user }}"
with_fileglob:
- "../files/*.sh"
- "../files/*.py"
when: not (enhanced_opsec | default(false))
- name: Create engagement log file
copy:
content: |
# Engagement Log - {{ ansible_date_time.iso8601 }}
# Attack Box Deployment: {{ attack_box_name | default('attack-box') }}
# IP Address: {{ ansible_default_ipv4.address | default('N/A') }}
#
# Directory Structure:
# {{ work_dir }}/tools/ - Downloaded/compiled tools and scripts
# {{ work_dir }}/scans/ - All scan results organized by type
# {{ work_dir }}/logs/ - Execution logs and debug output
# {{ work_dir }}/loot/ - Extracted credentials, hashes, and sensitive data
# {{ work_dir }}/payloads/ - Custom payloads and exploit code
# {{ work_dir }}/targets/ - Target lists and reconnaissance data
# {{ work_dir }}/screenshots/ - Visual evidence and GUI captures
# {{ work_dir }}/reports/ - Draft reports and documentation
# {{ work_dir }}/notes/ - Manual notes and observations
# {{ work_dir }}/exploits/ - Working exploits and proof-of-concepts
# {{ work_dir }}/wordlists/ - Custom and downloaded wordlists
# {{ work_dir }}/pcaps/ - Network captures and traffic analysis
#
# Log started: {{ ansible_date_time.iso8601 }}
dest: "{{ work_dir }}/logs/engagement.log"
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0644'
- name: Create initial target template
copy:
content: |
# Target List Template
# Add targets one per line in various formats:
#
# Individual IPs:
# 192.168.1.10
# 10.0.0.5
#
# IP Ranges:
# 192.168.1.1-254
# 10.0.0.1-50
#
# CIDR Notation:
# 192.168.1.0/24
# 10.0.0.0/16
#
# Hostnames:
# target.example.com
# www.example.com
dest: "{{ work_dir }}/targets/targets.txt"
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0644'
force: no
- name: Create bash aliases for workflow (OPSEC mode)
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- "# Attack Box Aliases"
- "export WORK_DIR='{{ work_dir }}'"
- "alias ops='cd {{ work_dir }}'"
- "alias tools='cd {{ work_dir }}/tools'"
- "alias scans='cd {{ work_dir }}/scans'"
- "alias loot='cd {{ work_dir }}/loot'"
- "alias targets='cd {{ work_dir }}/targets'"
- "alias reports='cd {{ work_dir }}/reports'"
- "alias logs='cd {{ work_dir }}/logs'"
- "alias toolkit='python3 {{ work_dir }}/tools/toolkit.py'"
- "alias recon='{{ work_dir }}/tools/scripts/recon_automation.sh'"
- "alias portscan='{{ work_dir }}/tools/scripts/port_scan_automation.sh'"
- "alias webenum='{{ work_dir }}/tools/scripts/web_enum_automation.sh'"
- "alias attack-menu='{{ work_dir }}/tools/scripts/manual_testing_menu.sh'"
- "alias opsec='{{ work_dir }}/tools/scripts/opsec-check.sh'"
- "alias panic='{{ work_dir }}/tools/scripts/emergency-wipe.sh'"
- "alias clean='{{ work_dir }}/tools/scripts/trash-cleanup.sh'"
when: enhanced_opsec | default(false)
- name: Create bash aliases for workflow (Standard mode)
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- "# Attack Box Aliases"
- "export WORK_DIR='{{ work_dir }}'"
- "alias workspace='cd {{ work_dir }}'"
- "alias tools='cd {{ work_dir }}/tools'"
- "alias scans='cd {{ work_dir }}/scans'"
- "alias loot='cd {{ work_dir }}/loot'"
- "alias targets='cd {{ work_dir }}/targets'"
- "alias reports='cd {{ work_dir }}/reports'"
- "alias logs='cd {{ work_dir }}/logs'"
- "alias trashpanda='python3 {{ work_dir }}/tools/{{ tool_name }}.py'"
- "alias recon='{{ work_dir }}/tools/scripts/recon_automation.sh'"
- "alias portscan='{{ work_dir }}/tools/scripts/port_scan_automation.sh'"
- "alias webenum='{{ work_dir }}/tools/scripts/web_enum_automation.sh'"
- "alias attack-menu='{{ work_dir }}/tools/scripts/manual_testing_menu.sh'"
when: not (enhanced_opsec | default(false))
- name: Set Go path in bashrc
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- "export GOPATH={{ work_dir }}/tools/go"
- "export PATH=$PATH:{{ work_dir }}/tools/go/bin"
- name: Load OPSEC shell aliases (Enhanced OPSEC mode)
blockinfile:
path: "{{ user_home }}/.bashrc"
block: |
# OPSEC-aware shell aliases
source {{ work_dir }}/tools/scripts/shell-aliases
marker: "# {mark} OPSEC SHELL ALIASES"
create: yes
when: enhanced_opsec | default(false)
- name: Configure hardened SSH (Enhanced OPSEC mode)
blockinfile:
path: "/etc/ssh/sshd_config"
block: |
# OPSEC hardened SSH configuration
LogLevel QUIET
TCPKeepAlive no
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 60
marker: "# {mark} OPSEC SSH HARDENING"
backup: yes
when: enhanced_opsec | default(false)
register: ssh_config_changed
- name: Restart SSH service if configuration changed
service:
name: ssh
state: restarted
when: enhanced_opsec | default(false) and ssh_config_changed.changed
- name: Disable bash history for OPSEC (Enhanced OPSEC mode)
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "{{ item }}"
create: yes
loop:
- "# OPSEC: Minimize command history"
- "export HISTSIZE=100"
- "export HISTFILESIZE=100"
- "export HISTCONTROL=ignoreboth:erasedups"
when: enhanced_opsec | default(false)
- name: Set up Tor if requested
block:
- name: Configure Tor
copy:
content: |
SocksPort 9050
ControlPort 9051
CookieAuthentication 1
DataDirectory /var/lib/tor
dest: /etc/tor/torrc
backup: yes
- name: Start and enable Tor
systemd:
name: tor
state: started
enabled: yes
- name: Configure proxychains for Tor
replace:
path: /etc/proxychains4.conf
regexp: '^socks4.*127\.0\.0\.1.*9050.*$'
replace: 'socks5 127.0.0.1 9050'
when: setup_tor | default(false)
- name: Create themes directory
ansible.builtin.file:
path: "{{ work_dir }}/tools/themes"
state: directory
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0755'
- name: Upload terminal theme installer script
ansible.builtin.copy:
src: "../files/install_terminal_themes.sh"
dest: "{{ work_dir }}/tools/scripts/install_terminal_themes.sh"
mode: '0755'
owner: "{{ target_user }}"
group: "{{ target_user }}"
- name: Upload DC27 dconf theme file
ansible.builtin.copy:
src: "../files/dc27-theme.dconf"
dest: "{{ work_dir }}/tools/themes/dc27-theme.dconf"
mode: '0644'
owner: "{{ target_user }}"
group: "{{ target_user }}"
- name: Add terminal theme alias to bashrc
lineinfile:
path: "{{ user_home }}/.bashrc"
line: "alias install-themes='WORK_DIR={{ work_dir }} {{ work_dir }}/tools/scripts/install_terminal_themes.sh'"
create: yes
- name: Execute terminal theme installer during deployment
ansible.builtin.shell: WORK_DIR="{{ work_dir }}" {{ work_dir }}/tools/scripts/install_terminal_themes.sh
args:
executable: /bin/bash
register: theme_install_result
when: install_terminal_themes | default(false)
ignore_errors: true
- name: Display terminal theme installation result
debug:
msg: "Terminal themes {{ 'installed' if theme_install_result.rc == 0 else 'installation had issues (non-critical)' }}"
when: install_terminal_themes | default(false) and theme_install_result is defined
- name: Update locate database
command: updatedb
ignore_errors: true
- name: Calculate configuration duration
set_fact:
config_end_time: "{{ ansible_date_time.epoch }}"
config_duration: "{{ (ansible_date_time.epoch|int - config_start_time|int) // 60 }}"
- name: Display attack box configuration summary
debug:
msg: |
================================================================
ATTACK BOX CONFIGURATION COMPLETED
================================================================
Deployment ID: {{ deployment_id }}
Target: {{ ansible_host }}
Configuration Duration: {{ config_duration }} minutes
Directory Structure: {{ work_dir }}
├── docs/ - Documentation and notes
├── exploits/ - Exploit development
├── loot/ - Extracted data and findings
├── reports/ - Assessment reports
├── scripts/ - Custom automation scripts
├── tools/ - Security tools
│ ├── go/bin/ - Go-based tools
│ └── git/ - Git repositories
└── wordlists/ - Custom wordlists
Tools Installed:
- Base packages: ~100 security tools
- Python tools: ~30 tools via pipx
- Go tools: ~12 reconnaissance tools
- Git repositories: ~20 tool repositories
Environment:
- PATH configured for all tools
- pipx tools accessible system-wide
- Go tools in {{ work_dir }}/tools/go/bin
Next Steps:
1. SSH into the box: ssh -i a-{{ deployment_id }} root@{{ ansible_host }}
2. Navigate to working directory: cd {{ work_dir }}
3. Start your assessment activities
================================================================
- name: Display setup completion information (OPSEC mode)
debug:
msg:
- "Attack Box Setup Complete!"
- ""
- "Main Directory: {{ work_dir }}"
- "Tools Location: {{ work_dir }}/tools"
- "Scan Results: {{ work_dir }}/scans"
- "Loot Storage: {{ work_dir }}/loot"
- ""
- "Quick Commands:"
- " ops - Go to main directory"
- " toolkit [targets] - Run toolkit enumeration"
- " recon <target> - Run reconnaissance automation"
- " portscan <target> - Run port scan automation"
- " webenum <target> - Run web enumeration automation"
- " attack-menu - Launch manual testing menu"
- " opsec - Check OPSEC status"
- " panic - Emergency sanitization"
- " clean - Clean operational artifacts"
- ""
- "Start here: {{ work_dir }}/targets/targets.txt"
when: enhanced_opsec | default(false)
- name: Display setup completion information (Standard mode)
debug:
msg:
- "TrashPanda Attack Box Setup Complete!"
- ""
- "Main Directory: {{ work_dir }}"
- "Tools Location: {{ work_dir }}/tools"
- "Scan Results: {{ work_dir }}/scans"
- "Loot Storage: {{ work_dir }}/loot"
- ""
- "Quick Commands:"
- " workspace - Go to main directory"
- " trashpanda [targets] - Run TrashPanda enumeration"
- " recon <target> - Run reconnaissance automation"
- " portscan <target> - Run port scan automation"
- " webenum <target> - Run web enumeration automation"
- " attack-menu - Launch manual testing menu"
- ""
- "Start here: {{ work_dir }}/targets/targets.txt"
when: not (enhanced_opsec | default(false))
@@ -0,0 +1,263 @@
---
# Quick Recon Box Configuration - OPSEC + Basic Tools
# Includes Tor, VPN, and basic reconnaissance tools only
- name: Record configuration start time
set_fact:
config_start_time: "{{ ansible_date_time.epoch }}"
- name: Display quick recon box configuration info
debug:
msg: |
================================================================
CONFIGURING QUICK RECON BOX
================================================================
Deployment ID: {{ deployment_id }}
Attack Box Name: {{ attack_box_name }}
Target: OPSEC-focused reconnaissance with basic tools
Features: Tor + VPN + Basic Tools (no complex installations)
================================================================
# Set up variables
- name: Set common variables
set_fact:
target_user: "root"
work_dir: "{{ work_dir | default('/root/' + deployment_id) }}"
deployment_id: "{{ deployment_id }}"
attack_box_name: "{{ attack_box_name }}"
# Core directories
- name: Create core working directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0755'
loop:
- "{{ work_dir }}"
- "{{ work_dir }}/scans"
- "{{ work_dir }}/loot"
- "{{ work_dir }}/notes"
- "/root/tools"
# Update system and install essential packages
- name: Update package cache
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 3600
- name: Install minimal essential tools + OPSEC packages
ansible.builtin.apt:
name:
# Core system tools
- curl
- wget
- git
- vim
- tmux
- htop
- unzip
- python3
- jq
# Basic network reconnaissance
- nmap
- dnsutils
- whois
- netcat-traditional
- traceroute
# OPSEC tools
- tor
- torsocks
- proxychains4
- openvpn
- easy-rsa
state: present
install_recommends: no
- name: Configure Tor for anonymous reconnaissance
ansible.builtin.copy:
content: |
# Tor configuration for Quick Recon Box
DataDirectory /var/lib/tor
PidFile /var/run/tor/tor.pid
RunAsDaemon 1
User debian-tor
Log notice file /var/log/tor/notices.log
SocksPort 9050
SocksPolicy accept *
ControlPort 9051
CookieAuthentication 1
NewCircuitPeriod 30
MaxCircuitDirtiness 600
UseEntryGuards 1
ExitPolicy accept *:53
ExitPolicy accept *:80
ExitPolicy accept *:443
ExitPolicy accept *:993
ExitPolicy accept *:995
ExitPolicy reject *:*
CircuitBuildTimeout 10
LearnCircuitBuildTimeout 0
dest: /etc/tor/torrc
backup: yes
- name: Configure proxychains for Tor routing
ansible.builtin.copy:
content: |
# Proxychains configuration for Tor
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode
[ProxyList]
socks4 127.0.0.1 9050
dest: /etc/proxychains4.conf
backup: yes
- name: Start and enable Tor service
ansible.builtin.systemd:
name: tor
state: started
enabled: yes
# VPN Setup
- name: Create OpenVPN directory structure
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- /etc/openvpn/server
- /etc/openvpn/client
- "{{ work_dir }}/vpn"
- name: Generate basic OpenVPN server config for quick recon
ansible.builtin.copy:
content: |
port 1194
proto udp
dev tun
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
explicit-exit-notify 1
dest: /etc/openvpn/server/quick-recon.conf
mode: '0644'
when: setup_vpn | default(false) | bool
- name: Create VPN client template
ansible.builtin.copy:
content: |
# Quick Recon VPN Client Config
# Server: {{ ansible_default_ipv4.address }}
# Generated: {{ ansible_date_time.iso8601 }}
client
dev tun
proto udp
remote {{ ansible_default_ipv4.address }} 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
verb 3
# Add certificates here:
# <ca>
# </ca>
# <cert>
# </cert>
# <key>
# </key>
dest: "{{ work_dir }}/vpn/quick-recon-client.ovpn"
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: '0644'
when: setup_vpn | default(false) | bool
# No domain/nginx setup for Quick Recon Box - keep it minimal
- name: Create quick aliases for OPSEC operations
ansible.builtin.lineinfile:
path: "/root/.bashrc"
line: "{{ item }}"
create: yes
loop:
- "# Quick Recon Box Aliases"
- "alias qr='cd {{ work_dir }}'"
- "alias tor-nmap='torsocks nmap'"
- "alias tor-curl='torsocks curl'"
- "alias check-tor='curl --socks5 127.0.0.1:9050 https://check.torproject.org/api/ip'"
- "export TMUX_TMPDIR=/root/.local/share/tmux"
- name: Create persistent tmux socket directory
ansible.builtin.file:
path: /root/.local/share/tmux
state: directory
mode: '0700'
- name: Create simple quick reference
ansible.builtin.copy:
content: |
# Quick Recon Box
## Basic Tools Installed:
- nmap, netcat, curl, wget, dig, whois, traceroute, python3
- tor + torsocks (anonymous operations)
{% if setup_vpn | default(false) %}- openvpn (VPN server){% endif %}
## Quick Commands:
- tor-nmap target.com # Anonymous nmap scan
- tor-curl target.com # Anonymous web request
- check-tor # Verify Tor connection
- qr # Go to working directory
## Working Directory: {{ work_dir }}
- Scans: {{ work_dir }}/scans/
- Notes: {{ work_dir }}/notes/
- Loot: {{ work_dir }}/loot/
Add tools as needed: apt install <tool>
dest: /root/QUICK_RECON_GUIDE.txt
mode: '0644'
- name: Final setup completion message
debug:
msg: |
================================================================
QUICK RECON BOX SETUP COMPLETE!
================================================================
Basic tools installed:
✓ nmap, netcat, curl, wget, dig, whois, traceroute
✓ python3, git, vim, tmux, jq
OPSEC features enabled:
✓ Tor proxy (localhost:9050)
✓ Torsocks for anonymous operations
✓ Proxychains4 configured
{% if setup_vpn | default(false) %}✓ OpenVPN server ready{% endif %}
{% if setup_domain | default(false) %}✓ Domain {{ domain }} configured{% endif %}
Quick commands:
✓ tor-nmap, tor-curl, tor-dig for anonymous recon
✓ check-tor to verify anonymity
✓ qr to go to working directory
Quick Reference: /root/QUICK_RECON_GUIDE.txt
Working Directory: {{ work_dir }}
Ready for additional tool installation as needed!
================================================================