رفتن به مطلب
بازگشایی انجمن! ×
GuardIran

Phoen1X

پست های پیشنهاد شده

به نام خدا

در این تاپیک قصد دارم تا آموزش آسیب پذیری های PHP و نحوه پچ کردن اون هارو آموزش بدم پیش نیاز این تاپیک اسکریپتی هست که من برای تیم نوشتم(اینجا) و آشنایی ابتدایی با زبان php در این تاپیک سعی میکنم که آسیب پذیری هارو به صورت کامل یعنی اول برسی میکنیم که چطور این آسیب پذیری به وجود میاد بعد این که یک نفوذگر چطور با استفاده از این آسیب پذیری به وب سایت شما نفوذ می کنه و بعد هم نحوه پچ کردن اون آسیب پذیری.

سر فصل آموزش ها :

- SQL Injection

- Blind SQL Injection

- Authentication Bypass

- File Upload

-  Stored Cross Site Scripting

-  Reflected Cross Site Scripting

- Dom Cross Site Scripting

- Cross Site Request Forgery

- Remote File Inclusion

- Local File Disclosure/Download

- Remote Code Execution

- Remote Command Execution

تاپیک به مرور زمان آپدیت خواهد شد پس لطفا با اسپم های بی جا خرابش نکنین سوالی داشتید میتونید در پ.خ و یا در بخش مربوطه بپرسید

 

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


خب تاپیک رو شروع کنیم ببینیم تا کجا میریم :) 

بعد از دانلود GuardIran Vulnerable WebApp به پوشه ایی که ریختیدش برید و بعد پوشه includes رو باز کنید و فایل sql.php رو در ادیتور دلخواهتون باز کنید در مرورگر هم بعد از روشن کردن apache  و mysql به آدرس localhost/name of your file برید .

خب حالا شروع میکنیم :

ببینید آسیب پذیری sql injection درحال حاضر فراگیر ترین آسیب پذیری موجود هستش و این آسیب پذیری فقط مخصوص php نیست و در زبان های دیگه مثل java هم رخ میده و نفوذ کردن هم متود های خیلی زیادی داره مثل Union Based , Time Delay Based , Boolean Based , Error Based و ... که من در این تاپیک نمی تونم به همش بپردازم چون که میشه صرفا آموزش نفوذ و برادران فیلترینگ تاپیک رو فیلتر می کنن :( ولی بعد از این تاپیک احتمالا آموزش کامل sql injection رو در بخش VIP بذارم اما چیزی که امروز یاد میگیریم روش union based هستش . اگر که در فایل sql.php به خط 40 برید با کد زیر مواجه میشید 

This is the hidden content, please

 

همینطوری که می بینید در اینجا ما id رو توسط متود get از یوزر دریافت و با استفاده از query زیر id مربوط به یوزری که در دیتابیس هست رو پیدا و ایمیل مربوطه رو نمایش میدیم 

This is the hidden content, please

خب ما هیچ فیلتری انجام ندادیم و به یوزر خودمون به صورت کامل اطمینان کردیم اما اگر یوزر ما یک نفوذ گر باشه میاد و صفحرو با گذاشتن یک ' و " تست می کنه و query ما به شکل زیر در میاد

This is the hidden content, please

خب میبینید که یک ' باز و بسته شده ولی دیگری بسته نشده برای همین mysql به ما ارور رو نشون میده و بدین صورت نفوذگر میفهمه که صفحه اسیب پذیر هستش و حالا باید با استفاده از یک روش ارور رو برطرف کنه بطوری که بتونه query خودش هم که میخواد اجرا شه رو در اون قرار بده برای همین منظور میاد از دستور union استفاده می کنه که این دستور میاد و به mysql میگه 

This is the hidden content, please

این کد رو اجرا کن و در کنارش کد من هم اجرا کن ولی قبلش باید ارور رو برطرف کنه برای همین ما میایم با استفاده از --+ و /+ بقیه کد رو کامنت میکنیم تا ارور نگیریم اما حالا ما نیاز داریم که بفهمیم که من در دستورم از چند کالومن استفاده کردم شما توی دستور بالا می بینید که 3 تا هستش ولی ما باید خودمون تست کنیم و این رو پیدا کنیم برای همین میایم از دستور order by استفاده می کنیم این دستور میگه که mysql نتایج رو بر اساس کالومن شماره فلان مرتب کن اما نتایج در صفحه برای شما ظاهر نمی شه ولی در واقع داره پشت صفحه در محیط mysql اجرا میشه و وقتی از تعداد کالومن های مورد استفاده برنامه نویس بیشتر شد ارور میده و میگه که من بیشتر از این کالومن ندارم که بخوام به شما نشون بدم به اینصورت ما میفهمیم که صفحه چند کالومن داره که اجرای order by به شکل زیر هستش

This is the hidden content, please

خب صفحه میگه من چهار تا کالومن ندارم که به شما نشون بدم برای همین میفهمیم که از 3 کالومن استفاده شده حالا باید با استفاده از دستور union select بفهمیم که برنامه نویس داره از کدوم کالومن استفاده می کنه که دستورات به شکل زیر هستش ولی خب الزامی نیست که ما 1و2و3و... وارد کنیم میتونیم هرچیزی دلمون خواست وارد کنیم مثلا a,b,c

This is the hidden content, please

متاسفانه در بین دوستانی که آموزش میدن یک باور غلطی وجود داره و اون اینه که میگن union select کالومن یا ستون آسیب پذیر رو نشون میده ولی نه در واقع اینطور نیست بلکه این دستور میاد زیر هرکدوم از ستون ها اون چیزی که مانوشتیم رو مینویسه و فقط اونی به ما نشون داده میشه که برنامه نویس در اسکریپت ازش استفاده کرده اگر به سورس صفحه دقت کنید من فقط گفتم که email رو نشون بده و در query ایمیل من به عنوان ستون شماره سوم انتخاب شده 

This is the hidden content, please
و قاعدتا شماره 3 برای من نمایش داده میشه خب حالا من میتونیم در شماره 3 اون چیزی رو که میخوام بهم نشون بده رو بنویسم یعنی بگم جداول رو به من نشون بده اما من که اسم دیتابیس رو نمی دونم برای همین میام از تابع database() استفاده می کنم و می نویسم 

This is the hidden content, please

که برای شما باید givuln رو نمایش بده حالا اسم دیتابیس رو فهمیدم ولی اسم جدول رو نمیدونم اما این رو میدونم که در mysql ورژن 5 به بالا در دیتابیس information_schema جدولی وجود داره به اسم tables که تمامی جدول ها در اون ذخیره میشن برای همین میام با استفاده از دستور union به دیتابیس میگم که تمامی اطلاعات ستون table_name (ستونی هستش که در اون نام تیبل ها نوشته شده)از اون اون جدول رو به من نشون بده جایی که table_schema(ستونی که در اون نام دیتابیس هستش) برابر باشه با دیتابیس خودمون که به این شکل هستش 

This is the hidden content, please

که در اینجا بعد از نقطه نام جدول و در شماره 3 مینویسم table_name تا اطلاعات اون به من نمایش داده بشن. الان به دو روش میتونید کار کنید یا همینطوری بگردید دنبال اسم جدول یا با استفاده از دستور limit دونه دونه چک کنید که به شکل زیر هستش 

This is the hidden content, please

که این دستور به این صورت عمل می کنه که اول شماره خروجی رو تایین می کنیم و بعد تعداد اطلاعاتی که میخوایم بعد از هر بار زدن برای ما نمایش داده بشه

ادامه در پست بعد ...

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


خب قسمت دوم رو شروع کنیم :)

