|
24 | 24 |
|
25 | 25 | import re |
26 | 26 |
|
| 27 | +from xml.etree import ElementTree as ET |
| 28 | + |
27 | 29 | from lib.core.common import randomInt |
28 | 30 | from lib.core.common import randomStr |
29 | 31 | from lib.core.convert import urlencode |
|
33 | 35 | from lib.core.data import temp |
34 | 36 | from lib.core.exception import sqlmapNoneDataException |
35 | 37 |
|
36 | | - |
37 | 38 | class Agent: |
38 | 39 | """ |
39 | 40 | This class defines the SQL agent methods. |
@@ -82,16 +83,36 @@ def payload(self, place=None, parameter=None, value=None, newValue=None, negativ |
82 | 83 | paramString = conf.parameters[kb.injPlace] |
83 | 84 | paramDict = conf.paramDict[kb.injPlace] |
84 | 85 | value = paramDict[kb.injParameter] |
85 | | - retValue = paramString.replace("%s=%s" % (kb.injParameter, value), |
86 | | - "%s=%s%s" % (kb.injParameter, negValue, value + falseValue + newValue)) |
| 86 | + |
| 87 | + if "POSTxml" in conf.paramDict and kb.injPlace == "POST": |
| 88 | + root = ET.XML(paramString) |
| 89 | + iterator = root.getiterator(kb.injParameter) |
| 90 | + |
| 91 | + for child in iterator: |
| 92 | + child.text = "%s%s" % (negValue, value + falseValue + newValue) |
| 93 | + |
| 94 | + retValue = ET.tostring(root) |
| 95 | + else: |
| 96 | + retValue = paramString.replace("%s=%s" % (kb.injParameter, value), |
| 97 | + "%s=%s%s" % (kb.injParameter, negValue, value + falseValue + newValue)) |
87 | 98 |
|
88 | 99 | # Before identifing the injectable parameter |
89 | 100 | elif parameter == "User-Agent": |
90 | 101 | retValue = value.replace(value, newValue) |
91 | 102 | else: |
92 | 103 | paramString = conf.parameters[place] |
93 | | - retValue = paramString.replace("%s=%s" % (parameter, value), |
94 | | - "%s=%s" % (parameter, newValue)) |
| 104 | + |
| 105 | + if "POSTxml" in conf.paramDict and place == "POST": |
| 106 | + root = ET.XML(paramString) |
| 107 | + iterator = root.getiterator(parameter) |
| 108 | + |
| 109 | + for child in iterator: |
| 110 | + child.text = newValue |
| 111 | + |
| 112 | + retValue = ET.tostring(root) |
| 113 | + else: |
| 114 | + retValue = paramString.replace("%s=%s" % (parameter, value), |
| 115 | + "%s=%s" % (parameter, newValue)) |
95 | 116 |
|
96 | 117 | return retValue |
97 | 118 |
|
|
0 commit comments