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

Skip to content

Commit d7866ac

Browse files
committed
added support for automatic filtering of badly formed HTML in --forms mode
1 parent 1b45c5b commit d7866ac

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

lib/core/option.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import os
1616
import re
1717
import socket
18+
import StringIO
1819
import sys
1920
import threading
2021
import urllib2
@@ -523,6 +524,13 @@ def __setBulkMultipleTargets():
523524
f.close()
524525

525526
def __findPageForms():
527+
class _(StringIO.StringIO):
528+
def __init__(self, content, url):
529+
StringIO.StringIO.__init__(self, content)
530+
self._url = url
531+
def geturl(self):
532+
return self._url
533+
526534
if not conf.forms:
527535
return
528536

@@ -532,19 +540,26 @@ def __findPageForms():
532540
infoMsg = "searching for forms"
533541
logger.info(infoMsg)
534542

535-
response, _ = Request.queryPage(response=True)
543+
response, headers = Request.queryPage(response=True)
536544

537545
if response is None or isinstance(response, basestring):
538546
errMsg = "can't do form parsing as no valid response "
539547
errMsg += "object found. please check previous log messages "
540548
errMsg += "for connection issues"
541549
raise sqlmapGenericException, errMsg
542550

551+
response = _(response.read(), response.geturl())
543552
try:
544553
forms = ParseResponse(response, backwards_compat=False)
545554
except ParseError:
546-
errMsg = "badly formed HTML at the target url. can't parse forms"
547-
raise sqlmapGenericException, errMsg
555+
errMsg = "badly formed HTML at the target url. will try to filter it"
556+
logger.error(errMsg)
557+
response.seek(0)
558+
filtered = _("".join(re.findall(r'<form.+?</form>', response.read(), re.I | re.S)), response.geturl())
559+
try:
560+
forms = ParseResponse(filtered, backwards_compat=False)
561+
except ParseError:
562+
raise sqlmapGenericException, "no success"
548563

549564
if forms:
550565
for form in forms:

0 commit comments

Comments
 (0)