@@ -46,6 +46,7 @@ class WebSocketException(Exception):
4646from lib .core .common import logHTTPTraffic
4747from lib .core .common import openFile
4848from lib .core .common import popValue
49+ from lib .core .common import parseJson
4950from lib .core .common import pushValue
5051from lib .core .common import randomizeParameterValue
5152from lib .core .common import randomInt
@@ -1291,6 +1292,13 @@ def _randomizeParameter(paramString, randomParameter):
12911292 value = urldecode (value , convall = True , spaceplus = (item == post and kb .postSpaceToPlus ))
12921293 variables [name ] = value
12931294
1295+ if post and kb .postHint in (POST_HINT .JSON , POST_HINT .JSON_LIKE ):
1296+ for name , value in (parseJson (post ) or {}).items ():
1297+ if safeVariableNaming (name ) != name :
1298+ conf .evalCode = re .sub (r"\b%s\b" % re .escape (name ), safeVariableNaming (name ), conf .evalCode )
1299+ name = safeVariableNaming (name )
1300+ variables [name ] = value
1301+
12941302 if cookie :
12951303 for part in cookie .split (conf .cookieDel or DEFAULT_COOKIE_DELIMITER ):
12961304 if '=' in part :
@@ -1393,7 +1401,13 @@ def _randomizeParameter(paramString, randomParameter):
13931401
13941402 if not found :
13951403 if post is not None :
1396- post += "%s%s=%s" % (delimiter , name , value )
1404+ if kb .postHint in (POST_HINT .JSON , POST_HINT .JSON_LIKE ):
1405+ match = re .search (r"['\"]" , post )
1406+ if match :
1407+ quote = match .group (0 )
1408+ post = re .sub (r"\}\Z" , "%s%s}" % (',' if re .search (r"\w" , post ) else "" , "%s%s%s:%s" % (quote , name , quote , value if value .isdigit () else "%s%s%s" % (quote , value , quote ))), post )
1409+ else :
1410+ post += "%s%s=%s" % (delimiter , name , value )
13971411 elif get is not None :
13981412 get += "%s%s=%s" % (delimiter , name , value )
13991413 elif cookie is not None :
0 commit comments