Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3e8c204

Browse files
committed
Major bug fix to properly prepare UNION technique statement for --os-pwn and --is-dba
1 parent 90582ed commit 3e8c204

5 files changed

Lines changed: 11 additions & 8 deletions

File tree

lib/core/agent.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ def nullCastConcatFields(self, fields):
328328
if not Backend.getDbms():
329329
return fields
330330

331-
if fields.startswith("(CASE"):
331+
if fields.startswith("(CASE") or fields.startswith("SUBSTR"):
332332
nulledCastedConcatFields = fields
333333
else:
334334
fields = fields.replace(", ", ",")
@@ -368,9 +368,12 @@ def getFields(self, query):
368368
fieldsSelectFrom = re.search("\ASELECT%s\s+(.+?)\s+FROM\s+" % prefixRegex, query, re.I)
369369
fieldsExists = re.search("EXISTS(.*)", query, re.I)
370370
fieldsSelect = re.search("\ASELECT%s\s+(.*)" % prefixRegex, query, re.I)
371+
fieldsSubstr = re.search("\ASUBSTR", query, re.I)
371372
fieldsNoSelect = query
372373

373-
if fieldsExists:
374+
if fieldsSubstr:
375+
fieldsToCastStr = query
376+
elif fieldsExists:
374377
fieldsToCastStr = fieldsSelect.groups()[0]
375378
elif fieldsSelectTop:
376379
fieldsToCastStr = fieldsSelectTop.groups()[0]
@@ -386,7 +389,7 @@ def getFields(self, query):
386389
fieldsToCastStr = fieldsNoSelect
387390

388391
# Function
389-
if re.search("\A\w+\(.*\)", fieldsToCastStr, re.I) or fieldsSelectCase:
392+
if re.search("\A\w+\(.*\)", fieldsToCastStr, re.I) or fieldsSelectCase or fieldsSubstr:
390393
fieldsToCastList = [fieldsToCastStr]
391394
else:
392395
fieldsToCastList = fieldsToCastStr.replace(", ", ",")

lib/takeover/udf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def __askOverwriteUdf(self, udf):
5151
def __checkExistUdf(self, udf):
5252
logger.info("checking if UDF '%s' already exist" % udf)
5353

54-
query = agent.forgeCaseStatement(queries[Backend.getIdentifiedDbms()].check_udf.query % (udf, udf))
55-
exists = inject.getValue(query, resumeValue=False, unpack=False, charsetType=2)
54+
query = agent.forgeCaseStatement(queries[Backend.getIdentifiedDbms()].check_udf.query % (udf, udf))
55+
exists = inject.getValue(query, resumeValue=False, charsetType=2)
5656

5757
if exists == "1":
5858
return True

plugins/generic/enumeration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def isDba(self, user=None):
142142
query = queries[Backend.getIdentifiedDbms()].is_dba.query
143143

144144
query = agent.forgeCaseStatement(query)
145-
isDba = inject.getValue(query, unpack=False, charsetType=1)
145+
isDba = inject.getValue(query, charsetType=1)
146146

147147
if user is None:
148148
kb.data.isDba = isDba

plugins/generic/misc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def getVersionFromBanner(self):
7474
if conf.direct:
7575
query = "SELECT %s" % query
7676

77-
kb.bannerFp["dbmsVersion"] = inject.getValue(query, unpack=False)
77+
kb.bannerFp["dbmsVersion"] = inject.getValue(query)
7878
kb.bannerFp["dbmsVersion"] = kb.bannerFp["dbmsVersion"].replace(",", "").replace("-", "").replace(" ", "")
7979

8080
def delRemoteFile(self, tempFile):

xml/queries.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
-->
9696
<timedelay query="SELECT PG_SLEEP(%d)" query2="SELECT 'sqlmap' WHERE exists(SELECT * FROM generate_series(1, 300000%d))" query3="CREATE OR REPLACE FUNCTION sleep(int) RETURNS int AS '/lib/libc.so.6', 'sleep' language 'C' STRICT; SELECT sleep(%d)"/>
9797
<substring query="SUBSTR((%s)::text, %d, %d)"/>
98-
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
98+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
9999
<inference query="ASCII(SUBSTR((%s)::text, %d, 1)) > %d"/>
100100
<banner query="SELECT VERSION()"/>
101101
<current_user query="SELECT CURRENT_USER"/>

0 commit comments

Comments
 (0)