Web Security

Bulding a Polyglot XSS Vector

What is Polyglot ? Polyglot ဆိုတာျမန္မာလိုဆိုရင္ ဘာသာစကားအမ်ိဳးမ်ိဳးပါေသာလို႕ ဆိုပါတယ္
ဟုတ္ပါတယ္။ က်ေနာ္တို႕လည္း language အမ်ိဳးမ်ိဳးကိုသံုးျပီး XSS Vector တစ္ခုကိုတည္ေဆာက္
မွာပါ။ ဘာကိုဆိုလိုတာလဲဆိုရင္ေတာ့ Polyglot XSS vector ဟာ ၾကိဳတင္ျပင္ဆင္ထားတာျဖစ္တဲ့အတြက္
ကိုယ့္ရဲ႕လက္စြဲ လက္နက္တစ္ခုလို အၾကိဳက္ျပင္ဆင္ထားတဲ့ Vector မ်ိဳးပါ။ ကိုယ္တိုင္တည္ေဆာက္မယ္
ဆိုေတာ့ကာ သူမ်ားေတြဘယ္လိုတည္ေဆာက္လဲဆိုတာကိုအရင္ေလ့လာမွျဖစ္မွာေပါ့ေလ။

ဘယ္လိုအခ်ိန္ေတြမွာသံုးလို႕အဆင္ေျပမလဲ? ဒီေမးခြန္းအတြက္ အဓိကက်ေနာ္ေျပာခ်င္တာကေတာ့
Character Limit လုပ္မထားတဲ့ေနရာတိုင္းမွာသံုးႏိုင္ပါတယ္။ ဒါကိုသံုးတဲ့အတြက္ ဘာေတြထူးႏိုင္မလဲ။
ထူးတာေပါ့ သူကျပင္ဆင္ထားတဲ့ vector ျဖစ္တဲ့အတြက္ ပထမအခ်က္အခ်ိန္ကုန္သက္သာေစတာေပါ့။
ကိုယ္တိုင္စိတ္တိုင္းက်ျပင္ဆင္ဖို႕အတြက္ကေတာ့ ကိုယ္က Common Filter ေတြ ျဖတ္တတ္တဲ့ သေဘာတရား
ေတြကိုသိထားရမယ္။

Step 1 #
ကိုယ္ Inject လုပ္လိုက္တဲ့ vector ဟာ ေတာ္ေတာ္မ်ားမ်ား Website ေတြမွာ html tag တစ္ခုခုတည္းကိုေရာက္သြားတာ


သိျပီးသားျဖစ္မွာပါ။

Example :

attribute value ေတြကိုေၾကညာတဲ့အခါမွာ တခ်ိဳ႕ကလည္း Double quote (“) အစား Single Quote (‘) ကိုသံုးတာ
ေတြ႕ရပါတယ္။ ဒါေၾကာင့္ value ထဲကထုတ္ဖို႕အတြက္ Double Quote ေရာ Single Quote ေရာနဲ႕ tag ကိုပိတ္လိုက္မယ္။

Vector

Step 2#
ခုအဆင့္ကစျပီး က်ေနာ္တို႕ဟာ ေတာ္ေတာ္မ်ားမ်ားကို Bypass ျဖစ္တဲ့ Vector ေတြကို ပံုစံအမ်ိဳးမ်ိဳးနဲ႕စထည့္မယ္။
အေပၚဆင့္တုန္းကပိတ္ထားျပီဆုိေတာ့ သူသာအလုပ္ျဖစ္ရင္ဆိုတဲ့ option အတြက္ စဥ္စားရေတာ့မယ္။

စသျဖင့္ သာမာန္ XSS Vector တစ္ခုခုကိုထည့္လိုက္မယ္။

Source Code : Tracing

Step 3#
ဟုတ္ျပီ။ Developer က alert ကို XSS test တဲ့ code မို႕ေပးမသံုးဖူးဆိုပါေတာ့။ တျခားဟာေတြရွိေသးတယ္ေလ တခါတည္းၾကိုထည့္ထားမယ္။
alert မရဘူးလားေနပါေစ။ confirm ရွိတယ္ ။ confirm လည္းမလုပ္ဘူးလား ရေသးတယ္။ က်ေနာ္တို႕မွာ prompt ရွိေသးတယ္။

Vector

Step 4#
ေနာက္တစ္ဆင့္ထပ္သြားမယ္။ script ဆိုတာကို block ထားလို႕ က်ေနာ္တို႕ vector အလုပ္မလုပ္ဘူးဆိုပါေတာ့။ ဒီေတာ့ script ကို bypass လုပ္ခ်င္လည္း
လုပ္လို႕ရတယ္။ ဒါမွမဟုတ္ script အစားတျခားတစ္ခုခုကိုသံုးမယ္။


Source Code : Tracing

Step 5#
Lesser & Greater < , > ကို filter လုပ္ထားတယ္ဆိုရင္ေရာ value လို tag ထဲျမဳပ္ေနခဲ့တာဆိုရင္ေတာ့ event handler ေတြသံုးလို႕ရပါေသးတယ္။

