diff --git a/extra/vulnserver/vulnserver.py b/extra/vulnserver/vulnserver.py
index e889cfaf6..aa43a4cce 100644
--- a/extra/vulnserver/vulnserver.py
+++ b/extra/vulnserver/vulnserver.py
@@ -124,13 +124,14 @@ class ReqHandler(BaseHTTPRequestHandler):
self.url, self.params = path, params
if self.url == '/':
+ self.send_response(OK)
+
if "id" not in params:
- self.send_response(FOUND)
+ self.send_header("Content-type", "text/html")
self.send_header("Connection", "close")
- self.send_header("Location", "/?id=1")
self.end_headers()
+ self.wfile.write(b"
GET:
link
POST:
")
else:
- self.send_response(OK)
self.send_header("Content-type", "text/html")
self.send_header("Connection", "close")
diff --git a/lib/controller/controller.py b/lib/controller/controller.py
index 5029fc2fd..3f122f5f9 100644
--- a/lib/controller/controller.py
+++ b/lib/controller/controller.py
@@ -36,6 +36,7 @@ from lib.core.common import isListLike
from lib.core.common import parseTargetUrl
from lib.core.common import popValue
from lib.core.common import pushValue
+from lib.core.common import randomInt
from lib.core.common import randomStr
from lib.core.common import readInput
from lib.core.common import removePostHintPrefix
@@ -203,10 +204,11 @@ def _randomFillBlankFields(value):
for match in re.finditer(EMPTY_FORM_FIELDS_REGEX, retVal):
item = match.group("result")
if not any(_ in item for _ in IGNORE_PARAMETERS) and not re.search(ASP_NET_CONTROL_REGEX, item):
+ newValue = randomStr() if not re.search(r"^id|id$", item, re.I) else randomInt()
if item[-1] == DEFAULT_GET_POST_DELIMITER:
- retVal = retVal.replace(item, "%s%s%s" % (item[:-1], randomStr(), DEFAULT_GET_POST_DELIMITER))
+ retVal = retVal.replace(item, "%s%s%s" % (item[:-1], newValue, DEFAULT_GET_POST_DELIMITER))
else:
- retVal = retVal.replace(item, "%s%s" % (item, randomStr()))
+ retVal = retVal.replace(item, "%s%s" % (item, newValue))
return retVal
diff --git a/lib/core/common.py b/lib/core/common.py
index f2aba7e36..2c4766a59 100644
--- a/lib/core/common.py
+++ b/lib/core/common.py
@@ -4909,7 +4909,7 @@ def prioritySortColumns(columns):
"""
def _(column):
- return column and "id" in column.lower()
+ return column and re.search(r"^id|id$", column, re.I) is not None
return sorted(sorted(columns, key=len), key=functools.cmp_to_key(lambda x, y: -1 if _(x) and not _(y) else 1 if not _(x) and _(y) else 0))
diff --git a/lib/core/settings.py b/lib/core/settings.py
index 28a2fb830..2f10ace46 100644
--- a/lib/core/settings.py
+++ b/lib/core/settings.py
@@ -18,7 +18,7 @@ from lib.core.enums import OS
from thirdparty.six import unichr as _unichr
# sqlmap version (...)
-VERSION = "1.3.11.49"
+VERSION = "1.3.11.50"
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
diff --git a/lib/core/testing.py b/lib/core/testing.py
index 14da34527..58a03ed75 100644
--- a/lib/core/testing.py
+++ b/lib/core/testing.py
@@ -64,6 +64,7 @@ def vulnTest():
TESTS = (
("--flush-session", ("CloudFlare",)),
+ ("--flush-session --forms --crawl=2 --banner", ("total of 2 targets", "might be injectable", "Type: UNION query", "banner: '3")),
("--flush-session --data='{\"id\": 1}' --banner", ("might be injectable", "Payload: {\"id\"", "Type: boolean-based blind", "Type: time-based blind", "Type: UNION query", "banner: '3")),
("--flush-session --data='' --mobile --banner --smart", ("might be injectable", "Payload: