توسعه دهنده اندروید
تست نفوذ به سرور اپ های اندرویدی
سلام
این یه آموزش مبتدیانست برا حداقل امنیت توی برنامه هامون.
قصد داریم تست نفوذ ساده ای روی یه اپ اندرویدی برای بدست آوردن اطلاعات کاربراش از طریق باگی در کد نویسی سمت سرور انجام بدیم.
توی این آموزش ما با تزریق تگای مخرب میایم و این کار رو انجام میدیم (sql injection)
(تمام مطالبی که اینجا گفته میشه و شاید هم کاملتر در ویدئوی که توی یوتیوب و آپارات قرار دادم هستش شما میتونید در انتهای این آموزش لینک ویدئوها رو ببینید)
خب کارایی که باید انجام بدیم :
- شنود شبکه ، بدست آوردن لینک و کلیدهای ارسال
- نوشتن یک اپ ساده جهت دریافت اطلاعات کاربری از لینک لاگین سایت یا اپیلیکیشن
- تزریق تگ های مخرب در درخواست لاگین
- ذخیره اطلاعات بدست آمده
قدم اول : شنود شبکه
برای اینکار ابزارای مختلفی توی سیستم عاملای مختلف وجود داره ما قصدمون معرفی ابزارهاست و نه نحوه کار باهاشون (البته توی کلیپی که تو آخر آموزش هست نحوه کار یدونشون وجود داره)
توی ویندوز دوستان میتونید از ابزارهایی مثل wiresharke و networkminer استفاده کنید
اگه بخواین با موبایلای اندرویدی این کار رو انجام بدین میتونید از packetcapture , portdroid استفاده کنید ابزارای خوبین
توی این مرحله ما یکی از ابزارهای شنود شبکه رو ران میکنیم و به بعد از طریق اپلیکیشن به سرور لاگین میکنیم همونجور که میبینید اطلاعاتی و روش ارسال و اطلاعات دریافتی رو به راحتی بدست آوردیم.
بعد از دریافت اطلاعات و روش ارسال و دریافتشون میمونه بحث تحلیل اطلاعات که این برای هر اپلیکیشنی که این باگ رو داشته باشه متفاوته ، همونجور که میبینید دوستمون توی برنامش برا ارسال اطلاعات با روش پست دوتا کلید phone و ramz فرستاده به سرور و از سرور parent_id که اسم یکی از ستونای دیتابسشه رو برگردونده (همچی رو همین میچرخه)
http://hostname/Get_User.php?ramz=123456789&phone=09355502840
قدم دوم : نوشتن یه اپ ساده برا شبیه سازی لاگین
خب من اومدم با نوشتن یه اپلیکیشن ساده به زبون جاوا فرم لاگین رو شبیه سازی کردم ; شما میتونید از زبونای دیگه یا ابزارای دیگه مثل postman استفاده کنید برا شخصی سازی من ابزار رو خودم نوشتم * توضیح خاصی نیاز بود کامنت بزارین توضیح میدم :) *
قدم سوم : تزریق تگ مخرب زمان ارسال اطلاعات به سرور
خب قسمت شیرین کار رسیدیم قراره یه تیکه کد SQL رو همراه با درخواستمون بفرستیم به سمت سرور . توی قدم اول دیدیم که چجوری لینک و کلیدا ارسال میشد پس قراره ما هم به همون صورت بفرستیم
urlParametrs= " ramz=123456789 or parent_id="+مقدار پیمایش توی ستون+" & phone=09355502840 or parent_id="+مقدار پیمایش توی ستون+" ;
خب چجوری این کد عمل میکنه زمانی که دستور رفت به سرور و توی کوئری اجراشد تو حالت معمولی phone و ramz بهش پاس داده میشن به این صورت (متغیرا فرضیه تو این تیکه)
$phone=$_POST['phone'];
$ramz=$_POST['ramz'];
select * from users where phone=$phone and password=$ramz
// این کدیه که تو سرور اجرا میشه ولی با کاری که ما کردیم در واقعیت داریم شرط and رو با کمک or میشکونیم
select * from users where phone=09355502840or parent_id=1 and password=123456789 or parent_id=1
قدم چهارم : ذخیره اطلاعات
خب در آخر هم نوبت میرسه به ذخیره اطلاعاتی که از سرور بدست میاریم . بستگی به نیازمون نحوه ذخیره سازی و استفاده از اطلاعات به عهده خودمونه
موارد مهم و ساده در بالا بردن امنیت سایت ها و اپلیکیشن های از بیس طراحی شده :
تا اینجا ما اومدیم و اطلاعات کاربرای یه اپ رو کشیدیم بیرون ولی خب چه کنیم که برنامه هامون دچار همچین باگ های ساده ای نشن
اول بگم همچین باگهایی بیشتر توی بچه هایی که تازه شروع کردن دیده میشه که اونم از سر تجربه کمه و دوستانی که از بعضی فریمورکا برا سرور نویسی( لاراول و کیک و ....) استفاده میکنن رعایت مواردی که گفتیم توشون اجباریه و خیالمون از حداقل امنیت راحت میشه
خب ما مد نظر میگیریم که از صفر خودمون قراره کد بزنیم مثل اپلیکیشن دوستمون :) (هی میگم دوستمون که اگه موردی پیش اومد بهم رحم کنه :)
خب موارد اینان :
- فیلترگذاری تگ های html و sql و prepare در کلاینت و سرور
$phone=mysqli_real_escape_string($con,$get);
$phone=htmlspecialchars($phone);
//////////////////////////////////
$query=$con->prepare("select ...... from user where phone like ?");
$query->bind_param("s",$phone);
$query->execute();
$result=$query->get_result();
- ساخت کلید دو طرفه جهت اهراز هویت جهت ساخت توکن ارتباطی
$token="G5@85#fd$FS2S*!RGV%^DFC2HKL#$T%RDFVQZ&^34VDF@#"; ///نمونه توکن
- استفاده از الگریتم های هش سازی اطلاعات و استفاده از ساختار متنی جهت ارسال اطلاعات مثل json , xml و..... که بهتره یه سرچی در موردش بزنید
- استفاده از پروتکول های امن شبکه مثل tls و ssl (همون https خودمون) البته از اندروید 9 به بعد استفاده از ssl اجباری شده و تازه هر ssl هم امن نیست و قابل شنود بهتره در مورد پروتکل های امنیت بین راهی هم یکم مطالعه بکنید
در آخر هم باید بگم این موارد تضمینی بر امنیت صد در صدی برنامه شما نیست و یک سری نکات عمومی محسوب میشه ;)
امیدوارم تونسته باشم مطالب رو خلاصه و مفید شرح داده باشم اگه موردی بود برام کامنت کنید یا تو تلگرام با من در ارتباط باشید .
راستی آموزش ویدیوئی همین مطلب رو هم توی یوتیوب و آپارات قرار دادم ممنون میشم تماشا و لایک کنید .
پیروز باشید....
سعود پرکوک
0098iran
مطلبی دیگر از این انتشارات
میانگین درآمد برنامه نویس ها
مطلبی دیگر از این انتشارات
آشنایی با حملات XSS
مطلبی دیگر از این انتشارات
تولید اعداد رندوم با پایتون و numpy