Sunday, July 1, 2012

Sql injection attack {ဟက္ကာဝါသနာရွင္ သူငယ္ခ်င္းမ်ားအတြက္သီးသန္႕}


Sql injection attack ဆိုတာ လက္ရွိ web ေလာကကို အႏၱရယ္ အေပးဆံုး code injection attack တမ်ိဳးပါ ။ xss attack ၿပီးရင္ လူသံုးအမ်ားဆံုးလို ့ ကၽြန္ေတာ္ထင္ပါတယ္ ။ ဒီအေၾကာင္းေရးရတဲ့ ရည္ရြယ္ခ်က္ကေတာ့ သူတပါးအက်ိဳးမဲ့ေစရန္မဟုတ္ပဲ မိမိၾကံဳေတြ ့လာရင္
ကာကြယ္နိုင္ေအာင္ပဲၿဖစ္ပါတယ္ ။ ၿမန္မာအခ်င္းခ်င္းၿပန္ရိုက္မယ့္ တုတ္မ်ိဳးေတာ့ ၿဖစ္မွာ ကၽြန္ေတာ္ေၾကာက္ပါတယ္။ ဒီေတာ့ နည္းပညာတရပ္အေနနဲ့တာ ေလ့လာေစခ်င္တဲ့ ဆႏၵနဲ ့ မွ်ေဝလိုက္ပါတယ္ခင္ဗ်ား.............။
ွsql injection ကို သံုးဖို ့ တၿခားဘာ tool မွ ေထြေထြထူးထူးမလိုပါဘူး ။ browser တခုရွိေနရင္ပဲ ရပါၿပီ ။ sql injection attack ကို စတင္ေလ့လာေတာ့မယ္ဆိုရင္ sql database နဲ ့ query ေတြအေၾကာင္းကို မသိလို ့မၿဖစ္ပါဘူး ။ဒါေၾကာင့္ ဒီ အေၾကာင္းက အရင္ စတင္ပါ့မယ္ ။
website တခုကို စတင္ တည္ေဆာက္ေတာ့မယ္ဆိုရင္ database ဆိုတာက အေရးၾကီးတဲ့ အစိတ္အပိုင္းတခုပါပဲ ။ ဘာလို ့ဆိုေတာ့ website ရဲ ့ data ေတြ ၊ user ေတြ ၊ post ေတြ စတဲ့ အေရးၾကီးအခ်က္အလက္ေတြကို စုစည္းထားတဲ့ေနရာၿဖစ္လို့ပါ။ ေနာက္အပိုင္းက်မွေသခ်ာရွင္းလင္းၿပပါ့မယ္ ။ database တခုမွာ table တခုကေန မ်ားစြာ အထိပါဝင္နိုင္ပါတယ္ ။ table တခုစီမွာ သက္ဆိုင္ရာ coloum ေတြရွိၿပီး coloum တခုစီရဲ့ေအာက္မွာdata ေတြပါဝင္တဲ့ row ( တခ်ိဳ့က record လို ့ေခၚပါတယ္) ေတြရွိပါတယ္ ။ ဒီေလာက္ပဲ မွတ္ထားပါအံုး ။
ကဲ...sql အေၾကာင္း စလိုက္ၾကရေအာင္ ။ sql ဆိုတာ sever scripting language တခု ပါ ။ database တခုကို query ေတြ သံုးၿပီး table ေတြကို ဖ်က္မယ္၊ ၿပင္မယ္၊ထပ္တိုးမယ္။ data ေတြကို ဖ်က္မယ္၊ၿပင္မယ္၊ထပ္တိုးမယ္။ စတာေတြကို sql query ေတြသံုးၿပီး ၿပဳၿပင္ေၿပာင္းလဲတဲ့ language တခုပါ ။ ဥပမာ ... vulnerability ရွိေနတဲ့ ဆိုဒ္တခုကို injection ထိုးလို ့ ေပါက္ၿပီဆိုရင္ site admin ရဲ့ acc ေတြကိုဖ်က္မယ္ ၿပင္မယ္ username နဲ ့ password ေတြကိုၿပင္မယ္၊ အစားထိုးမယ္ ။ ဒါေတြကို လုပ္ေဆာင္ၾကရပါမယ္ ။ အဲလိုလုပ္ေဆာင္ဖို ့ဆိုရင္ အခုေၿပာမယ့္ sql query ေတြကိုနားလည္ထားရပါမယ္ ။တကယ္လို ့ မိမိ site ကို hack ခံထိၿပီဆိုပါေတာ့၊ database ကို ဝင္လို ့ရေသးရင္ ဒီ query ေတြသံုးၿပီး ၿပန္ယူနိုင္ပါတယ္။ေနာက္ဆံုး မိမိဆိုဒ္ကို injection ၿပန္ထိုးၿပီး ၿပန္ယူနိုင္ပါတယ္ ။ ဒီေတာ့ ဒီေနရာကစၿပီး ေသခ်ာနားလည္ေအာင္ ေလ့လာရမွာၿဖစ္ပါတယ္ ။
SQL select statement ကေန စၾကရေအာင္ ... ေအာက္က query ေလးကိုၾကည့္ပါ ။
select coloum_name
from table_name
ဒါက column ေတြကိုၿပသေအာင္လုပ္တဲ့ query ပါ ။ column_name ေနရာမွာ column ရဲ ့ အမည္ကို ထည့္ရမွာၿဖစ္ၿပီး column အားလံုးကိုေခၚၾကည့္မယ္ဆိုရင္ * (ခေရပြင့္ သေကၤတ) ေလးကိုထည့္ေပးပါ ။ဒီေကာင္က အားလံုးကိုမွတ္ပါဆိုတဲ့ အဓိပၸါယ္ပါ ။ table_name ေနရာမွာ table ရဲ ့အမည္ကို ေရးရမွာပါ။
ကၽြန္ေတာ္တို ့ database က table တခုရဲ ့ အမည္က smf_1users ဆိုပါစို ့ဗ်ာ ။ smf_1users ဆိုတဲ့ table ရဲ့ ေကာ္လံေတြနဲ့ data ေတြကို ေခၚၾကည့္ခ်င္တယ္ဆိုရင္.............
select *
from smf_1users
ဒါဆိုရင္ smf_1users ဆိုတဲ့ table ရဲ ့ ေကာ္လံ အားလံုးနဲ့ row အားလံုး က်လာပါလိမ့္မယ္ ။လက္ေတြ့လုပ္ေဆာင္ၾကည့္ခ်င္တယ္ဆိုရင္ မိမိ database ရဲ ့ php my admin ကိုသြားပါ ။ အဲဒီမွာ query ဆိုတဲ့ tab ကို နွိပ္ၿပီး command ေတြကို ေရးၿပီး ေလ့က်င့္နိုင္ပါတယ္ ။ database မရွိတဲ့သူမ်ားကေတာ့ w3school.com မွာေလ့က်င့္ဖို ့ေနရာေပးထားပါတယ္။ အေသးစိတ္လဲေရးသားထားပါတယ္ ။web သမားတိုင္း w3school ဆိုရင္သိၾကမွာပါ ။ beginner မ်ားကေတာ့ www.w3school.com လို ့ ရိုက္ၿပီး ေလ့လာနိုင္ပါတယ္ ။
ဒီတခါေတာ့ SQL where clause အေၾကာင္းေလးေလ့လာၾကရေအာင္......အသံုးၿပဳမယ့္ syntax ေလးကေတာ့ ဒီလိုပါ။
select*
from table_name
where column_name + operator +values
ထံုးစံအတိုင္း select * ဆိုတာကေတာ့ ေကာ္လံေတြ အကုန္လံုးကို ေခၚၾကည့္ဖို့ command ပါ ။ table_name ေနရာမွာ မိမိၾကည့္မယ့္ table ရဲ ့အမည္ကိုထည့္ပါ ။ where ဆိုတဲ့ command ကေတာ့ ေကာ္လံတခုရဲ ့ ေအာက္ကတိတိက်က်သိထားတဲ့ row တခုကို ေခၚၾကည့္ဖို့ပါ ။ ရွဳပ္သြားၿပီထင္ပါတယ္။ေအာက္မွာထပ္ရွင္းပါ့မယ္။
( စာၾကြင္း ။ ။ Sql query command ေတြကိုေရးတဲ့အခါမွာ တိတိက်က်ေရးသားရမယ္လို ့ မသတ္မွတ္ထားပါဘူး ။ javascript variables ေတြကို ေရးတဲ့အခါ မွာ C အၾကီးနဲ့c အေသးမတူပါဘူး ။ js ဟာ sensitive ၿဖစ္ပါတယ္ ။ စာလံုးအၾကီးအေသး ေသခ်ာခြဲၿခားေရးရပါတယ္ ။ sql ကေတာ့ no sensitive ပါ ။ SELECT နဲ့ select တူတူပါပဲ ။ ဒါေလးတခ်က္ေလာက္သိထားရပါမယ္။ )
ကၽြန္ေတာ္တို့ SMF_1USERS ဆိုတဲ့ TABLE မွာ user ေတြက ေထာင္ခ်ီရွိတယ္ဆိုပါေတာ့ဗ်ာ . ဆိုလိုတာက row ေတြအမ်ားၾကီးရွိတယ္ဆိုပါေတာ့ ။ ေကာ္လံ name ေတြကလဲ အမ်ားၾကီးပဲ ။ ကၽြန္ေတာ္တို ့ ၿမင္ခ်င္တာက admin ရဲ့ data အခ်ိဳ့ပဲဗ်ာ ။ ဆိုလိုတာက admin ရဲ့ username ၊ password ၊ email စတာေတြေပါ့ ။ ေကာ္လံ name ေတြအမ်ားၾကီးထဲက ကၽြန္ေတာ္တို ့ေခၚၾကည့္မွာက usernameရွိတဲ့ user_name ၊ password ရွိတဲ့ user_password၊ email ရွိတဲ့ user_email ဆိုတဲ့ ေကာ္လံေတြဆိုပါစို ့ ။ ဒါ နမူနာေၿပာတာေနာ္ ။ site တခုနဲ့တခုအမည္ေပးပံုၿခင္းတူခ်င္မွတူမွာပါ ။ မိတ္ေဆြတို ့က ေမးပါလိမ့္မယ္ ။ သူမ်ား site ရဲ ့ ေကာ္လံ name ေတြကို ဘယ္လို သိမွာလဲလို ့ ..... ဟုတ္ကဲ့.... site မွာ vulnerability ရွိလို ့ injection ထိုးၿပီး ေပါက္ၿပီဆိုရင္ၿဖင့္ query ေတြ သံုးၿပီး သိေအာင္လုပ္နိုင္ပါတယ္။ေနာက္ပိုင္းေရးသားခ်က္ေတြမွာေတြ ့ရမွာပါ ။အခုစကားစပ္မိလို့ေၿပာတာပါ။ကဲ...ဆက္ရေအာင္....
select user_name, user_password, user_email
from smf_1users
where user_name='admin'
ဒါဆိုရင္ user_name ဆိုတဲ့ ေကာ္လံေအာက္မွာ admin ဆိုတဲ့ စာလံုးရွိတဲ့ row တခုပဲ က်လာပါလိမ့္မယ္ ။ က်န္တဲ့ user ေတြရဲ့ row ေတြ က်လာမွာမဟုတ္ပါဘူး ။ query command ကို ၿပန္ရွင္းရရင္ select user_name, user_password, user_email ဆိုတာက user_name, user_password, user_email ဆိုတဲ့ ေကာ္လံ 3 ခုကိုပဲ မွတ္ၿပီး ၿပပါလို ့ဆိုတာပါ ။ line 2 ကေတာ့ သိၿပီးသားပါ ။ table ကိုညႊန္းတာပါ ။ line 3 ကေတာ့ user_name ဆိုတဲ့ ေကာ္လံဟာ admin ဆိုတဲ့ တန္ဖိုးရွိတယ္လို ့ = operator နဲ့ ေၾကၿငာလိုက္တာပါ ။ ဆိုလိုတာက user_name ေကာ္လံေအာက္မွာ admin ဆိုတဲ့ value ရွိေနတဲ့ row တခုပဲ မွတ္ၿပီး ၿပပါလို ့ command ေပးလိုက္တာပါ ။ operators သေကၤတေတြနဲ့ အသံုးၿပဳပံုေတြ ကိုေတာ့ ကၽြန္ေတာ္ဆက္လက္ေရးသားမယ့္ အပိုင္းမွာ ေလ့လာၾကပါ ။ where clause အခန္းဟာ အေရးၾကီးၿပီး အသံုးမ်ားသလို operator ေတြနဲ့ တြဲသံုးပံုေတြကိုပါေသခ်ာသိထားမွ အသံုးခ်နိုင္မွာၿဖစ္လို ့ ေသခ်ာေလ့လာရမယ့္ အခန္းၿဖစ္ပါတယ္ ။
where clause နဲ့ operator ေတြ တြဲသံုးတဲ့ အပိုင္းကို ဆက္ၾကရေအာင္.... တြဲသံုးရတဲ့ operator ေတြကို ေအာက္မွာအရင္ က်က္မွတ္လိုက္ပါ ။ operator သေကၤတ ေတြေနာက္မွာ သံုးတဲ့ values တန္ဖိုးေတြကိုေရးတဲ့အခါမွာ စာလံုး (word) ေတြဆိုရင္ single quote (') ထည့္ေပးရပါမယ္ ။ ကိန္းဂဏန္းေတြဆိုရင္ single quote ( ' ) ထည့္စရာမလိုပါဘူး ။ဒီအခ်က္မွာမွားယြင္းရင္ query လုပ္တဲ့အခါ အလုပ္လုပ္မွာမဟုတ္ပါဘူး ။
Operator Description
= Equal
<> Not equal > Greater than
< Less than
>= Greater than or equal
<= Less than or equal BETWEEN Between an inclusive range LIKE Search for a pattern IN If you know the exact value you want to return for at least one of the columns တခ်ိဳ ့ version ေတြမွာ < > ကို != ဒီလိုေရးပါတယ္ ။ ဒါေတြကို w3school ကပဲ အလြယ္ကူးေပးလိုက္တယ္ေနာ္..တခုခ်င္းကို where clause နဲ့ ဘယ္လိုတြဲသံုးရမယ္ဆိုတာကို ေအာက္မွာေရးသားပါ့မယ္ ။
= operator
ဒီေကာင္ကို သံုးပံုေလးေအာက္မွာၾကည့္ပါ ။ အေပၚမွာလဲ ရွင္းၿပီးပါၿပီ .. ဒီမွာ ထပ္ၿပီးရွင္းခ်င္ပါတယ္ ။ post ေတြမ်ားေအာင္ေရးတာမဟုတ္ပဲ... က႑ ေလးအလိုက္ေရးေတာ့ ဖတ္သူ ၿမင္သာၿပီး မွတ္ရတာလြယ္ကူေစမွာမို ့ပါ ။
select*
from table_name
where column_name= value
line 1 နဲ့ line 2 က သိၿပီးသားပါ ..မရွင္းေတာ့ပါဘူး ။ line 3 ကိုရွင္းပါ့မယ္ ။ where column_name ဆိုတာကေတာ့ မိမိေခၚၾကည့္မယ့္ table က မိမိလိုခ်င္တဲ့ data ရွိမယ့္ column_name ကို ရည္ညႊန္းတာပါ ။ တိတိက်က်ထပ္ညႊန္းဖို ့ = operator ကို သံုးလိုက္ပါတယ္ ။ ဆိုလိုတာက table ရဲ့ ေကာ္လံတခုေအာက္က တိတိက်က် data တခုရွိတဲ့ row ကို မွတ္ၿပီး ၿပခိုင္းလိုက္တာပါ ။ ဥပမာ...ၾကည့္ပါ ။
ကၽြန္ေတာ္တို ့ smf_1users ဆိုတဲ့ table မွာ user_name ဆိုတဲ့ ေကာ္လံရွိေနတာေတြ ့ၿပီဆိုပါစို ့ဗ်ာ ။ အဲဒီေအာက္မွာရွိတဲ့ admin ဆိုတဲ့ user ရဲ ့ data ေတြကိုပဲၾကည့္ခ်င္တယ္ ။
select*
from smf_1users
where user_name='admin'
ဒါကေတာ့ query command ပါ ။ = operator ကို သံုးထားတဲ့အတြက္ ဒီ column ေအာက္မွာ admin ဆိုတဲ့ value တခု ေသခ်ာရွိေနရပါမယ္ ။ = ဆိုတာ ထပ္တူညီသေကၤတကိုဗ် .. စာလံုးတလံုးေတာင္ လြဲလို့မရပါဘူး ။ လြဲတာနဲ့ အလုပ္မလုပ္ေတာ့ပါဘူး ။ ဒီ operator က အသံုးဝင္ပါတယ္ ။ ကၽြန္ေတာ္တို ့ စီးပြားေရးလုပ္ငန္းအတြက္ မိမိ ေဖာက္သည္ေတြရဲ ့ အခ်က္အလက္ေတြကို database တခုေဆာက္ၿပီး customers လို ့ table name ေပးထားမယ္ ... column 3ခု ထားမယ္ဗ်ာ ... ေဖာက္သည္ရဲ ့ အမွတ္စဥ္ နံပါတ္က တခု ၊ အမည္ကတခု ၊ လိပ္စာ address က တခု ေပါ့ဗ်ာ ... ဒီမွာ ကၽြန္ေတာ္တို ့က U Win ဆိုတဲ့ ေဖာက္သည္ရဲ ့ လိပ္စာကို အေရးတၾကီး သိဖို ့လိုအပ္လာၿပီဗ်ာ ... ခက္တာက သူရဲ့ အမွတ္စဥ္ကို ေမ့ေနၿပီ row ဘယ္ေလာက္မွာ ရွိလဲမသိေတာ့ဘူး ။ တခုခ်င္းရွာရေအာင္ကလဲ ROW ေတြက ေထာင္ေသာင္းခ်ီေနတာကိုဗ် .။ အခ်ိန္အဲေလာက္မေပးနိုင္ဘူး ။ ဒါေပမယ့္ သူ ့အမည္ကိုေတာ့ ကၽြန္ေတာ္တို ့ သိေနတာပဲ .. ဒါေၾကာင့္ QUERY နဲ့ရွာမယ္ဗ်ာ .. ။
SELECT*
FROM CUSTOMERS
WHERE CUSTOMER_NAME='U WIN'
ဒါဆိုရင္ CUSTOMER_NAME ေကာ္လံေအာက္မွာ ရွိေနတဲ့ U WIN ဆိုတဲ့ VALUE ရွိေနတဲ့ ROW တခုပဲ က်လာပါလိမ့္မယ္ ။ ဒါဆို သူလိပ္စာကို သိနိုင္ၿပီေပါ့ ။ ဘာလို ့လဲဆိုေတာ ့ ေကာ္လံေတြအကုန္က်လာေအာင္လို ့ SELECT* ကို သံုးထားတယ္ေလ ... ။ ဒီေလာက္ဆိုရင္ = OPERATOR ကို သံုးနည္းနဲ့ သေဘာသဘာဝကို နားလည္ေလာက္ၿပီထင္ပါတယ္ ။ဒီလိုေရးၿပရတာကလဲ စာဖတ္သူ ေတြးတတ္ေအာင္ပါ ။ ခ်ဲ့နိုင္သေလာက္ခ်ဲ့ၿပီးေတြးရပါ့မယ္ ။ SQL INJECTION ဟာ ေတြးနိုင္သူတာ ေအာင္ၿမင္မွဳရနိုင္ပါတယ္ ။ ခ်ဲ့ထြင္ေတြးေတာၿပီး သံုးစြဲၾကရပါမယ္ ။
( ကၽြန္ေတာ္ အခုေရးသားေနတာဟာ စာဖတ္သူအေနနဲ့ ေနွးလြန္းတယ္လို ့ထင္ပါလိမ့္မယ္ ။ စိိတ္ရွည္ရွည္ထားၿပီးေလ့လာၾကပါ ။ ကၽြန္ေတာ္ ဒီလိုအေသးစိတ္ေရးသားေနတာက ေလ့လာသူတေယာက္ေသခ်ာသေဘာေပါက္ေစခ်င္လို ့ပါ ။ ဒီေနရာမွာသေဘာမေပါက္ရင္ ေနာက္ပိုင္း ခ်ာလည္လည္ၿဖစ္ကုန္ပါလိမ့္မယ္ ။ )
(ကၽြန္ေတာ္ဒီဖိုရမ္မွာ အခ်ိန္ေပးၿပီးသိသမွ်ေရးသားေနတာက ၿမန္မာလူမ်ိဳးေတြထဲက မသိမတတ္ေသးသူေတြတတ္ပါေစေတာ့ဆိုတဲ့ ရည္ရြယ္ခ်က္ေၾကာင့္ပါ ။တၿခားဘာရည္ရြယ္ခ်က္မွမရွိဘူး ။ ၿပည္ပေရာက္ကၽြန္ေတာ္တို ့ေတြ အမ်ားဆံုးေတြ ့ေနတာက ၿမန္မာဆိုရင္ အၿခားေကာင္ေတြက အထင္ေသးခ်င္ၾကတယ္ ။ ၿမန္မာေတြ ကြန္ၿပဴတာကို မသိမၿမင္ မသံုးတတ္ဘူးလို ့ထင္ေနတယ္ ။ သံုးတတ္ရင္လဲ အေပၚယံေလာက္ပဲလို ့ထင္ေနၾကတယ္ ။ ဒါကို မခံခ်င္ပါဘူး ။ၿမန္မာအခ်င္းခ်င္းေၾကာင္လက္သည္းဝွက္မေနပဲ မွ်ေဝ ဖလွယ္ၾကမွ ကၽြန္ေတာ္တို ့လိုခ်င္တဲ့ပန္းတ္ုိင္ကိုေရာက္မွာပါ ။ ကၽြန္ေတာ္ကေတာ့ ဘယ္သူေတြဘာလာေၿပာေၿပာ ကၽြန္ေတာ္သိသမွ် ေတာ့ ဆက္လက္မွ်ေဝသြားမွာပါ ။ မေကာင္းတဲ့ပညာဆိုတာေလာကမွာမရွိပါဘူး ။ သံုးစြဲသူအေပၚလိုက္ၿပီး ေကာင္းၿခင္း၊ မေကာင္းၿခင္းဆိုတာၿဖစ္လာတာပါ ။ဒါကၽြန္ေတာ့္ခံယူခ်က္ပါ ။SQL INJECTION ကို တတ္သြားလို ့ ကၽြန္ေတာ့ SITE ကို လာထိုးလို ့ေပါက္သြားရင္လဲ ကၽြန္ေတာ္ကေတာ့ ထုိသူ ့အတြက္ ဂုဏ္ယူပါတယ္ဆက္လက္ေရးသားပါအံုးမယ္.......။
Posted by တိုက္ၾကီးသား
ဝါသနာတူ သူငယ္ခ်င္းေတြကိုု ျပန္လည္မွ်ေဝေပးတာပါ...ေက်းဇူးမသိတဲ့ ေကာင္ေတြ ငွက္ေပ်ာ္တုန္ဖက္ေသၾကပါေစ...........:D

0 ကြန္မန့္ေရးရန္:

Post a Comment