هک و امنیت

تشخیص باگ SQL

SQL زبان پرس و جوی ساخت یافته ای است که برای بازیابی و
دستکاری پایگاه داده بکار می‌رود. برای تشخیص باگ SQL ابتدا
به معرفی و سپس با بررسی آن به انجام یک مثال عملی می‌پردازیم.

باگ SQL injection چیست؟

تزریق کد اس کیو ال (SQL) می‌تواند یک جمله برای دریافت اطلاعات و یا
افزودن یک شرط همیشه درست برای اختلال در همه یا بخشی از پایگاه داده است.
این کار با سوء استفاده از نقص طراحی در برنامه های وب انجام می‌شود
تا از عبارات SQL برای اجرای کد SQL مخرب استفاده کند.

عملکرد باگ اس کیو ال

تزریق کد از طریق باگ SQL به نوع پایگاه داده بستگی دارد و به عبارت دیگر
باید گفت که فقط روی عبارات اس کیو ال dynamic (پویا) کار می‌کند. در واقع
یک عبارت dynamic یا پویا جمله ای است که در زمان اجرا با استفاده از پارامترهای
رمز عبور از فرم وب یا رشته پرس و جو URI تولید می شود. با یک مثال موضوع را واضح تر بیان می‌کنیم.
کد HTML زیر یک فرم لاگین است که در ادامه به شرح آن پرداختیم:

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>
  • فرم فوق آدرس ایمیل را می پذیرد و پسورد آن را به فایل PHP با نام index.php ارسال می کند.
  • گزینه remember me یا “مرا به خاطر بسپار” برای ذخیره اطلاعات ورود به سیستم در کوکی است. که به صورت یک checkbox می‌باشد. از روش ارسال برای ارسال داده استفاده می کند.

مثال عملی باگ SQL

برای دقیق‌تر شدن در تشخیص باگ SQL فرض کنیم که کدی که برای کنترل کردن ID کاربر
بکار می‌رود به این صورت باشد :

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

در بالا پسورد با الگوریتم md5 رمزگذاری شده است.

موارد بیان شده را با یک مثال عملی شرح می‌دهیم:
ابتدا وارد این لینک شوید، سپس کد های زیر را مطابق تصویری بعد آن، وارد کنید.

کد زیر را در سمت چپ بنویسید( کد ایجاد جدول در SQL) :

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('[email protected]
	',md5('abc'));

حال کد مقابل را برای بازیابی اطلاعات نوشته و سپس طبق تصویری که در ادامه آمده در سمت راست (Query SQL) می‌نویسیم:

select * from users;

مثال ایجاد و بازیابی اطلاعات در SQL

 

سپس بر روی گزینه Run کلیک می‌کنیم که نتیجه آن در ادامه آمده است:

نتیجه اجرا کد SQL

 

اطلاعات همچون نام کاربری [email protected] و رمز ۱۲۳۴ به عنوان رمز ادمین فرض کنید.
که کد بازیابی آن با دانستن موارد بالا چنین است:

;(SELECT * FROM users WHERE email = ‘[email protected]’ AND password = md5(‘1234’

حالا اگر هکر بخواهد آن را بدون اطلاعات چندانی بازیابی کند باید همان طور که اشاره شد یک کد همیشه درست تزریق کند که به این صورت است:

SELECT * FROM users WHERE email = '[email protected]' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

شرط همیشه درست OR 1 = 1 LIMIT 1 که در کد بالا آمده فوت کوزه گری هکر برای بدست آوردن نام کاربریست، رمز هم که ایقدر ساده است با چند بار تزریق کد بدست می‌آید. کد فوق را در قسمت راست (Query SQL) سایت معرفی شده وارد کنید و بر روی Run کلیک کنید که نتیجه این است:

نتیجه sql injection

Click to rate this post!
[Total: ۱ Average: ۵]
نمایش بیشتر

سیدپوریا قاضی میرسعید

من سیدپوریا قاضی‌میرسعید فارغ‌التحصیل رشته مهندسی کامپیوتر-فناوری اطلاعات از دانشگاه صنعتی شاهرود هستم. زمینه مورد علاقه من برنامه نویسی اپلیکیشن موبایل با فریم‌ورک فلاتر و تولید محتوا و سئو می‌باشد و دوست دارم در جهت ارتقای سطح دانش it هم‌نوعانم تلاش کنم، هر چند اثر کوچکی داشته باشم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا