sqlmap/lib/parse/payloads.py

101 lines
3.0 KiB
Python
Raw Normal View History

#!/usr/bin/env python
"""
2015-01-06 17:02:16 +03:00
Copyright (c) 2006-2015 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""
import os
from xml.etree import ElementTree as et
from lib.core.data import conf
from lib.core.data import paths
2011-07-08 10:02:31 +04:00
from lib.core.datatype import AttribDict
2014-11-10 15:41:53 +03:00
from lib.core.exception import SqlmapInstallationException
2010-12-03 13:51:27 +03:00
def cleanupVals(text, tag):
if tag in ("clause", "where"):
text = text.split(',')
2010-12-03 13:51:27 +03:00
if isinstance(text, basestring):
2012-12-10 20:20:04 +04:00
text = int(text) if text.isdigit() else str(text)
2010-12-03 13:51:27 +03:00
elif isinstance(text, list):
count = 0
2012-12-10 20:20:04 +04:00
for _ in text:
text[count] = int(_) if _.isdigit() else str(_)
2010-12-03 13:51:27 +03:00
count += 1
2010-12-03 13:51:27 +03:00
if len(text) == 1 and tag not in ("clause", "where"):
text = text[0]
2010-12-03 13:51:27 +03:00
return text
def parseXmlNode(node):
for element in node.getiterator('boundary'):
2011-07-08 10:02:31 +04:00
boundary = AttribDict()
for child in element.getchildren():
if child.text:
2010-12-03 13:51:27 +03:00
values = cleanupVals(child.text, child.tag)
boundary[child.tag] = values
else:
boundary[child.tag] = None
conf.boundaries.append(boundary)
for element in node.getiterator('test'):
2011-07-08 10:02:31 +04:00
test = AttribDict()
for child in element.getchildren():
if child.text and child.text.strip():
2010-12-03 13:51:27 +03:00
values = cleanupVals(child.text, child.tag)
test[child.tag] = values
else:
if len(child.getchildren()) == 0:
test[child.tag] = None
continue
else:
2011-07-08 10:02:31 +04:00
test[child.tag] = AttribDict()
for gchild in child.getchildren():
if gchild.tag in test[child.tag]:
prevtext = test[child.tag][gchild.tag]
test[child.tag][gchild.tag] = [prevtext, gchild.text]
else:
test[child.tag][gchild.tag] = gchild.text
conf.tests.append(test)
def loadBoundaries():
2014-11-10 15:41:53 +03:00
try:
doc = et.parse(paths.BOUNDARIES_XML)
2014-11-10 15:41:53 +03:00
except Exception, ex:
errMsg = "something seems to be wrong with "
errMsg += "the file '%s' ('%s'). Please make " % (paths.BOUNDARIES_XML, ex)
2014-11-10 15:41:53 +03:00
errMsg += "sure that you haven't made any changes to it"
raise SqlmapInstallationException, errMsg
root = doc.getroot()
parseXmlNode(root)
def loadPayloads():
payloadFiles = os.listdir(paths.SQLMAP_XML_PAYLOADS_PATH)
payloadFiles.sort()
for payloadFile in payloadFiles:
payloadFilePath = os.path.join(paths.SQLMAP_XML_PAYLOADS_PATH, payloadFile)
try:
doc = et.parse(payloadFilePath)
except Exception, ex:
errMsg = "something seems to be wrong with "
errMsg += "the file '%s' ('%s'). Please make " % (payloadFilePath, ex)
errMsg += "sure that you haven't made any changes to it"
raise SqlmapInstallationException, errMsg
root = doc.getroot()
parseXmlNode(root)