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

Skip to content

Commit f8dde2c

Browse files
committed
adding --titles switch (killer switch for pages with lots of dynamicity and/or international ones)
1 parent 15d72ec commit f8dde2c

5 files changed

Lines changed: 22 additions & 3 deletions

File tree

lib/core/optiondict.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@
6868
"risk": "integer",
6969
"string": "string",
7070
"regexp": "string",
71-
"textOnly": "boolean"
71+
"textOnly": "boolean",
72+
"titles": "boolean"
7273
},
7374

7475
"Techniques": {

lib/core/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,3 +351,6 @@
351351

352352
# After this number of misses reflective removal mechanism is turned off (for speed up reasons)
353353
REFLECTIVE_MISS_THRESHOLD = 20
354+
355+
# Regular expression used for extracting HTML title
356+
HTML_TITLE_REGEX = "<title>(?P<result>[^<]+)</title>"

lib/parse/cmdline.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ def cmdLineParser():
209209
action="store_true", default=False,
210210
help="Compare pages based only on the textual content")
211211

212+
detection.add_option("--titles", dest="titles",
213+
action="store_true", default=False,
214+
help="Compare pages based only on their titles")
215+
212216
# Techniques options
213217
techniques = OptionGroup(parser, "Techniques", "These options can be "
214218
"used to tweak testing of specific SQL "

lib/request/comparison.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import re
1111

12+
from lib.core.common import extractRegexResult
1213
from lib.core.common import getFilteredPageContent
1314
from lib.core.common import removeDynamicContent
1415
from lib.core.common import wasLastRequestDBMSError
@@ -19,6 +20,7 @@
1920
from lib.core.exception import sqlmapNoneDataException
2021
from lib.core.settings import DEFAULT_PAGE_ENCODING
2122
from lib.core.settings import DIFF_TOLERANCE
23+
from lib.core.settings import HTML_TITLE_REGEX
2224
from lib.core.settings import MIN_RATIO
2325
from lib.core.settings import MAX_RATIO
2426
from lib.core.settings import LOWER_RATIO_BOUND
@@ -80,8 +82,13 @@ def comparison(page, getRatioValue=False, pageLength=None):
8082
elif isinstance(seqMatcher.a, unicode) and isinstance(page, str):
8183
seqMatcher.a = seqMatcher.a.encode(kb.pageEncoding or DEFAULT_PAGE_ENCODING, 'ignore')
8284

83-
seqMatcher.set_seq1(getFilteredPageContent(seqMatcher.a, True) if conf.textOnly else seqMatcher.a)
84-
seqMatcher.set_seq2(getFilteredPageContent(page, True) if conf.textOnly else page)
85+
if conf.titles:
86+
seqMatcher.set_seq1(extractRegexResult(HTML_TITLE_REGEX, seqMatcher.a))
87+
seqMatcher.set_seq2(extractRegexResult(HTML_TITLE_REGEX, page))
88+
else:
89+
seqMatcher.set_seq1(getFilteredPageContent(seqMatcher.a, True) if conf.textOnly else seqMatcher.a)
90+
seqMatcher.set_seq2(getFilteredPageContent(page, True) if conf.textOnly else page)
91+
8592
if seqMatcher.a is None or seqMatcher.b is None:
8693
ratio = None
8794
else:

sqlmap.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@ regexp =
221221
# Valid: True or False
222222
textOnly = False
223223

224+
# Compare pages based only on their titles
225+
# Valid: True or False
226+
titles = False
227+
224228

225229
# These options can be used to tweak testing of specific SQL injection
226230
# techniques.

0 commit comments

Comments
 (0)