Vulnhub

The Necromancer [writeup]

Vulnhub

The Necromancer 

Boot2root CTF အမ်ိဳးစားပဲျဖစ္ပါတယ္။ ဒီ VM ေလးကစိတ္၀င္စားဖို႕ေကာင္းတယ္ ျပီးေတာ့ စုစုေပါင္း flag ၁၁ ခုပါ၀င္ပါတယ္။ Flag တစ္ခုကိုရမွ ေနာက္တစ္ခုကိုဆက္လုပ္ႏိုင္မွာျဖစ္ျပီး Geopardy style မဟုတ္ပဲ wargame CTF ပံုစံေလးျဖစ္တာေၾကာင့္ အေတြ႕ၾကံဳရေအာင္ ေျဖၾကည့္တာပါ။ English လိုေရးထားတဲ့ writeup ေတြလဲ Vulnhub မွာတင္ထားပါတယ္။ က်ေနာ္နားလည္သလိုေရးထားတာေတြက ဖတ္ရတာအဆင္မေျပဘူးဆို သြားဖတ္လို႕ရတာေပါ့။

VM ရဲ႕ပံုစံက DHCP auto assign ျဖစ္တာေၾကာင့္ က်ေနာ္တို႕ ထံုးစံအတိုင္း VM ရဲ႕ IP သိရေအာင္ netdiscover သံုးမယ္။

192.168.0.104 ဆိုတာ VM ရဲ႕ IP မွန္းသိရျပီ။

Note။  ။ ဒီ writeup ကို ၂ ခါခြဲေရးထားတာမလို႕ အလယ္ပိုင္းေလာက္မွာ ip 102 ကိုေျပာင္းသြားတာေတြ႕ရပါလိမ့္မယ္။ Screenshot ရိုက္တုန္းက ၂ ခါခြဲလုပ္လိုက္လို႕ပါ။ IP ေျပာင္းသြားတာမဟုတ္ပါဘူး။

ဘယ္ port ေတြ service ေတြပြင့္ေနလဲဆိုတာထံုးစံအတိုင္း nmap နဲ႕ scan ၾကည့္မယ္။

nmap scan result မွာ ဘာ port မွပြင့္ေနတာမေတြ႕ရပါဘူး။ wireshark ကို boot တက္တဲ့အခ်ိန္မွာ ဖြင့္ထားခဲ့ရင္ေတာ့ ေအာက္ကပံုလိုမ်ိဳးေတြ႕ရမွာျဖစ္ပါတယ္။

port ေတြပြင့္မေနေပမယ့္ သူ႕ဘက္ကေနေတာ့ port 444 ကေနတစ္ဆင့္ broadcast 192.168.0.1 – 255 ထိ တစ္ခုခုကိုပို႕ထားတယ္ဆိုတာသိရပါတယ္။ ဒါနဲ႕ VM ကို restart လုပ္လိုက္ပါတယ္။ ျပီးေတာ့ က်ေနာ္တို႕ စက္ကေန nc -lvp 4444 ဆိုျပီး listen လုပ္ထားလိုက္ပါတယ္။

ဒီလိုဆို VM ကေန port 444 ကေနပို႕လိုက္တဲ့ data ေတြလက္ခံရရွိမွာျဖစ္ပါတယ္။ Base64 decode လုပ္ၾကည့္လိုက္မယ္ဆိုရင္

flag 1 ခုစရပါျပီ။ ဒီ VM မွာက flag တစ္ခုစရတိုင္းေနာက္ထပ္ flag တစ္ခုအတြက္ Hint ေပးထားပါတယ္။ ေအာက္ဆံုးနားမွာေပးထားတာပါ။ ဒီမွာဆို

ကိုေပးထားပါတယ္။ u666 ဆိုတာ UDP port 666 ကိုဆိုလိုတာပါ။ flag ရဲ႕ MD5 hash ကိုျဖည္လိုက္ရင္ opensesame ဆိုတာရပါတယ္။ က်ေနာ္ကေတာ့ google မွာပဲရွာလိုက္တယ္။

http://md5.gromweb.com/?md5=e6078b9b1aac915d11b9fd59791030bf

 

udp port 666 ကို connect လုပ္ျပီး opensesame လို႕ပို႕လိုက္တာနဲ႕ flag 2 ကိုရပါျပီ။

ေနာက္ထပ္ flag တစ္ခုအတြက္ hint ကေတာ့

လို႕ဆိုပါတယ္။ 80 ဆိုတဲ့ port ပြင့္သြားျပီလို႕ထင္ပါတယ္။ ဟုတ္မဟုတ္ nmap နဲ႕ျပန္ျပီး scan ၾကည့္လိုက္မယ္။

ဟုတ္ပါတယ္ port 80 ပြင့္သြားျပီျဖစ္တာေၾကာင့္ browser ကေနေခၚၾကည့္လိုက္မယ္။

http://

Source Code ကိုတစ္ခ်က္ၾကည့္လိုက္မယ္။

