“SQL Injection” ဆိုတာကတော့ ပုံမှန် user input တွေနေရာမှာ attacker ဟာသူ့ရဲ့ attack SQL code တွေကို အစားထိုးတည့်ပြီး database ဆီကို ပို့လွှတ်လိုက်တာဖြစ်ပါတယ်။ အဲဒီ code တွေကို SQL database မှာ အလုပ်လုပ်စေမှာ ဖြစ်ပါတယ်။ အောက်ဖော်ပြပါ tutorial လေးကတော့ အကောင်းဆုံးမဟုတ်တောင် သဘောတရားအနည်းငယ်ကိုတော့ သိစေမှာပါ။ ဒါကိုသိဖို့ SQL server request code အနည်းငယ်ကို အကျွမ်းတဝင် ရှိဖို့တော့လိုပါလိမ့်မယ်။
The Target Intranet
အခု website တစ်ခုကို ဘာမှ မသိဘဲ hack ကြည့်ပါမယ်။ ဒါကို blind attack လို့ ခေါ်ပါတယ်။ အဲဒီ website ဆက်သွယ်အလုပ်လုပ်နေတဲ့ database ကတော့ SQL server ဖြစ်ရပါမယ်။ server မှာ Microsoft’s IIS 6 နဲ့ ASP.Net ရော Run ထားဖို့လိုပါမယ်။ အခုနည်းလေးကတော့ SQL server နောက်ခံထားတဲ့ ဘယ် website ကိုမဆို စမ်းသပ်နိုင်ပါတယ်။
ပုံမှန် Login page တစ်ခုမှာ username နဲ့ password ကို တောင်းခံတဲ့ form ရှိပါတယ်။ နောက်ပြီးအောက်နားလေးမှာ forget password အတွက် recovery link လေးတစ်ခု ရှိပါတယ်။ အဲဒီကနေ email address ရိုက်ထည့်လိုက်ပြီ ဆိုတာနဲ့ website ဟာ အဲဒီ email address ကို SQL database မှာ သွားကြည့်ပါမယ်။ database မှာတွေ့ရင် password reset request ကိုအဲဒီ mail ဆီ send မှာဖြစ်ပါတယ်။အခုကျွန်တော်တို့ ဟာအဲဒီနေရာမှာ အလုပ် လုပ်မှာ ဖြစ်ပါတယ်။ ကဲ SQL code ကို ဘယ်လို လိမ်ကြမလဲ။
SELECT fieldlist
FROM table
WHERE field = '$EMAIL';
ဒီမှာ $EMAIL ဟာ user မှဖြည့်လိုက်တဲ့ email address ဖြစ်ပါတယ်။ ပုံမှန်အားဖြင့် ဒီလိုပဲ ဖြစ်မှာပါ။ အဲဒီ email address ကို ( ‘ ) နဲ့ပိတ်ထား ရပါမယ်။ အခုဒီမှာ email address မသိပါဘူး။ သဘောတရားကို ဆက်ကြည့်ပါမယ်။ အကယ်လို့ user ကနေ steve@unixwiz.net’ (မှတ်ရန် - ( ‘ ) ပါပါမယ် ) လို့ရိုက်ထည့်လိုက်ရင် ဘယ်လို်ဖြစ်သွားမလဲ။
SELECT fieldlist
FROM table
WHERE field = 'steve@unixwiz.net'';
ဒီလိုရိုက်ထည့်လိုက်ရင် SQL parser ဟာ ( ‘ ) နှစ်ခုတွေ့ပြီးတော့ syntax error ပြပါလိမ့်မယ်။ ဒီမှာ “email address is unknown” ဆိုတယ့် သဘောနဲ့ error တက်လာမယ်ဆိုရင် ဒီ website ဟာ user ထည့်ပေးလိုက်တဲ့ email address ကို SQL server request ရဲ့ WHERE clause မှာ ဖြည့်လိုက်တယ်ဆိုတာ သိရပါမယ်။ အဲဒါဆိုရင်တော့ WHERE field မှာ ပဲ အလုပ်လုပ်ရပါတော့မယ်။
anything’ OR ‘x’=’x လို့ ဖြည့်ကြည့်မယ်ဆိုရင်
SELECT fieldlist
FROM table
WHERE field = 'anything' OR 'x'='x';
ဒီမှာဆိုရင် ရှေ့ဆုံး က ( ‘ ) နဲ့ နောက်ဆုံးက ( ‘ ) တို့ဟာ မူရင်း clause မှာပါပြီးသားဟာ ဖြစ်တယ်ဆိုတာ သတိပြုရပါမယ်။ အဲဒီ clause မှာ ရှေ့က email address ကမှားနေ ပေမယ့်လည်း x=x ကတော့ အမြဲတမ်း မှန်နေမှာ ဖြစ်ပါတယ်။ OR ခံထားတဲ့ အတွက် ဒီ request ဟာ အလုပ်လုပ်သွားပါပြီ။ ဒီမှာ response အနေနဲ့ website ဟာ random user တစ်ယောက်ကို ရွေးပြီး password change နိုင်တဲ့ request mail ကို ပို့လိုက်ပါမယ်။ နောက်ပြီး website page မှာ အဲဒီ user ကို mail ပို့ပြီးကြောင်း ဖော်ပြပါလိမ့်မယ်။
Your login information has been mailed to random.person@example.com.
ဒါဆိုရင် attacker ဟာ ဖြည့်ရမယ့် user name ကို ရရှိသွားပြီဖြစ်ပါတယ်။အဲဒီ random user ကတော့ website ရဲ့ forgotten-password request mail ကို လက်ခံရရှိသွားပါလိမ့်မယ်။ သူ့အတွက်တော့ အံ့အားသင့်စရာ ဖြစ်သွားပါလိမ့်မယ်။ ဒါဟာ သူ့အတွက် သူ့ password hack ခံရတော့မယ့် warning ဖြစ်ကောင်းဖြစ်နိုင်ပါတယ်။အခုကိစ္စမှာ attacker ရဲ့ various inputs များအတွက် server မှတုန့်ပြန်နိုင်သော အခြေအနေ ၃ ခုရှိပါတယ်။
၁။ “Your login information has been mailed to email”
၂။”We don’t recognize your email address”
၃။Server error
အပေါ်က နှစ်ခုသော response ကတော့ well-formed SQL error ဖြစ်ပြီး server ရဲ့ SQL structure query ကိုခန့်မှန်းဖို့ အတွက် အသုံးဝင်ပါတယ်။ နောက်တစ်ခုဆိုရင်တော့ bad SQL error ဖြစ်ပါတယ်။
(ဆက်ရန်)
more info (http://unixwiz.net/techtips/sql-injection.html)
Sunday, September 27, 2009
min that thant
Posted in 
No Response to "SQL Injection Attacks(1)"
Post a Comment