ဆိုျပီးသံုးမယ္ ဒါကေတာ့ double quote (“) အတြက္ေပါ့။ Single quote ဆို single quote အတြက္
လုပ္ေပးရမယ္ က်ေနာ္ကေတာ့ double quote ကအသံုးမ်ားတယ္ဆိုေတာ့ double quote နဲ႕ပဲတည္ေဆာက္လိုက္မယ္။

ဒီေနရာမွာေသခ်ာထပ္စဥ္းစားစရာရွိတယ္။ အကယ္လို႕ ေရွ႕မွာ value ကပိတ္ႏိုင္ခဲ့တယ္ဆိုရင္ေတာ့ event handler ထိေရာက္မလာဘူး အိုေကသြားျပီ။
တကယ္လို႕မပိတ္ခဲ့ႏိုင္ဘူးဆိုရင္ဘာျဖစ္လာႏိုင္လဲဆိုေတာ့ > greater ကမရွိေတာ့ဘူး ” တစ္ခုကေရွ႕မွာက်န္ခဲ့မယ္ဆိုေတာ့

ဒီလိုမ်ိဳးျဖစ္သြားေရာ။
ဒီအခါမွာ ေရွ႕က double quote ကအရင္၀င္သြားျပီျဖစ္တဲ့အတြက္အဆင္မေျပေတာ့ဘူး။ ေအာက္မွာျပထားသလိုျဖစ္သြားမွာပါ။ [] ထဲကဟာေတြက
က်ေနာ္တို႕ input ေနာ္ ျမင္သာေအာင္ျပထားတာပါ။

” ” ၂ ခုကေရွ႕မွာျပီးသြားျပီဆိုေတာ့ ” onmouseover လာေတာ့ သံုးခုၾကီးျဖစ္ေနေရာေနာက္က ” အပိတ္နဲ႕ဆို value ထဲကေန onmouseover= ဆိုတာၾကီးက string
ၾကီးျဖစ္သြားေရာေပါ့။ မဟုတ္ေသးဘူး ျပန္ဆင္မယ္။

ဒီအခါမွာလည္းအလုပ္မလုပ္ျပန္ဘူး ဘာေၾကာင့္ဆို ‘ code တစ္ခုက်န္ေနလို႕ပါ။ ဒီေတာ့က်ေနာ္ကေတာ့စဥ္းစားလိုက္တယ္ Vector ကို single quote အတြက္ကတစ္ခု
double quote အတြက္ကတစ္ခုဆိုျပီးေတာ့ေပါ့။

Vector : (for duoble quote)


Vecrot : (for Single quote)


Step 6 #

ဟုတ္ျပီ။ အေပၚကအဆင့္ေတြဆိုရင္ ဘယ္လို ရည္ရြယ္ခ်က္နဲ႕လုပ္တယ္ဆိုတာနားလည္ေနေလာက္ျပီထင္ပါတယ္။ ထပ္ေျပာျပဦးမယ္။
တကယ္တမ္းက် Vector ကအရမ္းၾကီးရွည္ေနလို႕မရဘူးေလ ဒါေၾကာင့္ သူမ်ားလုပ္ထားတာေလးေတြလည္းျပန္သံုးသပ္ရမယ္။
ဟိဟိ က်ေနာ္ကေတာ့ Vector Encapsulation လို႕ကုိယ့္ဖာသာကိုနာမည္ေပးထားတယ္။ ေအာက္မွာၾကည့္ပါ။

XSS

ခုဆိုရင္ က်ေနာ္တို႕ ပံုစံ ၇ မ်ိဳးစာ Vector တစ္ခုရျပီ။

Vector :

Conclusion
နည္းလမ္းေတြအမ်ားၾကီးရွိပါတယ္။ Ashar Javed ကေတာ့ သူ႕ polyglot နဲ႕ Bug Bounty ေတာ္ေတာ္မ်ားမ်ားကိုရခဲ့တယ္ဆိုပါတယ္။ ဒါေၾကာင့္
XSS စိတ္၀င္စားတဲ့သူေတြျပင္ဆင္ထားေပါ့။ တကယ္တမ္းက XSS က Client Side Attack ၾကီးပါ။ ဒါေၾကာင့္ Server ဘက္ျခမ္းမွာဘာေတြသံုးထားတယ္ဆိုတာ
မသိရပါဘူး။ PHP Source Code ရွိျပီး White Box Testing လုပ္တဲ့ပံုစံကေတာ့တစ္မ်ိဳးေပါ့။

Polyglot ေတြေကာင္းတာေလးေတြေတြ႕ရင္ စုထားျပီး Collection လုပ္ျပီးတင္ေပးမယ္။ SQL မွာ Polyglot လုပ္လို႕ရတယ္ေနာ္။ ဒီလို logic ပဲ။

Thanks to All who i followed at twitter xD

Refrence : Ashar Javed’s polyglot

Previous Post Next Post

You Might Also Like

No Comments

Leave a Reply