تشخیص باگ 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 ('m@m.com
',md5('abc'));
حال کد مقابل را برای بازیابی اطلاعات نوشته و سپس طبق تصویری که در ادامه آمده در سمت راست (Query SQL) مینویسیم:
select * from users;
سپس بر روی گزینه Run کلیک میکنیم که نتیجه آن در ادامه آمده است:
اطلاعات همچون نام کاربری admin@admin.sys و رمز ۱۲۳۴ به عنوان رمز ادمین فرض کنید.
که کد بازیابی آن با دانستن موارد بالا چنین است:
;(SELECT * FROM users WHERE email = ‘admin@admin.sys’ AND password = md5(‘1234’
حالا اگر هکر بخواهد آن را بدون اطلاعات چندانی بازیابی کند باید همان طور که اشاره شد یک کد همیشه درست تزریق کند که به این صورت است:
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
شرط همیشه درست OR 1 = 1 LIMIT 1 که در کد بالا آمده فوت کوزه گری هکر برای بدست آوردن نام کاربریست، رمز هم که ایقدر ساده است با چند بار تزریق کد بدست میآید. کد فوق را در قسمت راست (Query SQL) سایت معرفی شده وارد کنید و بر روی Run کلیک کنید که نتیجه این است:
1 دیدگاه