“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)
No comments:
Post a Comment