• بواسطة x32x01 ||
طب ايه هو المعني الأساسي للـ SQL Injection ?!
ال SQL Injection هي عبارة اني بعمل Inject لـ Malicious Queries في ال Backend عشان اقدر اعمل Execute لل Functions الأساسية بتاعت ال Database الي هي SELECT , UPDATE , DELETE
فيه Functions تانية بس دول الأساسيين...
طب ايه هو ال Post Exploitation بتاع ال SQLinjection او ايه هي مخاطر ال SQL Injection ?!
- ممكن من خلالها تعمل Exfiltration او Manipulation لل Database
- ممكن من خلالها تقمل Read/Write علي ال Filesystem
- ممكن من خلالها تعمل RCE الي هو Remote Code Execution
طب ايه الي بيخلي ال Web Application فيه ثغرة SQL Injection ?!

فيه 4 اسباب رئيسية لل SQL Injection :
- اول حاجة : Inband error messages
يعني ال Developer مش بيكون عامل Handling صح لل Errors ف لما ييجي ال User يعمل حاجة غلط يقوم طالعله Error فيه Information بتكون Sensitive عن ال Database و ال Server مينفعش انها تظهر زي مثلاً اسم ال Table او اسم ال Row او اسم ال Column
- تاني حاجة ال Banner Parsing
انه يظهر لل User ال Version بتاع ال Database Engine بتاع ال Web Application ف بالتالي هيروح يدور علي ال Known Vulnerabilities الموجودة في ال Version دة و يستغلها..
-تالت حاجة ال SQL Dialect
بمعني انه كل Database Engine بيبقي ليها Standard Statements كدة لو ظهرت لأي حد بيعرف يحدد نوع ال Database Engine و بالتالي يقدر يحدد ال Vulnerabilities الموجودة في ال Database دي..
طب ايه هي انواع ال SQL Injection ؟!
- عندي حاجة اسمها Error-Based SQL Injection
-عندي حاجة اسمها UNION-Based SQL Injection
- عندي حاجة اسمها Inferential SQL Injection او بيسموها Blind SQL Injection

ال Blind SQL Injection دي جواها نوعين :
- ال Boolean-Based Blind SQL Injection او بيسموه Content-Based Blind SQL Injection
- ال Time-Based Blind SQL Injection
أول نوع الي هو ال Error-Based SQL Injection : دي بيبقي معتمد علي ال In-band Error Messages بتعتمد علي ال Errors الي بتطلع عن ال Database Server و من خلالها ال Attacker بيبتدي يعرف ال Structure بتاع ال DBMS يعني يعرف اسم ال Table ولا يعرف اسم ال Database نفسها ولا يعرف اسم ال Users او اسم ال Row و ال Column كدة يعني و علي اساسه يبتدي يعمل ال Injection Scenario بتاعه,,
تاني نوع الي هو ال UNION-Based SQL Injection :
دة برضو بيشتغل علي ال In-band Error Messages بيعتمد علي ال UNION Operator ف شغله انه بيعمل Merge او دمج بين اكتر من Result و بيعملهم Retrieve من ال Database و ال Operations كلها الي عملها Merge بترجع ف Result واحدة و بتكون في ال HTTP Header بتاع ال Response بتاعت ال Server.
تالت نوع الي هو ال Inferential SQL Injection او ال Blind SQL Injection :
ال Blind SQL Injection دة مختلف عن الأنواع الي فاتت لأنه مش بيشتغل بال Inband Error Messaging لأنه في ال Attack دة مفيش Data بتتنقل بين ال Web Application و ال Attacker مفيش Result بتطلع لل Attacker لانه بيعمل ال Attack و مش بيستني ال Result ترجعله ال Attack دة ليه ميزة و ليه عيب :
الميزة انه صعب حد يعمله Monitoring او Auditing او يعرف ان فيه حاجة بتحصل اصلأ و انه لو نجح ال Attacker بيقدر انه يعمل Reconstruction لل Database و يـ Upload عليها Payloads زي ما هو عايز و كمان يقدر يـ Retrieve منها الي هو عايزه
العيب انه بياخد وقت طويل جداً و صعب مش سهل زي الباقي ..
رابع نوع الي هو ال Boolean-Based Blind SQL Injection
دة بيبعت ال Query لل Database اكتر من مرة مرة تبقي ب FALSE و مرة ب TRUE و يشوف و يقارن ال Result بتاعت كل Query منهم..و علي حسب كل Result ال Content بتاع ال HTTP Header هيتغير او هيفضل ثابت زي ما هو و دة بيخلي ال Attacker يعرف اذا كان ال Payload نجح انه يتعمله Injection في ال Database ولا لا...
خامس نوع الي هو ال Time-Based Blind SQL Injection
النوع دة من احلي الأنواع لأنه بيعتمد انه بيبعت Query لل Database و بيخليها تستني مدة محددة قبل ما تبعت ال Response بتاعتها و ال Result بتحدد سواء كانت ب TRUE او FALSE اذا كانت ال Database استنت المدة المحددة ولا لا و ساعتها ال Attacker يقدر يعرف اذا كان ال Payload اتعمله Injection ولا لا ...

