Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hydra_ Vision #2360

Closed
kaddbkdfbk opened this issue May 18, 2023 · 0 comments
Closed

Hydra_ Vision #2360

kaddbkdfbk opened this issue May 18, 2023 · 0 comments
Labels

Comments

@kaddbkdfbk
Copy link

VERSION=2020011601
BASE_URL=https://kali.download/nethunter-images/current/rootfs
USERNAME=kali

function unsupported_arch() {
printf "${red}"
echo "[*] Unsupported Architecture\n\n"
printf "${reset}"
exit
}

function ask() {
# http:https://djm.me/ask
while true; do

    if [ "${2:-}" = "Y" ]; then
        prompt="Y/n"
        default=Y
    elif [ "${2:-}" = "N" ]; then
        prompt="y/N"
        default=N
    else
        prompt="y/n"
        default=
    fi

    # Ask the question
    printf "${light_cyan}\n[?] "
    read -p "$1 [$prompt] " REPLY

    # Default?
    if [ -z "$REPLY" ]; then
        REPLY=$default
    fi

    printf "${reset}"

    # Check if the reply is valid
    case "$REPLY" in
        Y*|y*) return 0 ;;
        N*|n*) return 1 ;;
    esac
done

}

function get_arch() {
printf "${blue}[*] Checking device architecture ..."
case $(getprop ro.product.cpu.abi) in
arm64-v8a)
SYS_ARCH=arm64
;;
armeabi|armeabi-v7a)
SYS_ARCH=armhf
;;
*)
unsupported_arch
;;
esac
}

function set_strings() {
echo
&& echo ""
####
if [[ ${SYS_ARCH} == "arm64" ]];
then
echo "[1] NetHunter ARM64 (full)"
echo "[2] NetHunter ARM64 (minimal)"
echo "[3] NetHunter ARM64 (nano)"
read -p "Enter the image you want to install: " wimg
if (( $wimg == "1" ));
then
wimg="full"
elif (( $wimg == "2" ));
then
wimg="minimal"
elif (( $wimg == "3" ));
then
wimg="nano"
else
wimg="full"
fi
elif [[ ${SYS_ARCH} == "armhf" ]];
then
echo "[1] NetHunter ARMhf (minimal)"
echo "[2] NetHunter ARMhf (nano)"
read -p "Enter the image you want to install: " wimg
if (( $wimg == "1" ));
then
wimg="minimal"
elif (( $wimg == "2" ));
then
wimg="nano"
else
wimg="minimal"
fi
else
wimg="full"
fi
####

CHROOT=kali-${SYS_ARCH}
IMAGE_NAME=kalifs-${SYS_ARCH}-${wimg}.tar.xz
SHA_NAME=kalifs-${SYS_ARCH}-${wimg}.sha512sum

}

function prepare_fs() {
unset KEEP_CHROOT
if [ -d ${CHROOT} ]; then
if ask "Existing rootfs directory found. Delete and create a new one?" "N"; then
rm -rf ${CHROOT}
else
KEEP_CHROOT=1
fi
fi
}

function cleanup() {
if [ -f ${IMAGE_NAME} ]; then
if ask "Delete downloaded rootfs file?" "N"; then
if [ -f ${IMAGE_NAME} ]; then
rm -f ${IMAGE_NAME}
fi
if [ -f ${SHA_NAME} ]; then
rm -f ${SHA_NAME}
fi
fi
fi
}

function check_dependencies() {
printf "${blue}\n[*] Checking package dependencies...${reset}\n"
## Workaround for termux-app issue #1283 (termux/termux-app#1283)
##apt update -y &> /dev/null
apt-get update -y &> /dev/null || apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" dist-upgrade -y &> /dev/null

for i in proot tar axel; do
    if [ -e $PREFIX/bin/$i ]; then
        echo "  $i is OK"
    else
        printf "Installing ${i}...\n"
        apt install -y $i || {
            printf "${red}ERROR: Failed to install packages.\n Exiting.\n${reset}"
        exit
        }
    fi
done
apt upgrade -y

}

function get_url() {
ROOTFS_URL="${BASE_URL}/${IMAGE_NAME}"
SHA_URL="${BASE_URL}/${SHA_NAME}"
}

function get_rootfs() {
unset KEEP_IMAGE
if [ -f ${IMAGE_NAME} ]; then
if ask "Existing image file found. Delete and download a new one?" "N"; then
rm -f ${IMAGE_NAME}
else
printf "${yellow}[!] Using existing rootfs archive${reset}\n"
KEEP_IMAGE=1
return
fi
fi
printf "${blue}[*] Downloading rootfs...${reset}\n\n"
get_url
wget ${EXTRA_ARGS} --continue "${ROOTFS_URL}"
}

