--- # Common task for installing offensive security tools # Shared across all providers - name: Determine home directory path set_fact: home_dir: "{{ (ansible_user == 'root') | ternary('/root', '/home/' + ansible_user) }}" tools_dir: "{{ (ansible_user == 'root') | ternary('/root/Tools', '/home/' + ansible_user + '/Tools') }}" - name: Create Tools directory file: path: "{{ tools_dir }}" state: directory owner: "{{ ansible_user }}" group: "{{ ansible_user }}" mode: '0755' - name: Install base dependencies apt: name: - python3-pip - python3-venv - pipx - curl - wget - git - jq - unzip - tmux state: present update_cache: yes - name: Check if pipx is installed command: which pipx register: pipx_check ignore_errors: true changed_when: false - name: Configure pipx path shell: | export PATH="$PATH:{{ home_dir }}/.local/bin" pipx ensurepath args: executable: /bin/bash register: pipx_path_result until: pipx_path_result is success retries: 3 delay: 5 when: pipx_check.rc == 0 - name: Set PATH for subsequent operations set_fact: custom_path: "{{ home_dir }}/.local/bin:{{ ansible_env.PATH }}" - name: Install tools via pipx shell: | export PATH="{{ custom_path }}" pipx install git+https://github.com/Pennyw0rth/NetExec pipx install git+https://github.com/blacklanternsecurity/TREVORspray pipx install impacket environment: PATH: "{{ custom_path }}" register: pipx_install_result until: pipx_install_result is success retries: 3 delay: 5 - name: Install offensive security tools apt: name: - nmap - tcpdump - hydra - john - hashcat - sqlmap - gobuster - dirb - enum4linux - dnsenum - seclists - responder - golang - proxychains - tor - crackmapexec state: present - name: Download Kerbrute shell: | mkdir -p {{ tools_dir }}/Kerbrute wget https://github.com/ropnop/kerbrute/releases/latest/download/kerbrute_linux_amd64 -O {{ tools_dir }}/Kerbrute/kerbrute chmod +x {{ tools_dir }}/Kerbrute/kerbrute args: executable: /bin/bash creates: "{{ tools_dir }}/Kerbrute/kerbrute" - name: Clone SharpCollection nightly builds git: repo: https://github.com/Flangvik/SharpCollection.git dest: "{{ tools_dir }}/SharpCollection" version: master ignore_errors: yes - name: Clone PEASS-ng git: repo: https://github.com/carlospolop/PEASS-ng.git dest: "{{ tools_dir }}/PEASS-ng" ignore_errors: yes - name: Clone MailSniper git: repo: https://github.com/dafthack/MailSniper.git dest: "{{ tools_dir }}/MailSniper" ignore_errors: yes - name: Clone Inveigh git: repo: https://github.com/Kevin-Robertson/Inveigh.git dest: "{{ tools_dir }}/Inveigh" ignore_errors: yes - name: Install Sliver C2 server shell: | curl https://sliver.sh/install | bash systemctl enable sliver systemctl start sliver args: executable: /bin/bash ignore_errors: yes - name: Install Metasploit Framework (Nightly Build) shell: | curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > /tmp/msfinstall chmod 755 /tmp/msfinstall /tmp/msfinstall rm -f /tmp/msfinstall args: executable: /bin/bash creates: /usr/bin/msfconsole ignore_errors: yes - name: Ensure GoPhish directory exists file: path: "{{ tools_dir }}/gophish" state: directory mode: '0755' - name: Grab GoPhish latest release shell: | curl -s https://api.github.com/repos/gophish/gophish/releases/latest | jq -r '.assets[] | select(.browser_download_url | contains("linux-64bit.zip")) | .browser_download_url' register: gophish_url failed_when: gophish_url.stdout == "" changed_when: false - name: Download and install GoPhish shell: | curl -L "{{ gophish_url.stdout }}" -o {{ tools_dir }}/gophish.zip unzip {{ tools_dir }}/gophish.zip -d {{ tools_dir }}/gophish rm -f {{ tools_dir }}/gophish.zip chmod +x {{ tools_dir }}/gophish/gophish args: creates: "{{ tools_dir }}/gophish/gophish" - name: Deploy Gophish config.json with custom admin port template: src: "../templates/gophish-config.j2" dest: "{{ tools_dir }}/gophish/config.json" owner: "{{ ansible_user }}" group: "{{ ansible_user }}" mode: '0644' vars: gophish_admin_port: "{{ gophish_admin_port }}" domain: "{{ domain }}" - name: Set proper ownership for Tools directory file: path: "{{ tools_dir }}" owner: "{{ ansible_user }}" group: "{{ ansible_user }}" recurse: true mode: '0755'