From 65273295e3c6039deb4485f0fb455bf5d47d23a5 Mon Sep 17 00:00:00 2001
From: Miroslav Stampar <miroslav.stampar@gmail.com>
Date: Thu, 17 Jan 2013 13:56:04 +0100
Subject: [PATCH] Implementing a check for an Issue #25

---
 lib/core/common.py | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/lib/core/common.py b/lib/core/common.py
index 9abcf3448..c2f490b62 100644
--- a/lib/core/common.py
+++ b/lib/core/common.py
@@ -516,16 +516,16 @@ def paramToDict(place, parameters=None):
 
     for element in splitParams:
         element = re.sub(r"%s(.+?)%s" % (PARAMETER_AMP_MARKER, PARAMETER_SEMICOLON_MARKER), r"&\g<1>;", element)
-        elem = element.split("=")
+        parts = element.split("=")
 
-        if len(elem) >= 2:
-            parameter = elem[0].replace(" ", "")
+        if len(parts) >= 2:
+            parameter = parts[0].replace(" ", "")
 
             condition = not conf.testParameter
             condition |= parameter in conf.testParameter
 
             if condition:
-                testableParameters[parameter] = "=".join(elem[1:])
+                testableParameters[parameter] = "=".join(parts[1:])
                 if not conf.multipleTargets:
                     _ = urldecode(testableParameters[parameter], convall=True)
                     if _.strip(DUMMY_SQL_INJECTION_CHARS) != _\
@@ -564,6 +564,20 @@ def paramToDict(place, parameters=None):
                 warnMsg += "is not inside the %s" % place
                 logger.warn(warnMsg)
 
+    if testableParameters:
+        for parameter, value in testableParameters.items():
+            if value and not value.isdigit():
+                for encoding in ("hex", "base64"):
+                    try:
+                        decoded = value.decode(encoding)
+                        if all(_ in string.printable for _ in decoded):
+                            warnMsg = "provided parameter '%s' " % parameter
+                            warnMsg += "seems to be '%s' encoded" % encoding
+                            logger.warn(warnMsg)
+                            break
+                    except:
+                        pass
+
     return testableParameters
 
 def getDocRoot():