Brain as SQL Fuzzer

ေခါင္းစဥ္ကုိေတာ့လွေအာင္ေပးထားတေပါ့ 😀 တကယ္ေတာ့ Brain ဆိုတာ fuzzer မဟုတ္ပါဘူး။ နားလည္ထားဖို႕လိုတာေလးေတြေရးေပးရင္ Automation ထပ္ျမန္တဲ့အရာေလးေတြရွိတယ္ဆိုတာကိုအဓိကေျပာခ်င္တာျဖစ္ပါတယ္။ Fuzzer ေတြက လူသက္သာတယ္ဆိုေပမဲ့ ISP ေတြရဲ႕ Data charges နဲ႕ျပန္တြက္မယ္ဆိုရင္ သိပ္ေတာ့မစားသာလွဘူး။ တကယ္လို႕သာ Brain နဲ႕ fuzz လုပ္ခဲ့မယ္ဆိုရင္ေတာ့ အခ်ိန္ နဲ႕ ပိုက္ဆံကို နည္းနည္းေတာ့ သက္သာေစမယ္လို႕ထင္မိပါတယ္။

Error 

Error ေတြကေနအေျဖရွာတယ္လို႕ေျပာၾကပါတယ္။ ဖတ္ဖူးၾကမယ္လို႕ထင္ပါတယ္။ ဒါေၾကာင့္ Error အေၾကာင္းေလးနည္းနည္းေဆြးေႏြးၾကည့္ၾကတာေပါ့။

String Based Errors

String variables ေတြရွိပါတယ္။ ( Reference )

ဒါေတြက မွားထည့္ရင္ Error တက္ပါတယ္။ ဘယ္လိုမ်ိဳးလဲ?

<?php 
$a="lol";
echo $a;
 ?>

ဒါက ပံုမွန္ double quoted string ပါ။ double quote ၂ ခုၾကားမွာရွိေနတဲ့  string ေပါ့။ ဘာျပသနာမွမရွိပါဘူး။ ေရးထားတာမွန္ေနတာကိုး။ ဒီလိုဆို

<?php 
$a="lol"";
echo $a;
 ?>

” ”  ” ၃ ခုျဖစ္သြားတဲ့အတြက္ အလုပ္မလုပ္ေတာ့ဘူး ။ Error တက္ပါတယ္။

Parse error: syntax error, unexpected '"' in C:\xampp\htdocs\error.php on line 2

ဒီလို Error ျပန္တက္တက္တာလား ? Double Quote သံုးခုျဖစ္သြားလို႕ Error တက္တာပါ။ တကယ္လို႕ single quote ထည့္ခဲ့ရင္ Error တက္ပါ့မလား။

<?php 
echo "aaa'";
 ?>

မတက္ပါဘူး Output က aaa’ ဆိုျပီးျပန္ေပၚေနမယ္။ syntax ကမွန္ေနတာကိုး။ Single quote ထည့္လိုက္လို႕ Error မတက္ဘူးဆို ေသခ်ာတယ္။ Single quoted string မဟုတ္ဘူး။ ဒီေနရာမွာ escape character ျဖစ္တဲ့ Back slash ကိုသံုးမယ္ဆိုရင္ေတာ့ ဘာ quote ပဲျဖစ္ျဖစ္ escape ျဖစ္သြားတဲ့ Error တက္မွာပဲ။

<?php 
echo "aaa\";
 ?>

ဒါက ဘာသံုးထားတယ္ဆိုတာေတာ့မသိႏိုင္ဘူး။ Input က အထဲကို၀င္သြားလားမ၀င္သြားဘူးလားဆိုတာပဲသိႏိုင္မယ္။ Initial test မွာသံုးႏိုင္ပါတယ္။ ခုဆို Error အေၾကာင္းကိုနားလည္သြားျပီ။

Strings Knowledge for testing

