forked from tatanus/apt2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpserverversion.py
More file actions
61 lines (49 loc) · 2.3 KB
/
Copy pathhttpserverversion.py
File metadata and controls
61 lines (49 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import httplib
from core.actionModule import actionModule
from core.keystore import KeyStore as kb
from core.utils import Utils
class httpserverversion(actionModule):
def __init__(self, config, display, lock):
super(httpserverversion, self).__init__(config, display, lock)
self.title = "Get HTTP Server Version"
self.shortName = "HTTPServerVersion"
self.description = "issue [GET / HTTP/1.0] to each web server"
self.requirements = []
self.triggers = ["newServicehttp", "newServicehttps", "newPort80", "newPort443"]
self.types = ["http"]
self.safeLevel = 5
def getTargets(self):
# we are interested in all hosts
self.targets = kb.get(['service/http/host', 'service/https/host'])
def processTarget(self, t, port):
if not self.seentarget(t + str(port)):
self.addseentarget(t + str(port))
self.display.verbose(self.shortName + " - Connecting to " + t)
try:
conn = httplib.HTTPConnection(t, port, timeout=10)
conn.request('GET', '/')
response = conn.getresponse()
serverver = response.getheader('server')
if (serverver):
outfile = self.config["proofsDir"] + self.shortName + "_" + t + "_" + str(
port) + "_" + Utils.getRandStr(10)
Utils.writeFile("Identified Server Version of %s : %s\n\nFull Headers:\n%s" % (
t, serverver, self.print_dict(response.getheaders())), outfile)
kb.add("host/" + t + "/files/" + self.shortName + "/" + outfile.replace("/", "%2F"))
except httplib.BadStatusLine:
pass
# except socket.error as e:
except:
pass
def process(self):
# load any targets we are interested in
self.getTargets()
# loop over each target
for t in self.targets:
# verify we have not tested this host before
ports = kb.get(['service/http/host/' + t + '/tcpport', 'service/https/host/' + t + '/tcpport'])
for port in ports:
self.processTarget(t, port)
for hostname in self.getHostnames(t):
self.processTarget(hostname, port)
return