ဘာမွမပါဘူး ပံုေလးတစ္ပံုပဲပါတယ္။ ဒီေတာ့ ပံုကိုပဲ ၾကည့္ရမယ္။ က်ေနာ္ကေတာ့ strings command နဲ႕ၾကည့္လိုက္တယ္။

ပံုထဲမွာ feathers.txt ဆိုတဲ့ string တစ္ခုေတြ႕ပါတယ္။ ဒီလိုဆို ဒီပံုထဲမွာ feathers.txt ဆိုတဲ့ file ရွိေနႏိုင္ပါတယ္။ ဒီေတာ့ jpg file ကို zip file ေျပာင္းျပီး ျဖည္ခ်လိုက္ရင္ featersmtxt ဆိုတဲ့ file ထြက္လာပါလိ့မ္မယ္။ base64 code ေတြေတြ႕ေတာ့ decode လုပ္လိုက္ရင္ flag 3 ကိုရပါျပီ။

ေနာက္ flag အတြက္ hint က

ဆိုေတာ့ Web Directory တစ္ခုဆိုတာသိရပါတယ္။

source code ၾကည့္မယ္။

ဒီမွာလဲပံုတစ္ပံုပဲပါတယ္။ ခုနလိုပဲလုပ္ၾကည့္တယ္။ ဒီတစ္ခါေတာ့ဘာမွမပါဘူး ပံုထဲမွာ။ ဒီေတာ့ directory မွာ ဘာေတြရွိေနႏိုင္လဲဆိုတာ bruteforce တိုက္ဖို႕လိုလာပါမယ္။ dirbuster ကိုသံုးနိုင္ပါတယ္။ က်ေနာ္ကေတာ့ wfuzz နဲ႕ဘဲတိုက္လိုက္တယ္။ wordlist ကလဲမိမိၾကိုက္ႏွစ္သက္ရာေပါ့။ rockyou ပဲသံုးလိုက္တယ္။

talisman ဆိုတဲ့ဟာတစ္ခုေတြ႕ေတာ့ url မွာေခၚၾကည့္လိုက္ရင္ talisman ဆိုတဲ့ binary file တစ္ခုကို down ရပါမယ္။

run ၾကည့္ရမွာေပါ့။

run ၾကည့္တဲအခါမွာ input ေတာင္းတယ္ဆိုေတာ့ Buffer Overflow ျဖစ္ႏိုင္တာေၾကာင့္ A ေတြအမ်ားၾကီးရိုက္ထည့္လိုက္တဲ့အခါမွာ Segmentation Fault လို႕ return ျပန္ပါလိမ့္မယ္။ Stack Based Buffer Overflow အတြက္ BaseCTF pwn05 မွာပါတဲ့ challenge နဲ႕ဆင္တာေတြ႕ရပါတယ္။ binary strpped မလုပ္ထားတဲ့အတြက္ function name ေတြကို gdb မွာပဲျဖစ္ျဖစ္ strings command နဲ႕ပဲျဖစ္ျဖစ္ေတြ႕နိုင္ပါတယ္။

ခု run ေနတဲ့ function က wearTalisman ျဖစ္ျပီးေတာ့ က်ေနာ္တို႕လိုခ်င္တဲ့ flag က chantToBreakSpell ဆိုတဲ့ function ထဲမွာျဖစ္ဖို႕မ်ားတယ္လို႕က်ေနာ္ယူဆလိုက္တယ္။ တကယ္က ဒီတိုင္းလုပ္ရတာေတာ့မဟုတ္ပါဘူး။ ေနာက္ပိုင္း Buffer Overflow ေတြေသခ်ာဖတ္ၾကည့္ေတာ့မွ memory address ကို သြားရမယ္ဆိုတာသိလာခဲ့ပါတယ္။ ေနာက္မွ ေသခ်ာေရးပါေတာ့မယ္။ ဒီမွာေတာ့က်ေနာ္လုပ္လိုက္တဲ့အတိုင္းပဲေျပာေတာ့မယ္။

gdb နဲ႕ wearTalisman ဆိုတဲ့ function ကို breakpoint ထားလိုက္ျပီး ကိုယ္သြားခ်င္တဲ့ chantToBreakSpell ဆိုတဲ့ function ကို jump လုပ္လိုက္ပါတယ္။

ဆိုတဲ့ flag ကိုရပါျပီ။ ေနာက္တစ္ခုအတြက္ hint က

u31337 ဆိုေတာ့ ခုနကလိုပဲ UDP port 31337 ကို connect လုပ္ရပါမယ္။

MD5 ကိုျဖည့္ၾကည့္ရင္ blackmagic ဆိုတာရတဲ့အတြက္

https://md5hashing.net/hash/md5/ea50536158db50247e110a6c89fcf3d3

ေနာက္ထပ္ directory တစ္ခုထပ္ရပါတယ္။ဒီလိုဆို port 80 ျပန္ပြင့္သြားျပီ။

