|
10 | 10 |
|
11 | 11 | app = Flask(__name__) |
12 | 12 |
|
| 13 | +# xml_content = '<?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test>' |
13 | 14 |
|
14 | | -@app.route("/XMLParser-Empty&xml.etree.ElementTree.fromstring") |
15 | | -def test1(): |
16 | | - # <?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test> |
| 15 | + |
| 16 | +@app.route("/lxml.etree.fromstring") |
| 17 | +def lxml_fromstring(): |
17 | 18 | xml_content = request.args['xml_content'] |
18 | 19 |
|
19 | | - parser = lxml.etree.XMLParser() |
20 | | - # 'root...' |
21 | | - return xml.etree.ElementTree.fromstring(xml_content, parser=parser).text |
| 20 | + return lxml.etree.fromstring(xml_content).text |
| 21 | + |
| 22 | + |
| 23 | +@app.route("/lxml.etree.XML") |
| 24 | +def lxml_XML(): |
| 25 | + xml_content = request.args['xml_content'] |
| 26 | + |
| 27 | + return lxml.etree.XML(xml_content).text |
| 28 | + |
| 29 | + |
| 30 | +@app.route("/lxml.etree.parse") |
| 31 | +def lxml_parse(): |
| 32 | + xml_content = request.args['xml_content'] |
| 33 | + |
| 34 | + return lxml.etree.parse(StringIO(xml_content)).text |
22 | 35 |
|
23 | 36 |
|
24 | | -@app.route("/XMLParser-Empty&xml.etree.ElementTree.parse") |
| 37 | +@app.route("/xmltodict.parse") |
| 38 | +def xmltodict_parse(): |
| 39 | + xml_content = request.args['xml_content'] |
| 40 | + |
| 41 | + return xmltodict.parse(xml_content, disable_entities=False) |
| 42 | + |
| 43 | + |
| 44 | +@app.route("/lxml.etree.XMLParser+lxml.etree.fromstring") |
25 | 45 | def test1(): |
26 | | - # <?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test> |
27 | 46 | xml_content = request.args['xml_content'] |
28 | 47 |
|
29 | 48 | parser = lxml.etree.XMLParser() |
30 | | - # 'jorgectf' |
31 | | - return xml.etree.ElementTree.parse(StringIO(xml_content), parser=parser).getroot().text |
| 49 | + return lxml.etree.fromstring(xml_content, parser=parser).text |
32 | 50 |
|
33 | 51 |
|
34 | | -@app.route("/XMLParser-Empty&lxml.etree.fromstring") |
| 52 | +@app.route("/lxml.etree.get_default_parser+lxml.etree.fromstring") |
35 | 53 | def test1(): |
36 | | - # <?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test> |
37 | 54 | xml_content = request.args['xml_content'] |
38 | 55 |
|
39 | | - parser = lxml.etree.XMLParser() |
40 | | - return lxml.etree.fromstring(xml_content, parser=parser).text # 'jorgectf' |
| 56 | + parser = lxml.etree.get_default_parser() |
| 57 | + return lxml.etree.fromstring(xml_content, parser=parser).text |
41 | 58 |
|
42 | 59 |
|
43 | | -@app.route("/XMLParser-Empty&xml.etree.parse") |
| 60 | +@app.route("/lxml.etree.XMLParser+xml.etree.ElementTree.fromstring") |
44 | 61 | def test1(): |
45 | | - # <?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test> |
46 | 62 | xml_content = request.args['xml_content'] |
47 | 63 |
|
48 | 64 | parser = lxml.etree.XMLParser() |
49 | | - # 'jorgectf' |
50 | | - return lxml.etree.parse(StringIO(xml_content), parser=parser).getroot().text |
| 65 | + return xml.etree.ElementTree.fromstring(xml_content, parser=parser).text |
51 | 66 |
|
52 | 67 |
|
53 | | -@app.route("/xmltodict-disable_entities_False") |
54 | | -def test2(): |
55 | | - # <?xml version="1.0"?><!DOCTYPE dt [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test> |
| 68 | +@app.route("/lxml.etree.XMLParser+xml.etree.ElementTree.parse") |
| 69 | +def test1(): |
56 | 70 | xml_content = request.args['xml_content'] |
57 | 71 |
|
58 | | - return xmltodict.parse(xml_content, disable_entities=False) |
| 72 | + parser = lxml.etree.XMLParser() |
| 73 | + return xml.etree.ElementTree.parse(StringIO(xml_content), parser=parser).getroot().text |
0 commit comments