طب مثال علي ال SQL Injection :
دلوقتي لو انا عندي في ال Code مثلاً Textbox اسمه UserID المفروض احط فيه ال ID بتاع ال User ف المفروض بقي ال ID دة هيبقي اي Characters نفترض مثلاً انها Numbers ف هيبقي ال Function بتاع ال Textbox دة هتبقي :
Code:
UserID = getRequestString("UserID");
ف أنا بعمل Analysis لل Site عشان ادور علي الجزء الي هعمل فيه Injection لل Malicious Code بتاعي ف لقيت ال Code دة مثلاً ف هعمل ايه بقي...هروح لل Textbox و اجرب عليه كذا Input لحد ما تنجح معايا دة لو ال Site ساعتها Vulnerable ف هروح اجرب مثلاً :
Code:
950123; DROP TABLE ITAdmins
دلوقتي ايه الي حصل ؟!
انا روحت ع ال Textbox الي المفروض اكتب فيه ال UserID ف كتبته الي هو 9501235 و بعد كدة كتبت Semi colon دي معناها ان خلاص كدة دخل الرقم دة و جهز نفسك عشان فيه حاجة هكتبها بعديه تروح كمان تنفذها
بعد كدة كتبت SQL Query بيعمل ايه ؟! بينزل ال Information الي في الجدول الي اسمه ITAdmins يعني هيجيبلي ال Emails و ال Usernames و ال Passwords بتاعت ال IT Administrators
طب مثال تاني علي ال SQL Injection في ال URL :
دلوقتي انا عندي URL بالمنظر دة :
Code:
http://www.ay7aga.com/index.php?id=12345
دلوقتي انا اول ما أشوف علامة = دي في ال URL اعرف ان ال ِApplication بيروح ينادي علي الي بعديها في ال Server او في ال Database .... معني كدة ان الي بعد = دة حاجة متخزنة يا اما Path متخزن في ال Server او Item متخزنة في ال Database معني كدة اني ممكن اشيل ال = دي و احط مكانها Query او Statement يروح ينفذ حاجة في ال Database ف هقول مثلاً :
Code:
http://www.ay7aga.com/index.php?id=1234;SELECT * FROM admins; DROP admins--
كدة قولتله مثلاً روح نفذ الصفحة دي لحد كدة
Code:
http://www.ay7aga.com/index.php?id=1234
و بعد كدة روح Select و لما اقوله * يعني كل حاجة...روح Select كل حاجة من ال Table الي اسمه admins و بعد كدة اعلي drop لكل حاجة من ال Table دة يعني من الاخر وريني كل ال data الي موجودة جوا ال Table دة
اللينك دة بقي فيه Cheat Sheet حلو لل Statements الي احنا بنستخدمها في ال SQL Injection بمختلف انواعها و مختلف انواع ال Database Engines :
ايه هو سبب الموضوع دة كله ...اني حابب بقي اوضح شوية أساطير و خرافات عن ال SQL Injection ف الي وصل لحد الجزء دة في البوست يركز شوية في الكمتين الي جايين دول :
أول #أسطورة : ان ال SQL-Injection دي Vulnerability قديمة موجودة من أيام جدي و جدك و مش لازم اعملها حساب او قيمة دلوقتي لانها اكيد مش هتكون شغالة لحد دلوقتي دة احنا ف 2022 يعني...
تقدر تدخل علي ال Link دة و تشوف اكبر ال Breaches و ال Cyber Attacks الي حصلت علي اكبر الشركات في العالم في 2022 بسبب وجود ال SQL Injection ف ال Products بتاعتهم : http://codecurmudgeon.com/wp/sql-injection-hall-of-shame
تاني #أسطورة : اني لما مخليش فيه Input Methods في ال Web Application كدة انا منعت ال SQL Injection و خليت ال Website بتاعي Secure
تقدر تدخل علي ال Link دة و تشوف ازاي تعمل Bypass لل Hard Filters بتاعت ال SQL Injection و دي ساعات بتكون أقوي من ال Filters العادية :
تالت #أسطورة : ان ال Malicious Data بتيجي دايماً من ال Inputs بتاعت ال Users انما لو انا حطيت ال Data بطريقة Static في ال Database كدة هيبقي Secure
مثلاً لو قولت :
Code:
$sql = "SELECT username FROM Users";
$username = $pdo->query($sql)->fetchColumn();
$sql = "SELECT * FROM Admins WHERE MATCH(Name,ID) AGAINST ('{$username}')";
كدة ال Username دة Malicious او Not Safe Input لأنه هيخليني أقدر انفذ منه ال SQL Injection Scenario بتاعي.
رابع #أسطورة : ان ال Limits و ال Restrictions الكتير الي علي ال Privileges بتاعت ال SQL بتقلل من ال Damage بتاع ال SQL Injection الي ممكن يحصل
بيقولك مثلاً انك حتي لو عملت SQL Injection و خدت Account اسمه auditor مثلاً ف احنا هنعمل ان Auditor دة يكون ليه صلاحيات معينة بس هو و بقيت ال Account ب حيث انهم لو اتعملهم SQL Injection متقدرش توصل منهم لحاجة يعني انت مش هتكون برضو Admin و دة الي بيعمله ال Developers الي معندهمش اي Awareness بال Cyber Attacks لأنهم ميعرفوش اني ممكن اعمل Denial of Service Attacks من خلال ال SQL Injection حتي لو مليش صلاحيات يعني مثلاً هقول :
Code:
SELECT * FROM USERS JOIN USERS JOIN USERS JOIN USERS JOIN USERS JOIN USERS JOIN USERS JOIN USERS
ال Operator الي اسمه JOIN دة بيستخدم عشان يعمل Combine يعني عشان يدمج اكتر من Row مع بعض هكررها مليون مرة مثلاً ف لو ال Database فيها 100 Row هخليهم 100 مليون ف كدة طبعاً امكانيات ال Database Sever مش هتقدر تعمل Handling لل Requests دي كلها ولا ال Storage هتقدر تعمل Handling لكمية ال Data الرهيبة دي ف ال Database Server هيقوم ضارب و يحصل Denial of Service بطريقة بسيطة من غير ما احتاج اي Admin Account
خامس #أسطورة : اما في ال Web Application بتاعي بستخدم Framework بيمنع ال SQL Injection
اعمل Search بسيط هتلاقي ان فيه كتير من ال ORMS الي هي ال Object Relational Mappers Systems بتسمح بال Custom Queries زي ال Rails ActiveRecord و غيرها ...
 

المشاركات المتشابهة

  • x32x01
الردود
0
المشاهدات
8
الردود
0
المشاهدات
9
الردود
0
المشاهدات
19
الردود
0
المشاهدات
10
الردود
0
المشاهدات
10
الوسوم : الوسوم
sql injection أكتشاف ثغرات المواقع ثغرات المواقع ثغرة sql injection
عودة
أعلى