#!/bin/bash

# Usage: download <url> <destination file>
download () {
  tmpfile=$(mktemp /tmp/wget.XXXXXX)
  wget --no-verbose "$1" -O "$tmpfile"
  status=$?
  if [ $status -eq 0 ]; then
    if [ -f "$2" ]; then
      old_permissions=$(stat -c "%a" "$2")
      mv "$tmpfile" "$2"
      chmod "$old_permissions" "$2"
    else
      mv "$tmpfile" "$2"
    fi
  fi
}

# Usage: download_zip <url> <destination directory> [files]
download_zip () {
  tmpfile=$(mktemp /tmp/wget.XXXXXX)
  wget --no-verbose "$1" -O "$tmpfile"
  status=$?
  if [ $status -eq 0 ]; then
    unzip -o "$tmpfile" -d $2 "${@:3}"
  fi
}

# Usage: get_latest_version <url> <version prefix>
get_latest_version () {
  repository=$1
  prefix=$2
  location=$(curl -s -I https://github.com/$repository/releases/latest | grep -i "location: " | awk '{ print $2 }')
  if [[ "$location" =~ ^https://github.com/$repository/releases/tag/$prefix(.*) ]]; then
    version=${BASH_REMATCH[1]}
    version=${version%%[[:space:]]}
    echo $version
  fi
}

echo "Updating scripts…"
download https://raw.githubusercontent.com/initstring/uptux/master/uptux.py payloads/linux/uptux.py
download https://raw.githubusercontent.com/pentestmonkey/unix-privesc-check/master/upc.sh payloads/linux/unix-privesc-check.sh
download https://github.com/DominicBreuker/pspy/releases/latest/download/pspy64 payloads/linux/pspy64
download https://github.com/DominicBreuker/pspy/releases/latest/download/pspy32 payloads/linux/pspy
download https://raw.githubusercontent.com/flozz/p0wny-shell/master/shell.php payloads/web/p0wny-shell.php
download https://raw.githubusercontent.com/diego-treitos/linux-smart-enumeration/master/lse.sh payloads/linux/lse.sh
download https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh payloads/linux/linux-exploit-suggester.sh
download https://github.com/rebootuser/LinEnum/raw/master/LinEnum.sh payloads/linux/LinEnum.sh
download https://github.com/stealthcopter/deepce/raw/main/deepce.sh payloads/linux/deepce.sh

echo ""
echo "Updating LinPEAS + WinPEAS…"
peas_version=$(get_latest_version peass-ng/PEASS-ng)
if [ ! -z "$peas_version" ]; then
  echo "Got PEAS version: $peas_version"
  download https://github.com/peass-ng/PEASS-ng/releases/download/$peas_version/linpeas.sh payloads/linux/linpeas.sh
  download https://github.com/peass-ng/PEASS-ng/releases/download/$peas_version/winPEASx86.exe payloads/windows/winPEAS.exe
  download https://github.com/peass-ng/PEASS-ng/releases/download/$peas_version/winPEASx64.exe payloads/windows/winPEASx64.exe
  download https://github.com/peass-ng/PEASS-ng/releases/download/$peas_version/winPEAS.bat payloads/windows/winPEAS.bat
else
  echo "Unable to determine latest PEAS version"
fi

# TODO: add others
echo ""
echo "Updating windows tools…"
download https://live.sysinternals.com/accesschk.exe payloads/windows/accesschk.exe
download https://live.sysinternals.com/accesschk64.exe payloads/windows/accesschk64.exe
download https://github.com/int0x33/nc.exe/raw/master/nc.exe payloads/windows/nc.exe
download https://github.com/int0x33/nc.exe/raw/master/nc64.exe payloads/windows/nc64.exe
download https://github.com/k4sth4/Juicy-Potato/raw/main/x86/jp32.exe payloads/windows/JuicyPotato.exe
download https://github.com/k4sth4/Juicy-Potato/raw/main/x64/jp.exe payloads/windows/JuicyPotato64.exe
download https://github.com/uknowsec/SweetPotato/raw/master/SweetPotato-Webshell-new/bin/Release/SweetPotato.exe payloads/windows/SweetPotato.exe
download https://github.com/BeichenDream/GodPotato/releases/latest/download/GodPotato-NET4.exe payloads/windows/GodPotato.exe
download https://raw.githubusercontent.com/topotam/PetitPotam/main/PetitPotam.py tools/exploits/PetitPotam.py

echo ""
chisel_version=$(get_latest_version jpillora/chisel v)
if [ ! -z "$chisel_version" ]; then
  echo "Got Chisel version: $chisel_version"
  curl -s -L "https://github.com/jpillora/chisel/releases/download/v${chisel_version}/chisel_${chisel_version}_linux_386.gz" | gzip -d > payloads/linux/chisel
  curl -s -L "https://github.com/jpillora/chisel/releases/download/v${chisel_version}/chisel_${chisel_version}_linux_amd64.gz" | gzip -d > payloads/linux/chisel64
  curl -s -L "https://github.com/jpillora/chisel/releases/download/v${chisel_version}/chisel_${chisel_version}_windows_386.gz" | gzip -d > payloads/windows/chisel.exe
  curl -s -L "https://github.com/jpillora/chisel/releases/download/v${chisel_version}/chisel_${chisel_version}_windows_amd64.gz" | gzip -d > payloads/windows/chisel64.exe
else 
  echo "Unable to determine latest chisel version"
fi

sharphound_version=$(get_latest_version BloodHoundAD/SharpHound v)
if [ ! -z "$sharphound_version" ]; then
  echo "Got Sharphound version: $sharphound_version"
  download_zip https://github.com/BloodHoundAD/SharpHound/releases/download/v${sharphound_version}/SharpHound-v${sharphound_version}.zip payloads/windows/ SharpHound.exe SharpHound.ps1
fi

socat_version=$(get_latest_version "3ndG4me/socat" v)
if [ ! -z "$socat_version" ]; then
  echo "Got socat version: $socat_version"
  download https://github.com/3ndG4me/socat/releases/download/v${socat_version}/socatx86.bin payloads/linux/socat
  download https://github.com/3ndG4me/socat/releases/download/v${socat_version}/socatx64.bin payloads/linux/socat64
  download https://github.com/3ndG4me/socat/releases/download/v${socat_version}/socatx86.exe payloads/windows/socat.exe
  download https://github.com/3ndG4me/socat/releases/download/v${socat_version}/socatx64.exe payloads/windows/socat64.exe
fi