Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/plugins/generic/enumeration.py
2989 views
1
#!/usr/bin/env python
2
3
"""
4
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
5
See the file 'LICENSE' for copying permission
6
"""
7
8
from lib.core.common import Backend
9
from lib.core.common import unArrayizeValue
10
from lib.core.data import conf
11
from lib.core.data import kb
12
from lib.core.data import logger
13
from lib.core.data import queries
14
from lib.core.enums import DBMS
15
from lib.core.session import setOs
16
from lib.parse.banner import bannerParser
17
from lib.request import inject
18
from plugins.generic.custom import Custom
19
from plugins.generic.databases import Databases
20
from plugins.generic.entries import Entries
21
from plugins.generic.search import Search
22
from plugins.generic.users import Users
23
24
class Enumeration(Custom, Databases, Entries, Search, Users):
25
"""
26
This class defines generic enumeration functionalities for plugins.
27
"""
28
29
def __init__(self):
30
kb.data.has_information_schema = False
31
kb.data.banner = None
32
kb.data.hostname = ""
33
kb.data.processChar = None
34
35
Custom.__init__(self)
36
Databases.__init__(self)
37
Entries.__init__(self)
38
Search.__init__(self)
39
Users.__init__(self)
40
41
def getBanner(self):
42
if not conf.getBanner:
43
return
44
45
if kb.data.banner is None:
46
infoMsg = "fetching banner"
47
logger.info(infoMsg)
48
49
if Backend.isDbms(DBMS.DB2):
50
rootQuery = queries[DBMS.DB2].banner
51
for query in (rootQuery.query, rootQuery.query2):
52
kb.data.banner = unArrayizeValue(inject.getValue(query, safeCharEncode=False))
53
if kb.data.banner:
54
break
55
else:
56
query = queries[Backend.getIdentifiedDbms()].banner.query
57
kb.data.banner = unArrayizeValue(inject.getValue(query, safeCharEncode=False))
58
59
bannerParser(kb.data.banner)
60
61
if conf.os and conf.os == "windows":
62
kb.bannerFp["type"] = set(["Windows"])
63
64
elif conf.os and conf.os == "linux":
65
kb.bannerFp["type"] = set(["Linux"])
66
67
elif conf.os:
68
kb.bannerFp["type"] = set(["%s%s" % (conf.os[0].upper(), conf.os[1:])])
69
70
if conf.os:
71
setOs()
72
73
return kb.data.banner
74
75
def getHostname(self):
76
infoMsg = "fetching server hostname"
77
logger.info(infoMsg)
78
79
query = queries[Backend.getIdentifiedDbms()].hostname.query
80
81
if not kb.data.hostname:
82
kb.data.hostname = unArrayizeValue(inject.getValue(query, safeCharEncode=False))
83
84
return kb.data.hostname
85
86