Note ။ ။ ဒီ VM က port ေတြ တစ္ဆင့္ခ်င္းဖြင့္ပိတ္လုပ္တာျဖစ္တဲ့အတြက္ တစ္ခါတည္းအျပီးမလုပ္ႏိုင္ရင္ အစကျပန္လုပ္ရပါတယ္။

necromancer ဆိုတဲ့ link ေလး ပါေတာ့ႏွိပ္ၾကည့္လိုက္ပါတယ္။ download ဆြဲရမွာျဖစ္ပါတယ္။

file command နဲ႕ၾကည့္လိုက္ရင္ bzip ျဖစ္တာေၾကာင့္ ျဖည့္လိုက္ပါတယ္။ ထြက္လာတယ္။necromancer.out ကိုလည္းၾကည့္ေတာ့ tar archive ျဖစ္တာေၾကာင့္ထပ္ျဖည္ပါတယ္။ ဒီေတာ့ necromancer.cap file ထြက္လာပါတယ္။ Wireshark နဲ႕ဖြင့္ၾကည့္တဲ့အခါဘာမွေတြ႕ရမွာမဟုတ္ပါဘူး။ ဒါေၾကာင့္ aircrack-ng နဲ႕ၾကည့္တဲ့အခါမွသာ TCP 3 way handshake ပါလာတာေတြ႕ရမွာျဖစ္ပါတယ္။ ဒီေတာ့ aircrack နဲ႕ crack မယ္။

death2all ဆိုတဲ့ key ေတြ႕ပါလိမ့္မယ္။ rockyou နဲ႕ပဲ crack ပါတယ္။

ေစာေစာက flag 6 မွာေအာက္ဘက္မွာ hints ေတြပါပါေသးတယ္။ u161 ဆိုတဲ့ port က snmp port ျဖစ္ပါတယ္။

http://www.speedguide.net/port.php?port=161

ဒါဆိုခုနရတဲ့ key နဲ႕ snmp port ကို၀င္ၾကည့္မယ္။

snmpwalk -c death2all -v1 <ip>

Locked ျဖစ္ေနပါတယ္။ If you choose to defeat me, the door must be Unlocked” လို႕ေျပာထားတာေၾကာင့္ Locked ဆိုတဲ့ေနရာမွာ Unlocked လို႕ျပန္ေျပာင္းေပးမယ္။

ဆိုတာရပါျပီ။ t22 က TCP port 22 ဆိုေတာ့ ssh ေပါ့။ hash ကိုျဖည့္လို႕ရတဲ့တန္ဖိုးက

http://md5.gromweb.com/?md5=9e5494108d10bbd5f9e7ae52239546c4

“demonslayer” ဆိုတဲ့တန္ဖိုးရပါတယ္။

nmap နဲ႕ျပန္ scan ၾကည့္ေတာ့လဲ port 22 ပြင့္ေနပါျပီ။ ဒီေတာ့ demonslayer က username ဆိုရင္ password ကမသိဘူး။ ဒါေၾကာင့္ Hydra နဲ႕ ssh bruteforce တိုက္မယ္။

password က 12345678 ဆိုေတာ့လြယ္လြယ္ေလးေတြ႕ရမွာပါ။ rockyou နဲ႕ပဲ တိုက္တာပဲ ။ ssh login ၀င္ျပီးျပီဆုိေတာ့ demonslayer ဆိုတဲ့ user အေနနဲ႕ VM ထဲကိုေရာက္သြားပါျပီ။

flag8.txt file ေလးေတြ႕လို႕ ထုတ္ၾကည့္လိုက္ေတာ့ Defend yourslef! Counter attack the Necromancer’s spells at u777 ဆုိေတာ့ VM ေပၚေရာက္ေနျပီဆုိေတာ့ ဒီ VM ေပၚကိုလာတဲ့ u777 ကေန listen လုပ္ရပါမယ္။

ေမးခြန္းေတြေျဖေပးရပါမယ္။ မသိေတာ့ google မွာပဲရွာရပါတယ္။

https://en.wikipedia.org/wiki/Tsurani

ဒီလိုမ်ိဳးေမးခြန္းေလးေတြ google ေခါက္ျပီးေျဖရပါတယ္။

ေမးခြန္းေတြေျ့ဖျပီး flag ေတြရရင္ေတာ့ ေနာက္ဆံုး flag တစ္ခုပဲက်န္ပါေတာ့တယ္။ root folder ေအာက္မွာထားပါတယ္။  ssh login ၀င္ထားတဲ့ user က root user မဟုတ္တဲ့အတြက္ ပံုမွန္ဆို ၾကည့္လို႕မရပါဘူး။ ဒါေၾကာင့္ demonslayer ဆိုတဲ့ user ကဘာေတြကို run လို႕ရေနလဲဆိုတာကို sudo -l နဲ႕ၾကည့္ရင္ flag11.txt ဆိုတာကို run လိုရေနတာကိုေတြ႕ရပါမယ္။

w00t ! Thanks for reading xD

Previous Post Next Post

You Might Also Like

No Comments

Leave a Reply