function get_sha() {
if [ -z $KEEP_IMAGE ]; then
printf "\n${blue}[*] Getting SHA ... ${reset}\n\n"
get_url
if [ -f ${SHA_NAME} ]; then
rm -f ${SHA_NAME}
fi
wget ${EXTRA_ARGS} --continue "${SHA_URL}"
fi
}

function verify_sha() {
if [ -z $KEEP_IMAGE ]; then
printf "\n${blue}[*] Verifying integrity of rootfs...${reset}\n\n"
sha512sum -c $SHA_NAME || {
printf "${red} Rootfs corrupted. Please run this installer again or download the file manually\n${reset}"
exit 1
}
fi
}

function extract_rootfs() {
if [ -z $KEEP_CHROOT ]; then
printf "\n${blue}[*] Extracting rootfs... ${reset}\n\n"
proot --link2symlink tar -xf $IMAGE_NAME 2> /dev/null || :
else
printf "${yellow}[!] Using existing rootfs directory${reset}\n"
fi
}

function create_launcher() {
NH_LAUNCHER=${PREFIX}/bin/nethunter
NH_SHORTCUT=${PREFIX}/bin/nh
cat > $NH_LAUNCHER <<- EOF
#!/data/data/com.termux/files/usr/bin/bash -e
cd ${HOME}

termux-exec sets LD_PRELOAD so let's unset it before continuing

unset LD_PRELOAD

Workaround for Libreoffice, also needs to bind a fake /proc/version

if [ ! -f $CHROOT/root/.version ]; then
touch $CHROOT/root/.version
fi

Default user is "kali"

user="$USERNAME"
home="/home/$user"
start="sudo -u kali /bin/bash"

NH can be launched as root with the "-r" cmd attribute

Also check if user kali exists, if not start as root

if grep -q "kali" ${CHROOT}/etc/passwd; then
KALIUSR="1";
else
KALIUSR="0";
fi
if [[ $KALIUSR == "0" || ("$#" != "0" && ("$1" == "-r" || "$1" == "-R")) ]];then
user="root"
home="/$user"
start="/bin/bash --login"
if [[ "$#" != "0" && ("$1" == "-r" || "$1" == "-R") ]];then
shift
fi
fi

cmdline="proot \
--link2symlink \
-0 \
-r $CHROOT \
-b /dev \
-b /proc \
-b $CHROOT$home:/dev/shm \
-w $home \
/usr/bin/env -i \
HOME=$home \
PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin \
TERM=$TERM \
LANG=C.UTF-8 \
$start"

cmd="$@"
if [ "$#" == "0" ];then
exec $cmdline
else
$cmdline -c "$cmd"
fi
EOF

chmod 700 $NH_LAUNCHER
if [ -L ${NH_SHORTCUT} ]; then
    rm -f ${NH_SHORTCUT}
fi
if [ ! -f ${NH_SHORTCUT} ]; then
    ln -s ${NH_LAUNCHER} ${NH_SHORTCUT} >/dev/null
fi

}

function create_kex_launcher() {
KEX_LAUNCHER=${CHROOT}/usr/bin/kex
cat > $KEX_LAUNCHER <<- EOF
#!/bin/bash

function start-kex() {
if [ ! -f ~/.vnc/passwd ]; then
passwd-kex
fi
USR=$(whoami)
if [ $USR == "root" ]; then
SCREEN=":2"
else
SCREEN=":1"
fi
export HOME=${HOME}; export USER=${USR}; LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgcc_s.so.1 nohup vncserver $SCREEN >/dev/null 2>&1 </dev/null
starting_kex=1
return 0
}

function stop-kex() {
vncserver -kill :1 | sed s/"Xtigervnc"/"NetHunter KeX"/
vncserver -kill :2 | sed s/"Xtigervnc"/"NetHunter KeX"/
return $?
}

function passwd-kex() {
vncpasswd
return $?
}

function status-kex() {
sessions=$(vncserver -list | sed s/"TigerVNC"/"NetHunter KeX"/)
if [[ $sessions == "590" ]]; then
printf "\n${sessions}\n"
printf "\nYou can use the KeX client to connect to any of these displays.\n\n"
else
if [ ! -z $starting_kex ]; then
printf '\nError starting the KeX server.\nPlease try "nethunter kex kill" or restart your termux session and try again.\n\n'
fi
fi
return 0
}

function kill-kex() {
pkill Xtigervnc
return $?
}

case $1 in
start)
start-kex
;;
stop)
stop-kex
;;
status)
status-kex
;;
passwd)
passwd-kex
;;
kill)
kill-kex
;;
*)
stop-kex
start-kex
status-kex
;;
esac
EOF