چیز زیادی نمونده فقط خارج کردن اطلاعات از تیبل هستش و بعد میریم سراغ mysql ورژن 4 به پایین و blind sql injection و آموزش پچ کردن :) 

برای دیدن ستون ها میتونیم از جدول columns استفاده کنیم که به این صورت هستش دقت کنید بعد از نقطه information_schema اسم تیبل نوشته میشه

This is the hidden content, please

و بدین صورت فیلتر می کنیم تا اطلاعات فقط از تیبلی که میخوایم نمایش داده بشه

This is the hidden content, please

بین '' اسم ستون رو مینویسیم تا mysql با جدول اشتباه نگیره و حالا ما تمام اطلاعات رو داریم و فقط کافیه به این صورت اطلاعات رو از جدول بیرون بکشیم

This is the hidden content, please

حالا میتونیم هر کد html ایی که دلمون بخواد رو تزیق کنیم تا زیبا تر نمایش داده به بشن خب من میخوام بین user و password ---> بزارم و در پایان هم بگم هر لاین رو بشکن برای همین از کد های html زیر استفاده میکنم ولی برای این که mysql بفهمه که اینی که دارم مینویسم در واقع نام یک ستون نیست باید کد هارو به hex تبدیل کنم و بین هرجا که میخوام بزارم و البته باید با , هر ورودی رو جدا کنیم که به صورت زیر هستش 

This is the hidden content, please

که میتونیم با استفاده از توابع hex و unhex هم کار خودمون رو راحت تر کنیم که به این صورت هستش 

This is the hidden content, please

* از group_concat برای متصل کردن چندین رشته به هم استفاده میشه

در mysql ورژن 5 به پایین تمامی مراحلی که با دیتابیس information_schema کار می کنیم حذف میشن و باید خودمون حدس بزنیم که به این صورت هستش

This is the hidden content, please

به جای login باید اسم تیبلی که حدس زدیم رو بنویسم

و به این صورت هم باید اسم ستون رو حدس

This is the hidden content, please

که به جای user باید اسم ستونی که حدس زدیم رو بنویسیم

تمام شد فقط یک سری نکات اضافی وجود داره که میگم :

به جای --+ میتونیم از /* استفاده کنیم

و به جای کد های hex میتونیم از کاراکتر های ascii استفاده کنیم مثلا به این صورت

This is the hidden content, please

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر


به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • ایجاد مورد جدید...