Hb051 27 گزارش دادن ارسال شده در اردیبهشت 99 با سلام ما اینجا یک input text داریم خواستم ببینم امکان دور زدنش هست یا خیر $mesal = $_POST['mesal']; $query = mysql_query("UPDATE user SET Name = '0',PGR = '0',pKey = '$mesal',WeB = '1' WHERE Name = '$name'", $link); خب بزارید توضیح بدیم $mesal همون مقداریه که توی کادر وارد میشه حالا میتونه عدد یا حروف باشه میخوام یه چیزی باشه که مثلا بتونیم این رو دور بزنیم و به جایی که پسورد عوض بشه در حقیقت Name='Example' بشه یه همچین چیزی امکانش هست؟ 1 واکنش ها : R3dC0d3r به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
Goodzilam 781 گزارش دادن ارسال شده در اردیبهشت 99 درود، بله سورس آسیب پذیر هست، لطفا هدفتون رو مفهوم تر بیان کنید تا راهنمایی کنیم 2 1 واکنش ها : RT3N ، NimaDix و R3DN4X314 به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
Hb051 27 گزارش دادن ارسال شده در اردیبهشت 99 ببینید اینجا یک کادری ما داریم که pKey رو تغییر میده ما میخوایم یه چیزی تو این کادر بنویسیم که در واقع Name تغییر کنه مثلا تو کادر بنویسیم 123 پسورد میشه 123 ولی میخوایم که در حقیقت Name بشه 123 به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
R3dC0d3r 565 گزارش دادن ارسال شده در اردیبهشت 99 درود تارگت کاملا آسیب پذیر است ؛ به دلایل زیر : - هیچ ارزیابی اعتباری روی اطلاعات fetch شده از فرم مربوطه وجود ندارد و اطلاعات آن مستقیما در Query پایگاه داده استفاده شده که این بی احتیاطی موجب آسیب پذیری رایج SQL Injection شده است . - جدا از این مسئله از تابع منسوخ شده PHP به نام mysql_query استفاده شده که رعایت نکردن استاندارد های لازم از دلایل منسوخ شدن همین تابع بوده . راه حل : * ارزیابی اعتبار فرم پیش از استفاده از اطلاعات آن * استفاده از از توابع و استاندارد های پیشرفته مثل PDO Binding موفق باشید 5 واکنش ها : RT3N ، Hb051 ، NimaDix و 2 نفر دیگر به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
Hb051 27 گزارش دادن ارسال شده در اردیبهشت 99 در 8 دقیقه قبل، R3dC0d3r گفته است : درود تارگت کاملا آسیب پذیر است ؛ به دلایل زیر : - هیچ ارزیابی اعتباری روی اطلاعات fetch شده از فرم مربوطه وجود ندارد و اطلاعات آن مستقیما در Query پایگاه داده استفاده شده که این بی احتیاطی موجب آسیب پذیری رایج SQL Injection شده است . - جدا از این مسئله از تابع منسوخ شده PHP به نام mysql_query استفاده شده که رعایت نکردن استاندارد های لازم از دلایل منسوخ شدن همین تابع بوده . راه حل : * ارزیابی اعتبار فرم پیش از استفاده از اطلاعات آن * استفاده از از توابع و استاندارد های پیشرفته مثل PDO Binding موفق باشید خب عزیز میتونید سورس آسیب پذیر رو بگید ما هم تمرین کنیم رو لوکال هاست؟ به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
R3dC0d3r 565 گزارش دادن ارسال شده در اردیبهشت 99 سوالی که مطرح هست اینه که متغیر $name جزئی از فرم هست یا خیر ؟ - اگر پاسخ بله هست که کاری که باید انجام بشه کاملا مشخص هست ! - اگر پاسخ خیر هست و با توجه به اینکه به اساس SQL و SQL Injection آشنایی دارید ادامه این مطلب رو دنبال کنید آسیب پذیری واضح : در 90 درصد مواقع جدول کاربران شامل ستونی به اسم access_level ، user_type و یا غیره هست که بیانگر سطح دسترسی کاربر هست که با تحلیل پایگاه داده میتونید نام ستون رو پیدا کنید ؛ کافیه اون مقدار آپدیت بشه تا یوزر شما سطح دسترسی ادمین بگیره . پس بنا بر فرضیه گفته شده متغیر $mesal باید حاوی رشته زیر باشه : ', access_level = 'admin نکته : این تکنیک فقط در توابع غیر استانداردی مثل mysql_query و در صورتی که کاراکتر ها خنثی نشده باشند جواب خواهد داد ؛ در تکنیک های استانداردی مثل بایندینگ تمامی کاراکتر های موجود در پارامتر های یک فیلد ESCAPE و خنثی شده . عمل غیر ممکن در شرایط موجود : با توجه به اینکه متغیر mesal وسط رشته query اپدیت هست (قبل از where) و متغیر name (بعد از where) قرار گرفته ، امکان تاثیر گذاری بر روی اون قسمت وجود ندارد . اما چرا گفته شده غیر ممکن در شرایط موجود ؟ چرا که تابع mysql_query فقط پاسخگوی یک statement بوده و هرگونه تلاش برای ارسال multiple statement به سمت SQL Parser پایگاه داده به وسیله این تابع با خطای php مواجه خواهد شد . در صورت استفاده از توابعی که از multiple statement پشتیبانی میکنند خیلی راحت میشه به شکل زیر به هدف مورد نظر رسید : $mesal = "' where name='example';" . $second_statement; در شرایطی که منظور از Name ، فیلد قبل از where clause باشد به راحتی با overwrite کردن آن ، مقدار تغییر خواهد کرد : $mesal = "', Name='Example"; 2 5 واکنش ها : Goodzilam ، R3DN4X314 ، Rocket و 4 نفر دیگر به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر