├── img ├── copy.png ├── icon.png └── link.png ├── manifest.json ├── LICENCE ├── FastDork.html ├── README.md ├── Script ├── getData.js ├── FastDork.js └── jquery-3.5.1.min.js └── style.css /img/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SKVNDR/FastDork/HEAD/img/copy.png -------------------------------------------------------------------------------- /img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SKVNDR/FastDork/HEAD/img/icon.png -------------------------------------------------------------------------------- /img/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SKVNDR/FastDork/HEAD/img/link.png -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | 4 | "name": "FastDork", 5 | "description": "Google and Github Dork tool", 6 | "version": "0.1", 7 | "author": "skvndr", 8 | "icons": { 9 | "16": "img/icon.png", 10 | "48": "img/icon.png", 11 | "128": "img/icon.png" 12 | }, 13 | 14 | "background": { 15 | "scripts": [ 16 | "Script/jquery-3.5.1.min.js", 17 | "Script/FastDork.js" 18 | ], 19 | "persistent": false 20 | }, 21 | 22 | "browser_action": { 23 | "default_icon": "img/icon.png", 24 | "default_popup": "FastDork.html", 25 | "default_title": "FastDork" 26 | }, 27 | 28 | "permissions": [ 29 | "activeTab", 30 | "clipboardRead" 31 | ] 32 | } -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Iskander Rehouma 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /FastDork.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
Save
37 | 38 | 39 |
53 |
54 |
55 |
56 | Add list :
62 | 63 | 64 |Delete list :
65 | 68 | 69 | v0.1 70 | Dork from Exploit DB 71 | 72 |
2 |
3 |
7 | This chrome extension allows you to create lists of Google and Github dork to open multiple tabs with one click,
8 | import "scope/out of scope" from HackerOne/Bugcrowd/Intigriti and extract links from raw data.
9 |
30 |
31 | ## Tab FastDork
32 | 1) Select **One Domain/One Dork**
33 | 2) Choose **Google Dork / Github Dork** (choose which platform to open tabs.)
34 | 3) **Select list** of dork
35 | * When you choose **One Domain**, select list with **multiple dorks**
36 | * When you choose **One dork**, select list with **multiple domains** (don't forget to add **\*replace\*** in this input)
37 | 4) Save (you can save the parameter of this tab)
38 | 5) Open dork's button
39 |
40 | ## Tab Template
41 | ### Import links from HackerOne, Bugcrowd and Intigriti
42 |
43 | To use this functionality, go to the program page then click on the button **Import links from HackerOne/Bugcrowd/Intigriti**.
44 |
45 | ### Import links from Google and Github
46 |
47 | Same logic, the import buttons will appear when google/github search will be visited.
48 |
49 | The links are saved automatically after each click on import buttons (in case if captcha appears)
50 |
51 | ### Import Dorks from Google Hacking Database
52 |
53 | You can import dorks from Exploit DB, the import button will appear after visiting the google hacking database page.
54 |
55 | ### Copy to clipboard
56 | To copy list textarea to your clipboard, click on this icon
57 |
58 | ### Extract Links from Raw data
59 | To extract links, paste raw data in list textarea then click on this icon.
60 |
61 | ## Tab Setting
62 |
63 | In this tab you can Add or Delete list, you can also Reset the extension data.
64 |
65 | ## Error
66 |
67 | :warning: **Error messages :**
68 | - Error: Remove **\*replace\*** and select list with strings
69 |
70 | If you choose **One Domain**, remove the string **\*replace\*** and replace it by one domain name. (Example : test.com)
71 |
72 | - Error: You forgot to add **\*replace\***
73 |
74 | If you choose **One Dork** you need to add the string **\*replace\*** in the field and then select the list with domains.
75 |
76 | ## Copyright and license
77 |
78 | Code released under the [MIT License](https://github.com/SKVNDR/FastDork/blob/master/LICENCE).
79 |
80 | (Import functionality is inspired by tomnomnom with webpaste extension)
81 |
--------------------------------------------------------------------------------
/Script/getData.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | const url = window.location.href;
3 |
4 | const selectors = {
5 | google: {
6 | standard: "div.yuRUbf > a:first-child",
7 | alternative: "div.kb0PBd.cvP2Ce.jGGQ5e > div > div > span > a",
8 | nextPage: ['a#pnnext', '.GNJvt.ipz2Oe']
9 | },
10 | github: {
11 | selector: () => {
12 | let gitParam = new URLSearchParams(window.location.search).get('type') === 'code' ? '.search-title a:nth-of-type(2)' : '.search-title a';
13 | return gitParam;
14 | },
15 | nextPage: 'a[rel="next"]'
16 | },
17 | hackerOne: {
18 | selector: ".spec-asset-identifier strong"
19 | },
20 | exploitDB: {
21 | selector: "#exploits-table tbody td:nth-child(2) a",
22 | nextPage: "#exploits-table_next > a"
23 | },
24 | intigriti: {
25 | selector: ".domain"
26 | },
27 | bugcrowd: {
28 | selector: ".cc-rewards-link-table__endpoint",
29 | condition: () => document.getElementsByClassName('bc-program-card__header').length > 0
30 | }
31 | };
32 |
33 | function scrollToBottom() {
34 | window.scrollTo(0, document.body.scrollHeight);
35 | }
36 |
37 | function sendData(platform, type, selector, nextPage) {
38 | if (url.includes(platform)) {
39 | const elements = [...document.querySelectorAll(selector)];
40 | const dataVal = type ? elements.map(n => n.href).join() : elements.map(n => n.innerText).join();
41 |
42 | chrome.runtime.sendMessage({ dataResult: dataVal });
43 |
44 | if (nextPage) nextPage();
45 | }
46 | }
47 |
48 | function clickElement(selector) {
49 | const element = document.querySelector(selector);
50 | if (element) element.click();
51 | }
52 |
53 | function navigateToNextPage(platform) {
54 | const { nextPage } = selectors[platform];
55 | if (Array.isArray(nextPage)) {
56 | nextPage.some(selector => clickElement(selector));
57 | } else {
58 | clickElement(nextPage);
59 | }
60 | }
61 |
62 | function githubNextPage() {
63 | const nextLink = document.querySelector(selectors.github.nextPage);
64 | if (nextLink) {
65 | const hrefVal = nextLink.getAttribute('href');
66 | if (hrefVal) {
67 | let queryParams = new URLSearchParams(hrefVal.split('?')[1]);
68 | let pageParam = queryParams.get('p');
69 | if (pageParam) {
70 | let newURL = new URL(window.location.href);
71 | newURL.searchParams.set('p', pageParam);
72 | document.location = newURL.toString();
73 | }
74 | }
75 | }
76 | }
77 |
78 |
79 | // Google
80 | if (document.querySelector(selectors.google.alternative)) {
81 | sendData("https://www.google.com/search", true, selectors.google.alternative, () => {
82 | scrollToBottom();
83 | navigateToNextPage('google');
84 |
85 | setTimeout(() => {
86 | scrollToBottom();
87 | }, 2000);
88 | });
89 | } else {
90 | sendData("https://www.google.com/search", true, selectors.google.standard, () => navigateToNextPage('google'));
91 | }
92 |
93 | // GitHub
94 | sendData("https://github.com/search", true, selectors.github.selector(), githubNextPage);
95 |
96 | // HackerOne
97 | sendData("https://hackerone.com/", false, selectors.hackerOne.selector);
98 |
99 | // Exploit DB
100 | sendData("https://www.exploit-db.com/google-hacking-database", false, selectors.exploitDB.selector, () => navigateToNextPage('exploitDB'));
101 |
102 | // Intigriti
103 | sendData("https://app.intigriti.com/", false, selectors.intigriti.selector);
104 |
105 | // Bugcrowd
106 | if (selectors.bugcrowd.condition()) {
107 | sendData("https://bugcrowd.com/", false, selectors.bugcrowd.selector);
108 | }
109 | })();
110 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | div {
2 | box-sizing: border-box;
3 | transition: all ease-in-out .5s;
4 | -moz-transition: all ease-in-out .5s;
5 | -webkit-transition: all ease-in-out .5s;
6 | }
7 |
8 | .icetab {
9 | display: inline-block;
10 | border-bottom: 0;
11 | margin: 0;
12 | color: #fff;
13 | cursor: pointer;
14 | border-right: 0;
15 | }
16 |
17 | #icetab-content {
18 | overflow: hidden;
19 | position: relative;
20 | border-top: 2px solid #ff9900;
21 | }
22 |
23 | .tabcontent {
24 | position: absolute;
25 | left: 0;
26 | top: 0;
27 | background: #fff;
28 | width: 100%;
29 | border-top: 0;
30 | border-top: 0;
31 | transform: translateY(-100%);
32 | -moz-transform: translateY(-100%);
33 | -webkit-transform: translateY(-100%);
34 | }
35 |
36 | .tabcontent:first-child {
37 | position: relative;
38 | }
39 |
40 | .tabcontent.tab-active {
41 | border-top: 0;
42 | display: block;
43 | transform: translateY(0%);
44 | -moz-transform: translateY(0%);
45 | -webkit-transform: translateY(0%);
46 | }
47 |
48 | body {
49 | font-family: Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif;
50 | background: #666;
51 | color: #454545;
52 | margin: 0
53 | }
54 |
55 | .container {
56 | max-width: 700px;
57 | margin-left: auto;
58 | margin-right: auto;
59 | }
60 |
61 | .title {
62 | color: #ff9900;
63 | text-align: center;
64 | letter-spacing: 14px;
65 | text-transform: uppercase;
66 | font-size: 17px;
67 | margin: 3px 0;
68 | }
69 |
70 | .tabcontent {
71 | padding: 1px 11px;
72 | height: 166px;
73 | width: 356px;
74 | }
75 |
76 | .icetab {
77 | padding: 10px 23.7px;
78 | text-transform: uppercase;
79 | letter-spacing: 2.4px;
80 | }
81 |
82 | .current-tab {
83 | background: #ff9900;
84 | }
85 |
86 | input.btw {
87 | background-color: transparent;
88 | border: none;
89 | border-bottom: 1px solid #f90;
90 | width: 34%;
91 | color: #666;
92 | font-size: 17px;
93 | }
94 |
95 | ::placeholder {
96 | font-size: 16px;
97 | color: #f90;
98 | opacity: 1;
99 | }
100 |
101 | textarea:focus, input:focus {
102 | outline: none;
103 | }
104 |
105 | p {
106 | display: inline-block;
107 | font-size: 17px;
108 | }
109 |
110 | .list,.listmod {
111 | background: transparent;
112 | margin-bottom: 9px;
113 | color: #666;
114 | font-size: 17px;
115 | border: 1px solid #666;
116 | border-radius: 3px;
117 | padding: 2px 0;
118 | }
119 |
120 | button {
121 | background-color: transparent;
122 | color: #f90;
123 | border: 1px solid #f90;
124 | border-radius: 3px;
125 | padding: 5px 22px;
126 | cursor: pointer;
127 | font-weight: 600;
128 | margin-left: 13px;
129 | }
130 |
131 | #createlist {
132 | padding: 5px 12px;
133 | }
134 |
135 | .alert {
136 | color: #ffffff;
137 | text-align: center;
138 | font-size: 17px;
139 | top: 30%;
140 | z-index: 3;
141 | border-radius: 5px;
142 | padding: 7px;
143 | background: #b71c1cc9;
144 | position: fixed;
145 | left: 50%;
146 | transform: translate(-50%, 0);
147 | display:none;
148 | }
149 |
150 | .info {
151 | color: red;
152 | position: fixed;
153 | text-align: center;
154 | text-decoration: underline;
155 | font-size: 17px;
156 | margin-top: 9px;
157 | left: 50%;
158 | width: 100%;
159 | transform: translate(-50%, 0);
160 | }
161 |
162 | .adapt {
163 | padding: 5px 8px;
164 | margin: 0;
165 | }
166 |
167 | button#return {
168 | margin-top: 43px;
169 | }
170 |
171 | #payload-input {
172 | height: 74px;
173 | width: 328px;
174 | white-space: nowrap;
175 | }
176 |
177 | #list-tab2 {
178 | margin-top: 7px;
179 | }
180 |
181 | #save {
182 | margin-top: 3px;
183 | margin-left: 33px;
184 | }
185 |
186 | #prefix {
187 | margin-top: 3px;
188 | }
189 |
190 | #add {
191 | margin-top: 0;
192 | margin-left: 4px;
193 | margin-right: 7px;
194 | border: 1px solid #666;
195 | color: #666;
196 | }
197 |
198 | #clear {
199 | margin: 4px 1% 0 29%;
200 | }
201 |
202 | #clipboard {
203 | margin-left: 3px;
204 | }
205 |
206 | #nbrpayload {
207 | color: #666;
208 | font-size: 16px;
209 | font-weight: 600;
210 | margin: 5px;
211 | position: fixed;
212 | }
213 |
214 | .btn-import {
215 | display: none;
216 | border: 1px solid #4CAF50;
217 | color: #4CAF50;
218 | padding: 6px 12px;
219 | }
220 | #getgooglelnk, #getgithublnk {
221 | padding: 6px 30px;
222 | }
223 |
224 | #msgsuccess {
225 | text-align: center;
226 | width: 100%;
227 | }
228 |
229 | .msg-error {
230 | position: fixed;
231 | z-index: 99999;
232 | margin: 8% 26%;
233 | color: #ff003b;
234 | width: 56%;
235 | font-weight: 700;
236 | font-size: 13px;
237 | border-radius: 3px;
238 | text-decoration: underline;
239 | }
240 |
241 | .switch {
242 | background-color: #66666624;
243 | width: 56%;
244 | display: inline-table;
245 | border-radius: 8px;
246 | height: 24px;
247 | padding: 3px;
248 | position: relative;
249 | margin:11px 21px 23px 0;
250 | zoom: 1;
251 | }
252 |
253 | .switch:before, .switch:after {
254 | content: " ";
255 | }
256 |
257 | .switch:after {
258 | clear: both;
259 | }
260 |
261 | .switch label {
262 | font-weight: 700;
263 | float: left;
264 | width: 50%;
265 | position: relative;
266 | z-index: 2;
267 | line-height: 27px;
268 | cursor: pointer;
269 | text-align: center;
270 | color: #666666;
271 | }
272 |
273 | .switch input[type="radio"], #limit {
274 | display: none;
275 | }
276 |
277 | .switch input[type="radio"]:checked+label {
278 | color: #ff9900;
279 | font-weight: bold;
280 | background: #fff;
281 | border-radius: 5px;
282 | }
283 |
284 | .switch span {
285 | position: relative;
286 | z-index: 1;
287 | top: 0;
288 | left: 0;
289 | width: 50%;
290 | height: 100%;
291 | display: block;
292 | border-radius: 5px 0 0 5px;
293 | background-color: #ffffff;
294 | transition: all 200ms ease;
295 | }
296 |
297 | .switch span.right {
298 | left: 50%;
299 | border-radius: 0 5px 5px 0;
300 | transition: all 200ms ease;
301 | }
302 |
303 | .success-checkmark {
304 | width: 80px;
305 | margin: 0 auto;
306 | margin-top: 15px !important;
307 | height: 331px;
308 | }
309 |
310 | .success-checkmark .check-icon {
311 | width: 80px;
312 | height: 80px;
313 | position: relative;
314 | border-radius: 50%;
315 | box-sizing: content-box;
316 | border: 4px solid #4caf50;
317 | }
318 |
319 | .success-checkmark .check-icon::before {
320 | top: 3px;
321 | left: -2px;
322 | width: 30px;
323 | transform-origin: 100% 50%;
324 | border-radius: 100px 0 0 100px;
325 | }
326 |
327 | .success-checkmark .check-icon::after {
328 | top: 0;
329 | left: 30px;
330 | width: 60px;
331 | transform-origin: 0 50%;
332 | border-radius: 0 100px 100px 0;
333 | animation: rotate-circle 4.25s ease-in;
334 | }
335 |
336 | .success-checkmark .check-icon::before, .success-checkmark .check-icon::after {
337 | content: "";
338 | height: 100px;
339 | position: absolute;
340 | background: #ffffff;
341 | transform: rotate(-45deg);
342 | }
343 |
344 | .success-checkmark .check-icon .icon-line {
345 | height: 5px;
346 | background-color: #4caf50;
347 | display: block;
348 | border-radius: 2px;
349 | position: absolute;
350 | z-index: 10;
351 | }
352 |
353 | .success-checkmark .check-icon .icon-line.line-tip {
354 | top: 46px;
355 | left: 14px;
356 | width: 25px;
357 | transform: rotate(45deg);
358 | animation: icon-line-tip 0.75s;
359 | }
360 |
361 | .success-checkmark .check-icon .icon-line.line-long {
362 | top: 38px;
363 | right: 8px;
364 | width: 47px;
365 | transform: rotate(-45deg);
366 | animation: icon-line-long 0.75s;
367 | }
368 |
369 | .success-checkmark .check-icon .icon-circle {
370 | top: -4px;
371 | left: -4px;
372 | z-index: 10;
373 | width: 80px;
374 | height: 80px;
375 | border-radius: 50%;
376 | position: absolute;
377 | box-sizing: content-box;
378 | border: 4px solid rgba(76, 175, 80, 0.5);
379 | }
380 |
381 | .success-checkmark .check-icon .icon-fix {
382 | top: 8px;
383 | width: 5px;
384 | left: 26px;
385 | z-index: 1;
386 | height: 85px;
387 | position: absolute;
388 | transform: rotate(-45deg);
389 | background-color: #ffffff;
390 | }
391 |
392 | @keyframes rotate-circle {
393 | 0% {
394 | transform: rotate(-45deg);
395 | }
396 | 5% {
397 | transform: rotate(-45deg);
398 | }
399 | 12% {
400 | transform: rotate(-405deg);
401 | }
402 | 100% {
403 | transform: rotate(-405deg);
404 | }
405 | }
406 |
407 | @keyframes icon-line-tip {
408 | 0% {
409 | width: 0;
410 | left: 1px;
411 | top: 19px;
412 | }
413 | 54% {
414 | width: 0;
415 | left: 1px;
416 | top: 19px;
417 | }
418 | 70% {
419 | width: 50px;
420 | left: -8px;
421 | top: 37px;
422 | }
423 | 84% {
424 | width: 17px;
425 | left: 21px;
426 | top: 48px;
427 | }
428 | 100% {
429 | width: 25px;
430 | left: 14px;
431 | top: 45px;
432 | }
433 | }
434 |
435 | @keyframes icon-line-long {
436 | 0% {
437 | width: 0;
438 | right: 46px;
439 | top: 54px;
440 | }
441 | 65% {
442 | width: 0;
443 | right: 46px;
444 | top: 54px;
445 | }
446 | 84% {
447 | width: 55px;
448 | right: 0px;
449 | top: 35px;
450 | }
451 | 100% {
452 | width: 47px;
453 | right: 8px;
454 | top: 38px;
455 | }
456 | }
457 |
458 | .line {
459 | margin: 0 0 -3px 10px;
460 | }
461 |
462 | #listname {
463 | margin-top: 14%;
464 | }
465 |
466 |
467 | .line.list {
468 | margin-bottom: 9px;
469 | }
470 |
471 | .line:nth-child(1) {
472 | margin-top: 13px;
473 | }
474 |
475 | #limit{
476 | color :#b71c1c;
477 | border: 1px solid #b71c1c;
478 | }
479 |
480 | #target {
481 | width: 50%;
482 | margin-left: 18px;
483 | }
484 |
485 | .logo {
486 | width: 6%;
487 | margin-right: 12%;
488 | }
489 |
490 | #selectmod {
491 | margin-right: 6%;
492 | }
493 |
494 | #go, #limit {
495 | padding: 10px 20px;
496 | }
497 |
498 | #nbr, #nbr2 {
499 | display: contents;
500 | }
501 |
502 | .xs {
503 | padding: 5px 12px;
504 | }
505 |
506 | .icon {
507 | width: 25Px;
508 | position: absolute;
509 | margin-top: 4px;
510 | cursor: pointer;
511 | }
512 |
513 | #reset {
514 | float: right;
515 | padding: 4px 36px;
516 | }
517 |
518 | .separator {
519 | border-bottom: 1px solid #eaeaea;
520 | }
521 |
522 | p {
523 | margin: 10px 10px 0 0;
524 | }
525 |
526 | #deletelist {
527 | padding: 5px 12px;
528 | margin-left: 19px;
529 | }
530 |
531 | #listmixdomain {
532 | margin-left: 43px;
533 | }
534 |
535 | .delp1 {
536 | margin-right: 10px;
537 | }
538 |
539 | .auto-save{
540 | background: #f90;
541 | color: #FFF;
542 | }
543 |
544 | #paste {
545 | margin-left: 9%;
546 | }
547 |
548 | #links {
549 | width: 6%;
550 | margin: 6px 0 0 2px;
551 | }
552 |
553 | #import{
554 | position: absolute;
555 | width: 62%;
556 | margin-top: 6px;
557 | }
558 |
559 | .tab-link{
560 | display: inline-block;
561 | margin: 6px 0 0 6px;
562 | color: #f90;
563 | font-size: 16px;
564 | text-decoration: underline;
565 | cursor: pointer;
566 | }
567 |
--------------------------------------------------------------------------------
/Script/FastDork.js:
--------------------------------------------------------------------------------
1 | document.addEventListener('DOMContentLoaded', function() {
2 |
3 | tabStructure();
4 |
5 | const errorId = $('#error');
6 | const msgError = $('.msg-error');
7 | const payloadInput = $('#payload-input');
8 | const listTab1 = $('#list-tab1');
9 | const listTab2 = $('#list-tab2');
10 | const nbrTab2 = $('#nbr2');
11 | const targetTab1 = $('#target');
12 | const listNameId = $('#listname');
13 | const selectModTab1 = $('#select-mod');
14 | const importBtn = $('#import');
15 | const allList = $('.list');
16 | const listDel = $('#listdel');
17 | const urlGoogle = 'https://www.google.com/search?q=';
18 | const urlGithub = 'https://github.com/search?q=';
19 |
20 | const sucessCheck = '