Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ef987c6

Browse files
committed
adding compatibility support for using --crawl and --forms together
1 parent ddc4dfe commit ef987c6

4 files changed

Lines changed: 16 additions & 9 deletions

File tree

extra/clientform/clientform.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3363,6 +3363,9 @@ def _request_data(self):
33633363
if self.enctype == "application/x-www-form-urlencoded":
33643364
return (uri, urlencode(self._pairs()),
33653365
[("Content-Type", self.enctype)])
3366+
elif self.enctype == "text/plain":
3367+
return (uri, self._pairs(),
3368+
[("Content-Type", self.enctype)])
33663369
elif self.enctype == "multipart/form-data":
33673370
data = StringIO()
33683371
http_hdrs = []

lib/core/common.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3073,7 +3073,7 @@ def quote(s, safe):
30733073

30743074
def findPageForms(content, url, raise_=False, addToTargets=False):
30753075
class _(StringIO):
3076-
def __init__(self):
3076+
def __init__(self, content, url):
30773077
StringIO.__init__(self, unicodeencode(content, kb.pageEncoding) if isinstance(content, unicode) else content)
30783078
self._url = url
30793079
def geturl(self):
@@ -3083,17 +3083,21 @@ def geturl(self):
30833083
errMsg = "can't parse forms as the page content appears to be blank"
30843084
raise sqlmapGenericException, errMsg
30853085

3086+
forms = None
30863087
retVal = set()
3087-
response = _()
3088+
response = _(content, url)
30883089
try:
30893090
forms = ParseResponse(response, backwards_compat=False)
30903091
except ParseError:
30913092
errMsg = "badly formed HTML at the target url. will try to filter it"
30923093
logger.error(errMsg)
30933094
response.seek(0)
3094-
filtered = _("".join(re.findall(r'<form.+?</form>', response.read(), re.I | re.S)), response.geturl())
3095+
filtered = re.findall(r'<form.+?</form>', response.read(), re.I | re.S)
3096+
for i in xrange(len(filtered)):
3097+
filtered[i] = filtered[i][filtered[i].lower().rfind("<form"):]
3098+
response = _("".join(filtered), response.geturl())
30953099
try:
3096-
forms = ParseResponse(filtered, backwards_compat=False)
3100+
forms = ParseResponse(response, backwards_compat=False)
30973101
except ParseError:
30983102
errMsg = "no success"
30993103
if raise_:

lib/core/option.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ def __setBulkMultipleTargets():
522522
f.close()
523523

524524
def __findPageForms():
525-
if not conf.forms:
525+
if not conf.forms or conf.crawlDepth:
526526
return
527527

528528
if not checkConnection():
@@ -1796,10 +1796,6 @@ def __basicOptionValidation():
17961796
errMsg = "switch --forms is compatible only with -u (--url) target switch"
17971797
raise sqlmapSyntaxException, errMsg
17981798

1799-
if conf.forms and conf.crawlDepth:
1800-
errMsg = "switch --forms is currently not compatible with --crawl switch"
1801-
raise sqlmapSyntaxException, errMsg
1802-
18031799
if conf.timeSec < 1:
18041800
errMsg = "value for --time-sec option must be an integer greater than 0"
18051801
raise sqlmapSyntaxException, errMsg

lib/utils/crawler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from lib.core.common import clearConsoleLine
1717
from lib.core.common import dataToStdout
18+
from lib.core.common import findPageForms
1819
from lib.core.common import singleTimeWarnMessage
1920
from lib.core.data import conf
2021
from lib.core.data import kb
@@ -92,6 +93,9 @@ def crawlThread():
9293
threadData.shared.outputs.add(url)
9394
kb.locks.outputs.release()
9495

96+
if conf.forms:
97+
findPageForms(content, current, False, True)
98+
9599
if conf.verbose in (1, 2):
96100
kb.locks.ioLock.acquire()
97101
threadData.shared.count += 1

0 commit comments

Comments
 (0)