diff --git a/tasks/install_tools.yml b/tasks/install_tools.yml index 370418f..a6a9eee 100644 --- a/tasks/install_tools.yml +++ b/tasks/install_tools.yml @@ -2,65 +2,122 @@ # 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: /home/{{ ansible_user }}/Tools + path: "{{ tools_dir }}" state: directory owner: "{{ ansible_user }}" group: "{{ ansible_user }}" mode: '0755' -- name: Ensure pipx path is configured +- 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 - become: true 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=$PATH:/root/.local/bin - pipx ensurepath + export PATH="{{ custom_path }}" pipx install git+https://github.com/Pennyw0rth/NetExec pipx install git+https://github.com/blacklanternsecurity/TREVORspray pipx install impacket - become: true - args: - executable: /bin/bash + 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 /home/{{ ansible_user }}/Tools/Kerbrute - wget https://github.com/ropnop/kerbrute/releases/latest/download/kerbrute_linux_amd64 -O /home/{{ ansible_user }}/Tools/Kerbrute/kerbrute - chmod +x /home/{{ ansible_user }}/Tools/Kerbrute/kerbrute - become: true + 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: /home/{{ ansible_user }}/Tools/Kerbrute/kerbrute + creates: "{{ tools_dir }}/Kerbrute/kerbrute" - name: Clone SharpCollection nightly builds git: repo: https://github.com/Flangvik/SharpCollection.git - dest: /home/{{ ansible_user }}/Tools/SharpCollection + dest: "{{ tools_dir }}/SharpCollection" version: master ignore_errors: yes - name: Clone PEASS-ng git: repo: https://github.com/carlospolop/PEASS-ng.git - dest: /home/{{ ansible_user }}/Tools/PEASS-ng + dest: "{{ tools_dir }}/PEASS-ng" ignore_errors: yes - name: Clone MailSniper git: repo: https://github.com/dafthack/MailSniper.git - dest: /home/{{ ansible_user }}/Tools/MailSniper + dest: "{{ tools_dir }}/MailSniper" ignore_errors: yes - name: Clone Inveigh git: repo: https://github.com/Kevin-Robertson/Inveigh.git - dest: /home/{{ ansible_user }}/Tools/Inveigh + dest: "{{ tools_dir }}/Inveigh" ignore_errors: yes - name: Install Sliver C2 server @@ -68,7 +125,9 @@ curl https://sliver.sh/install | bash systemctl enable sliver systemctl start sliver - become: true + args: + executable: /bin/bash + ignore_errors: yes - name: Install Metasploit Framework (Nightly Build) shell: | @@ -76,24 +135,37 @@ chmod 755 /tmp/msfinstall /tmp/msfinstall rm -f /tmp/msfinstall - become: true args: executable: /bin/bash creates: /usr/bin/msfconsole + ignore_errors: yes -- name: Grab GoPhish +- name: Ensure GoPhish directory exists + file: + path: "{{ tools_dir }}/gophish" + state: directory + mode: '0755' + +- name: Grab GoPhish latest release shell: | - curl -L "$(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')" -o /home/{{ ansible_user }}/Tools/gophish.zip - unzip /home/{{ ansible_user }}/Tools/gophish.zip -d /home/{{ ansible_user }}/Tools/gophish - rm -rf /home/{{ ansible_user }}/Tools/gophish.zip - chmod +x /home/{{ ansible_user }}/Tools/gophish/gophish + 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: /home/{{ ansible_user }}/Tools/gophish/gophish + creates: "{{ tools_dir }}/gophish/gophish" - name: Deploy Gophish config.json with custom admin port template: src: gophish-config.j2 - dest: /home/{{ ansible_user }}/Tools/gophish/config.json + dest: "{{ tools_dir }}/gophish/config.json" owner: "{{ ansible_user }}" group: "{{ ansible_user }}" mode: '0644' @@ -103,7 +175,7 @@ - name: Set proper ownership for Tools directory file: - path: /home/{{ ansible_user }}/Tools + path: "{{ tools_dir }}" owner: "{{ ansible_user }}" group: "{{ ansible_user }}" recurse: true