အထဲမွာဘာသံုးထားလဲဆိုတာ ခန္႕မွန္းဖို႕ဆိုတာ ဘာေတြသံုးလို႕ရတယ္ဆိုတာကို တို႕ေတြသိထားမွရမယ္။ မဟုတ္ရင္ တို႕ေတြ Escape လုပ္ႏိုင္မွာမဟုတ္ဘူး။ စမ္းၾကည့္ရေအာင္ ဒီလိုဆို DVWA ထဲက SQL Injection ဆိုပါစို႕။ Single quote ထည့္လိုက္တဲ့အခ်ိန္မွာ ေအာက္က Error တက္မယ္။

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''''' at line 1

Error တက္ျပီဆိုတည္းက guess လုပ္လို႕ရတယ္။

=' $input ' ;

single quote နဲ႕ေရးထားလို႕ single quote ထည့္လိုက္တဲ့အခ်ိန္ Error တက္တာေပါ့။

double quote ထည့္ၾကည့္ေလ ဘာ error မွမတက္ဘူး။  Error မွာလဲပါလာတယ္။ ” ‘ ” ဒီနားမွာ မွားေနပါတယ္တဲ့။

SQL query ကို Guess လုပ္ၾကည့္ရေအာင္။ ပံုမွန္အတိုင္းထည့္လိုက္မယ္။

http://localhost/DVWA-master/vulnerabilities/sqli/?id=1

Output က

ID: 1
First name: admin
Surname: admin

ဒါဆို Query က ဘယ္လိုျဖစ္ႏိုင္မလဲ?

SELECT id,firstname,surname from <table> where id=' $input ' ;

ဒါက Output အေပၚကိုၾကည့္ျပီး ေယဘူယ် ေတြးပစ္လိုက္တာျဖစ္တယ္။ * နဲ႕ Select လုပ္ထားလားဆိုတာမသိႏိုင္ဘူး။ ဘာလို႕လဲဆိုရင္ table ထဲမွာ ဒါပဲရွိတယ္လို႕ အတပ္မေျပာႏိုင္ဘူးေလ။ တကယ္လို႕သာ * ကိုသံုးခဲ့တယ္ဆိုရင္ေတာ့ input မွာ ေနာက္က WHERE condition ကို မွန္ေအာင္ထည့္ႏိုင္ရင္ အကုန္လံုးထြက္ၾကလာမယ္။

SELECT * from <table> where id=' ' or 1=1--+ ' ;

မဟုတ္ဘူးဆိုရင္ေတာ့ တို႕ေတြ table ထဲမွာ ဘာေတြညာေတြရွိတယ္ဆိုတာစဥ္းစားရေတာ့မယ္။ union ေတြဘာေတြနဲ႕ဆက္လုပ္ေတာ့ တျခား ဘယ္ Column ေတြရွိေသးတယ္ဆိုတာထိ။ ဒီမွာေတာ့ အဲဒါေတြမေျပာဘူး ။ Statement မွန္ေအာင္ပဲလုပ္မယ္။

တကယ္လို႕ Single မဟုတ္ပဲ Double quote ဆိုရင္ေရာ။ Double quote နဲ႕လိုက္ escape လုပ္ေပးရမွာေပါ့။

Interger type

SELECT * FROM lolsec WHERE id=1;

Interger နဲ႕ေဖာ္ျပလို႕ရတဲ့ column ေတြဆိုရင္ေတာ့ Interger type ျဖစ္ႏိုင္တယ္ဆိုတာသိထားရင္ေကာင္းတာေပါ့။

Double Quote

'SELECT * FROM lolsec WHERE id="1"';

Single Quote

"SELECT * FROM lolsec WHERE id='1'";

Single Quote & Bracket

"SELECT * FROM lolsec WHERE name=('thinbashane')";

Single quote & 2 Bracket

"SELECT * FROM lolsec WHERE name=(('thinbashane'))";

Knowing Bracket with error

<?php 
echo ('abc'');
 ?>

error

Parse error: syntax error, unexpected ''); ' (T_ENCAPSED_AND_WHITESPACE) in C:\xampp\htdocs\error.php on line 2

ဒီေလာက္ဆို Escape လုပ္တတ္မယ္ထင္ပါတယ္။ တခါတေလ Error မေပၚရင္ေတာ့တစ္မ်ိဳးေပါ့။ ဒီအခါက်ရင္ေတာ့ တို႕ေတြက ဘယ္လိုေတြးေရးတတ္တယ္ဆိုတာ သိထားမယ္ဆိုရင္ escape လုပ္လို႕ရမယ္လို႕ထင္ပါတယ္။

Lab ေတြလိုက္ေျဖၾကည့္မယ္ဆို အဆင္ေျပသြားမယ္လို႕ထင္ပါတယ္။

Thanks 😀