chmod 700 $KEX_LAUNCHER

}

function fix_profile_bash() {
## Prevent attempt to create links in read only filesystem
if [ -f ${CHROOT}/root/.bash_profile ]; then
sed -i '/if/,/fi/d' "${CHROOT}/root/.bash_profile"
fi
}

function fix_sudo() {
## fix sudo & su on start
chmod +s $CHROOT/usr/bin/sudo
chmod +s $CHROOT/usr/bin/su
echo "kali ALL=(ALL:ALL) ALL" > $CHROOT/etc/sudoers.d/kali

# https://bugzilla.redhat.com/show_bug.cgi?id=1773148
echo "Set disable_coredump false" > $CHROOT/etc/sudo.conf

}

function fix_uid() {
## Change kali uid and gid to match that of the termux user
USRID=$(id -u)
GRPID=$(id -g)
nh -r usermod -u $USRID kali 2>/dev/null
nh -r groupmod -g $GRPID kali 2>/dev/null
}

function print_banner() {
clear
printf "${blue}##################################################\n"
printf "${blue}## ##\n"
printf "${blue}## 88 a8P db 88 88 ##\n"
printf "${blue}## 88 .88' d88b 88 88 ##\n"
printf "${blue}## 88 88' d8''8b 88 88 ##\n"
printf "${blue}## 88 d88 d8' '8b 88 88 ##\n"
printf "${blue}## 8888'88. d8YaaaaY8b 88 88 ##\n"
printf "${blue}## 88P Y8b d8''''''''8b 88 88 ##\n"
printf "${blue}## 88 '88. d8' '8b 88 88 ##\n"
printf "${blue}## 88 Y8b d8' '8b 888888888 88 ##\n"
printf "${blue}## ##\n"
printf "${blue}#### ############# NetHunter ####################${reset}\n\n"
}

##################################

Main

Add some colours

red='\033[1;31m'
green='\033[1;32m'
yellow='\033[1;33m'
blue='\033[1;34m'
light_cyan='\033[1;96m'
reset='\033[0m'

EXTRA_ARGS=""
if [[ ! -z $1 ]]; then
EXTRA_ARGS=$1
if [[ $EXTRA_ARGS != "--no-check-certificate" ]]; then
EXTRA_ARGS=""
fi
fi

cd $HOME
print_banner
get_arch
set_strings
prepare_fs
check_dependencies
get_rootfs
get_sha
verify_sha
extract_rootfs
create_launcher
cleanup

printf "\n${blue}[*] Configuring NetHunter for Termux ...\n"
fix_profile_bash
fix_sudo
create_kex_launcher
fix_uid

print_banner
printf "${green}[=] Kali NetHunter for Termux installed successfully${reset}\n\n"
printf "${green}[+] To start Kali NetHunter, type:${reset}\n"
printf "${green}[+] nethunter # To start NetHunter CLI${reset}\n"
printf "${green}[+] nethunter kex passwd # To set the KeX password${reset}\n"
printf "${green}[+] nethunter kex & # To start NetHunter GUI${reset}\n"
printf "${green}[+] nethunter kex stop # To stop NetHunter GUI${reset}\n"
#printf "${green}[+] nethunter kex # Run command in NetHunter env${reset}\n"
printf "${green}[+] nethunter -r # To run NetHunter as root${reset}\n"
#printf "${green}[+] nethunter -r kex passwd # To set the KeX password for root${reset}\n"
#printf "${green}[+] nethunter kex & # To start NetHunter GUI as root${reset}\n"
#printf "${green}[+] nethunter kex stop # To stop NetHunter GUI root session${reset}\n"
#printf "${green}[+] nethunter -r kex kill # To stop all NetHunter GUI sessions${reset}\n"
#printf "${green}[+] nethunter -r kex # Run command in NetHunter env as root${reset}\n"
printf "${green}[+] nh # Shortcut for nethunter${reset}\n\n"

Steps to reproduce:

  1. Go to …
  2. Click on …

Expected behavior:

Screenshots:

Device, Browser, OS:

Editor.js version:

Plugins you use with their versions:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants