Fixed resume functionality on --read-file when using MySQL's LOAD_FILE() via blind SQL injection.

This commit is contained in:
Bernardo Damele 2010-01-02 01:35:13 +00:00
parent 9c620da0a5
commit d55175a340

View File

@ -22,8 +22,6 @@ with sqlmap; if not, write to the Free Software Foundation, Inc., 51
Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
""" """
import re import re
from lib.core.common import dataToSessionFile from lib.core.common import dataToSessionFile
@ -34,7 +32,6 @@ from lib.core.data import queries
from lib.core.unescaper import unescaper from lib.core.unescaper import unescaper
from lib.techniques.blind.inference import bisection from lib.techniques.blind.inference import bisection
def queryOutputLength(expression, payload): def queryOutputLength(expression, payload):
""" """
Returns the query output length. Returns the query output length.
@ -45,14 +42,17 @@ def queryOutputLength(expression, payload):
select = re.search("\ASELECT\s+", expression, re.I) select = re.search("\ASELECT\s+", expression, re.I)
selectTopExpr = re.search("\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", expression, re.I) selectTopExpr = re.search("\ASELECT\s+TOP\s+[\d]+\s+(.+?)\s+FROM", expression, re.I)
selectDistinctExpr = re.search("\ASELECT\s+DISTINCT\((.+?)\)\s+FROM", expression, re.I) selectDistinctExpr = re.search("\ASELECT\s+DISTINCT\((.+?)\)\s+FROM", expression, re.I)
selectExpr = re.search("\ASELECT\s+(.+?)\s+FROM", expression, re.I) selectFromExpr = re.search("\ASELECT\s+(.+?)\s+FROM", expression, re.I)
selectExpr = re.search("\ASELECT\s+(.+)$", expression, re.I)
miscExpr = re.search("\A(.+)", expression, re.I) miscExpr = re.search("\A(.+)", expression, re.I)
if selectTopExpr or selectDistinctExpr or selectExpr: if selectTopExpr or selectDistinctExpr or selectFromExpr or selectExpr:
if selectTopExpr: if selectTopExpr:
regExpr = selectTopExpr.groups()[0] regExpr = selectTopExpr.groups()[0]
elif selectDistinctExpr: elif selectDistinctExpr:
regExpr = selectDistinctExpr.groups()[0] regExpr = selectDistinctExpr.groups()[0]
elif selectFromExpr:
regExpr = selectFromExpr.groups()[0]
elif selectExpr: elif selectExpr:
regExpr = selectExpr.groups()[0] regExpr = selectExpr.groups()[0]
elif miscExpr: elif miscExpr:
@ -84,7 +84,6 @@ def queryOutputLength(expression, payload):
return count, length, regExpr return count, length, regExpr
def resume(expression, payload): def resume(expression, payload):
""" """
This function can be called to resume part or entire output of a This function can be called to resume part or entire output of a