امنیت, برنامه‌نویسی

یافتن نام کاربری اعضای سایت دیگو

من حافظه ضعیفی دارم و معمولا به جای اینکه روی اون حساب کنم از lastpass استفاده می کنم. چند روز پیش به دلایلی به لستپس دسترسی نداشتم و مجبور شدم از گزینه forgot password سایت diigo استفاده کنم. بعد از وارد کردن ایمیل و سابمیت، سایت اعلام کرد که فلانی، لینک تغییر پسورد رو به ایمیلت فرستادم. اینجوری بود که فکری به سرم زد برای یافتن نام کاربری اعضای سایت دیگو.

اپلیکیشن ها و افزونه هایی مثل Awesome Screenshot، Quick Note، Read Later Fast، Diigolet و کلی سرویس دیگه از محصولات diigo است.

در تصویر زیر پاسخ سایت رو در شرایط متفاوت خواهید دید.

پیدا کردن نام کاربری و ارسال ایمیل

پیدا کردن نام کاربری و ارسال ایمیل

آدرس ایمیلی که در سایت وجود ندارد

آدرس ایمیلی که در سایت وجود ندارد

اگر source صفحه اعلام فراموشی رو نگاه کنیم با فرم زیر رو به رو می شیم.

می بینید که آدرس ایمیل در متغییری به اسم  username به آدرس زیر ارسال می شه.

من برای شبیه سازی این کار و در نهایت انجامش به صورت تکراری، از پایتون کمک گرفتم. برای ارسال اطلاعات متغیر های POST از دستور زیر کمک گرفتم.

در پایان نیز باید پاسخ سایت رو چک می کردم و نام کاربری رو پیدا می کردم از دل اطلاعات دریافت شده. در صورتیکه به source صفحه پاسخ نگاه کنیم، با قالب زیر رو به رو خوهیم شد.

با توجه به اینکه تگ strong تنها دوبار استفاده شده از اون برای جدا کردن بخشی از اطلاعات که بین تگ ها قراردارند استفاده کردم.

حالا یک function دارم که کار رو برای یک ایمیل انجام می ده. تقریبا دارم به آخر کد می رسم. حالا برای راحتی خودم، ایمیل هایی که می خوام چک کنم رو می ریزم توی یک فایل متنی. تنها شرطش اینه که هر خط شامل یک ایمیل باشه و اطلاعات و متن دیگه ای توش نباشه. (البته می تونم کمی روی کد کار کنم و از دل فایل خونده شده با هر شیوه نگارشی، ایمیل ها رو پیدا کنم.) ایمل ها رو یکی یکی از فایل می خونم و می دم به تابع و اطلاعات دریافتی رو در خروجی چاپ کرده و نیز به یک فایل اضافه می کنم.

برای تستش هم یه لیست ایمیل لازم دارم. کافیه دستم رو دراز کنم و از لیست ۱۵۰ میلیون ایمیل لو رفته ادوب استفاده کنم. ایمیل ها رو در لیستی به اسم maillist.txt کنار اسکریپت پایتون می ذارم.  در نهایت غیر از خروجی که در ترمینال نشون داده می شه، فایل out.txt نیز کنار اسکریپت ایجاد می شه و ایمیل  نام کاربری های یافته شده در اون ذخیره می شه.

آدرس پروژه در سایت github:

این مورد یک ضعف امنیتی در سایت دیگو محسوب نمی شه اما یک ضعف در حفظ اطلاعات کاربریه و می تونه منجر به انتشار اطلاعاتی بشه که در نهایت به ضرر کاربر تموم بشه. در نظر بگیرید شما با آدرس ایمیلتون در این سایت با نام کاربری ثبت نام کردید که نمی خواید کسی بدونه و دوست ندارید هرکسی این نام کاربری رو به شما ربط بده.

این مورد به اطلاع سایت diigo خواهد رسید.

به روز رسانی:
در تاریخ ۲۱ ژانویه ۲۰۱۴ به پشتیبانی سایت دیگو ایمیل زدم و موضوع رو اطلاع دادم
در تاریخ ۲۶ ژانویه پشتیبانی سایت دیگو جواب داد و گفت مشکل رو حل می کنن

Standard
امنیت, برنامه‌نویسی

اسکریپت ارسال ایمیل تقلبی

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

نسخه اولیه اش رو می تونید در لینک زیر ببینید:

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

تغییر دادن اسم فرستنده، تغییر دادن ایمیل فرستنده و جلوگیری از درج آدرس سرور در مشخصات فرستنده، گنجوندن مسیر ریپلای انتخابی و کلی مورد کوچیک دیگه.

Fake Email

در کنار تغییرات تکنیکال، سعی کردم چهره مناسبی هم به فرم بدم. استایل استفاده شده هم یه نمونه رایگان در اینترنت بود که با کمی تغییرات برای این فرم مناسب شد.

از آدرس زیر می تونید به مخزن گیتهاب این پروژه دسترسی داشته باشید.

اسکریپت رو با مجوز Creative Commons نسخه ۳ منتشر می کنم پس کپی کردن، تغییر و حتی  فروشش آزاده به شرطی که محدودیت های مجوز رو رعایت کنید.

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

به روز رسانی: پس از کامنت مرتضی که در یک سرور، ایمیل ارسال نمی شد و پس از چک کردن موضوع متوجه شدم مشکلی در فانکشن mail در PHP وجود نداره. مشکل از ارسال متن ایمیل در Header بود. متن ایمیل رو به روش base64 رمز می کردم و به ایمیل اتچ می کردم که گویا این سرور نمی پذیرفت این مورد رو. بنابراین اسکریپت رو تغییر دادم که متن به صورت ساده ارسال بشه. می تونید از مخزن گیتهاب، نسخه جدید رو دریافت کنید.

Standard
امنیت, برنامه‌نویسی

مشکل آپدیت sqlmap در لینوکس کالی

من برای تست نفوذ معمولا از لینوکس کالی استفاده می کنم و یکی از ابزارهای پرکاربردم هم  sqlmap است. یک مشکل در کالی وجود داره و اون هم اینکه مخازن کالی نسبت به بعضی نرم افزارها قدیمی تره. بد ندیدم یه راه حل برای مشکل آپدیت sqlmap در لینوکس کالیاینجا بذارم برای استفاده خودم و دیگران.

توسعه دهنده های کالی ۳ راه رو برای مشکل آپدیت نرم افزارهایی که زود به زود به روز می شن پیشنهاد دادن. راه حلاشون حذف فولدر نرم افزار و ایجاد دوباره اون از طریق دستور git، نصب دوباره نرم افزار در یک فولدر موقت با دستور git و یا استفاده از مخازن bleeding edge.

git

اضافه کردن مخازن bleeding edge رو انجام دادم و در مورد خیلی از ابزارها جواب می ده اما در مورد sqlmap همچنان این مخزن قدیمی تره. برای اضافه کردن مخزن می تونید از دستور زیر استفاده کنید:

اما حل مشکل sqlmap. به جای اینکه نرمافزار رو حذف کنیم و یا به صورت موقت جای دیگه نصبش کنیم، فولدر کنونی رو متصل می کنیم به github و اون رو به روز می کنیم. عملا یه چیزی شبیه دو راه دیگه است.

ابتدا به فولدر sqlmap می ریم:

بعد اون فولدر رو به عنوان مخزن معرفی می کنیم:

و متصلش می کنیم به مخزن sqlmap در github

و در نهایت sqlmap رو بدون مشکل آپدیت می کنیم:

نکته: این کار توسط توسعه دهنده های کالی توصیه نمی شه اما به روز بودن ابزار برای من بیشتر ارزش داره. شما خودتون تصمیم بگیرید. 🙂

 

 

 

Standard