الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحليل الأكواد البرمجية بحثا عن الثغرات

بدأه Laz0rd في 21 ديسمبر 2012 · 47 رد · 9,714 مشاهدة · في قسم أمن المعلومات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

في هذا الموضوع يستطيع اي عضو طرح اي كود او برنامج مصاب بضعف برمجي ...

مهمة بقية الاعضاء محاولة ايجاد هذا الخطأ واستغلاله ..

وممكن ان يكون الكود مكتوب بأكثر من لغة ..يعني لايوجد لغات محددة ...

سوف ابدأ انا بطرح هذا اللغز ...

معلومات عن اللغز :

1- لغة البرمجة : Perl

2- وظيفة الكود : خوارزمية تسجيل دخول , حيث يتم توليد كلمة السر اعتمادا على اسم المستخدم ...

3- الهدف : تخطي الخوارزمية ودخول بدون معرفة كلمة السر ...

اخيرا الكود البرمجي :

#!/usr/bin/perl
#####################################
print "[~] Please Enter User Name -=> ";
$user = <STDIN>;chomp ($user);
print "[~] Please Enter  PassWord -=> ";
$pass = <STDIN>;chomp ($pass);
#####################################
for ($i=0;$i ne length($user);$i++)
{
    $char = substr($user,$i,1);
    $password = $password + hex(ord($char));
}
#####################################
if ($pass ne $password)
{
    print "[-] Error ......\n";
    exit();
}
print "[+] Good Job .....You Are In\n";
#####################################

معظم الكود واضح ومشابه للغات برمجية اخرى ماعدا :

$user = <STDIN>;chomp ($user);
$pass = <STDIN>;chomp ($pass);

وهي تستخدم لكي تقوم بأسناد قيمة للمتغير وفق مايدخله المستخدم من سطر لاوامر

ويوجد ايضا "ne" وهي تعني "لا يساوي"

وباقي الكود واضح

بما انه اول تحدي لن نحدد وقت محدد له ...

3

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#2

صراحة انا لم ادرس البريل نهائى بس فى فى حلقة for متغير (على ما اظن) = 0 و فهمت من الكود انو بيحول كل حرف فى الاسم الى هيكس و يضيفها الى متغير pass فاعتقد ان الحل هو اننا نترك الاسم و الpassword فاضيين حتى هل كلامى صح؟؟!!

و ممكن تخلى التحدى بلغة vb.net لان هذه هى اللغة التى اجيدها مثل المعظم كما انها سهلة :D

3 −1

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

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#3

السلام عليكم،

بالنسبة للغز الذي قمت بطرحه، تقريبا لا يوجد حل آخر عدا حل الأخ OM@R للدخول من غير باسورد

=====

الإختبار الثاني:

1- لغة البرمجة : Assembly

2- وظيفة البرنامج : يقوم البرنامج باستقبال اسم مستخدم (الذي يجب ان يكون طوله اكبر من 5 حروف) و كلمة المرور، بعدها اظهار رسالة نجاح/فشل الدخول

3- الهدف : الحصول على رسالة نجاح الدخول من خلال ادخال معلومات خاطئة. لا يسمح التلاعب بكود البرنامج لنصل للغرض

هذا البرنامج قمت بكتابته منذ فترة تحضيرا لدرس عن فيض الكومة (Heap Overflow)، قررت بعدها بأن لا اكتب الدرس لأنه لن تكون هناك أي فائدة منه. فكل ما تحصل عليه من كتابة الدروس هو عبارات الشكر و جاري المتابعة... او الآخر يقولك جاري المشاهدة (و كأني أعرض عليه فيلم ليشاهده). لذلك اصبجت كتابة الدروس مضيعة للوقت مادام لايوجد افادة.

تحياتي

ExploitMe#2.zip

تم تعديل هذه المشاركة بواسطة Z3r0n3 في 21 ديسمبر 2012 في 19:55

2
#4

طب هو فين السورس كود ؟؟!! لان هذا EXE ؟؟!! :)

و اتمنى انك تكمل دروسك و ان شاء الله انا هتابع معاك و هيبقى نقاس مش جارى متابعة الفيلم :D

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

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#5

بارك الله فيك أخيLaz0rd.. موضوع جميل فعلاً ...ثابر ..

بالنسبة للسؤال فكرت في أحد الحلول ...وهو كما يلي:

الطريقة الوحيدة للدخول هي ان يكون pass==password

وواضح من الكود أن password يتم انشاؤها داخل حلقة for

وإن لم يتم الدخول الى الحلقة فإن المتحول ستبقى قيمته صفر ...

وحتى لا ندخل الى الحلقة يجب أن نجعل شرط الحلقة غير محقق أي أن يكون طول سلسلة اسم المستخدم صفرا

إذا الطريقة الاولى هي ألا ندخل اسم مستخدم وبالتالي ستكون كلمة السر هي لا شيء وندخل

أما الطريقة الثانية فهي بما أننا أصبحنا الآن نعرف كيفية توليد كلمة السر يمكننا عمل keygenerator يولد لنا تلقائيا كلمة السر المناسبة

__________________________________

أستاذنا Z3r0n3 بالنسبة لبرنامجك : جاري المتابعة laugh.gif...

قمت بادخال اسم مستخدم وكلمة مرور طويلة حوالي 20 حرفا ... فأعطاني Access Granted... وأقوم حاليا بتتبع البرنامج بollydbg :)

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 21 ديسمبر 2012 في 20:27

2
#6

هل ينفع نحلل الاكواد باحد برامج تحليل الاكواد ؟؟

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

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#7

اعتذر انى مش هقدر احل البرنامج الثانى لانى لا اعلم شىء عن الاسمبلى و حاولت بتتبع بعض الشروحات عن التحليل ببرنامج ollydbg و لكنى عجزت عن فهم الاكواد بعد تحليلها لانى لا اعرف شىئ كما ذكرت عن الاسمبلى ارجو النجاح للجميع و بانتظار التحدى القادم بس ارجو ان يكون من لغات .net لانى لم ادرس اللغات المنخفضة المستوى :D

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

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#8
0M@R كتب:

طب هو فين السورس كود ؟؟!! لان هذا EXE ؟؟!! :)

افتح البرنامج داخل OllyDbg و سيظهر لك الكود في النافذة CPU :)

اقتباس

أستاذنا Z3r0n3 بالنسبة لبرنامجك : جاري المتابعة ...

نحن هنا كفريق و العلاقة بيننا هي اعضاء في هذا الفريق، يعني كلنا نتعلم من بعضنا لذلك لا يوجد استاذ و تلميذ :blush:

اقتباس
قمت بادخال اسم مستخدم وكلمة مرور طويلة حوالي 20 حرفا ... فأعطاني Access Granted

كلمة المرور تكون أطول من 20 حرف، على الأقل 36 حرف و يجب أن يكون أول 12 حرف متشابه مع آخر 12 عشر حرف. و ذلك لأن البرنامج يقوم بتوليد كلمة المرورة من خلال اول 6 حروف الاسم المدخل (لهذا السبب يجب ان يكون هذا الاسم على الاقل يتكون من 6 حروف).

ماذا يحصل وراء ذلك البرنامج:

ان تتبعنا البرنامج سنجده يقوم بحجز ثلال مساحات في ذاكرة الـHeap، الأول لاسم المستخدم، الثاني للباسورد المدخل و الثالث يضع فيه الباسورد الذي يقوم بتوليده. المهم في الأمر ان عنوان الذاكرة المخصصة للباسورد الذي يقوم بتوليده تأتي بعد عنوان الذاكرة التي يضع فيها الباسورد المدخل. يكون شكل الذاكرة كالتالي:

Memory: Entered Password | 28 bytes | Generated Password
Address:    006059F8                       00605A20

ملاحظة: الإزاحة بين الباسورد المدخل و الباسورد الذي تم توليده دائما تكون 40 بايت عندما نقوم بتشغيل البرنامج داخل OllyDbg

الفكرة هنا هو ان نقوم بادخال باسورد بطول معين ليقوم بالكتابة على ذاكرة الباسورد الصحيح بحيث يصبح مماثل للباسورد المدخل و بذلك نضمن رسالة الدخول. مع العلم ان الباسورد الصحيح يتم توليده من خلال اول 6 حروف من اسم المستخدم و يكون طوله 12 حرف (يمكنك التأكد من هذا من خلال تتبع البرنامج)

شكل الباسورد الذي يجب علينا ادخاله لضمان الدخول:

[PASSWORD]+[28 BYTES]+[PASSWORD]
; طول الباسورد يجب ان يكون 12 حرف

مثال للباسورد:

ARABTEAM2000############################ARABTEAM2000

أذكر مرة أخرة ان شكل هذا الباسورد سينجح إلا عندما يكون البرنامج يشتغل تحت OllyDbg. ماعدا ذلك يجب ان يكون على هذا الشكل

[PASSWORD]+[12 BYTES]+[PASSWORD]
; طول الباسورد يجب ان يكون 12 حرف

وصلنا للأهم و هي مجموعة اقتراحات:

1-اول اقتراح وهو عبارة عن قانون للمشاركة في في هذا النقاش:

على كل مشارك ان تكون عدد الحلول التي قدمها مساوية لعدد الإختبارات التي طرحها

مثال عني:قمت بطرح اختبار، و تقديم حل له.

عدد الاختبارات المطروحة: 1

عدد الحلول المقدمة: 1

الفائدة من هذا هو تواصل النقاش في هذا الموضوع، فمثلا لو قمت بتقديم حل لإختبار ما، اصبح عليك عندها طرح اختبار آخر ليصبح هناك توازن في المشاركة داخل هذا النقاش.

2-ثاني اقتراح موجه لكل من يشارك في هذا النقاش وهو الضغط على (+) للتصويت على كل حل مقنع او اختبار مطروح. الغرض منه هو تشجيع الأعضاء للحصول على اكثر نقاط و هي صمعتنا في هذا الفريق :wink:

تم تعديل هذه المشاركة بواسطة Z3r0n3 في 22 ديسمبر 2012 في 05:04

2
#9
اقتباس
لانى لم ادرس اللغات المنخفضة المستوى :D

:blink:

low-level: يقصد بهذه العبارة أنه لايوجد طبقات بين اللغة و لغة الآلة، يعني تمكنك من ان تكون قريب جدا من الهاردوير و التعامل معه مباشرة.

اقتباس
طب هو فين السورس كود ؟؟!! لان هذا EXE ؟؟!!

بالنسبة لهذا، ان اعطيتك الكود المصدري، فان الأمر انتهى سيصبح من السهل الحصول على خوارزمية توليد الباسورد من خلال قراءة الكود.

تم تعديل هذه المشاركة بواسطة Z3r0n3 في 22 ديسمبر 2012 في 00:16

#10
Z3r0n3 كتب:

:blink:

low-level: يقصد بهذه العبارة أنه لايوجد طبقات بين اللفة و لغة الجهاز، يعني تمكنك من ان تكون قريب جدا من الهاردوير و التعامل معه مباشرة.

1-انا اقصد انى لم ادرس لغة الاسمبلى و هى تعتبر لغة منخفضة المستوى فهذا هو قصدى و اسف ان اخطأت

2- عندى سؤال بالنسبة لقوانين التحدى هل هناك لغة خاصة ام ان كل اللغات متاحة ؟؟!!

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

سبحانك الله و بحمدك عدد خلقك و رضى نفسك و زنة عرشك ومداد كلماتك

#11

السلام عليكم

اقتباس
لذلك اصبجت كتابة الدروس مضيعة للوقت مادام لايوجد افادة

الدروس التي نكتبها الآن قد لا تجد متابعين ولكن قطعا ستجد من يقرأها في المستقبل القريب لذا واصل الكتابة و لا تتأثر من قلة المتابعين :)

أظن أنه لا يوجد لغز الآن لذا سأضع لكم KeyGen بسيط جدا كتبتُه منذ مدة بالجافا.

:download:

بالتوفيق.

2
#12
Sn@CkeR كتب:

السلام عليكم

الدروس التي نكتبها الآن قد لا تجد متابعين ولكن قطعا ستجد من يقرأها في المستقبل القريب لذا واصل الكتابة و لا تتأثر من قلة المتابعين :)

أظن أنه لا يوجد لغز الآن لذا سأضع لكم KeyGen بسيط جدا كتبتُه منذ مدة بالجافا.

:download:

بالتوفيق.

اخي الكريم ...شكرا لطرحك لهذا اللغز ..

ولكن اخي هذا خارج نطاق الموضوع ...

لاحظ نحن لانبحث عن كسر البرنامج او تحليله لستنتاج الخوارزمية ...بل لايجاد نقطة ضعف في الخوارزمية ...

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

او اللغز الثاني الذي طرحه اخي ..كان يوجد ثغرة Heap overflow تؤدي لتخطي الخوارزمية ....

ثانيا اتمنى من لشخص الذي يطرح لغز ان يشرح عنه قليلا ...

سوف اطرح لغز جديد .....

معلومات عن اللغز :

1- لغة البرمجة : Perl

2- وظيفة الكود : شيل او (Command Line) محدود الصلاحيات بحيث يسمح لمستخدمه بتنفيذ بعض الاوامر فقط ...

3- الهدف : تخطي الاوامر التي يسمح البرنامج بها وتنفيذ اوامر غير مخول للمستخدم تنفيذها مثل الامر (ls) في لينكس او (dir) في ويندوز

الكود البرمجي :

#!/usr/bin/perl
print "[*] Hell0 Can You Hacke This ...?\n";
while (1)
{
    print '$->';
    $cmd=<STDIN>;chomp $cmd; 		# Get Cmd From The Command Line
	@parameters=split (/[ ]/,$cmd); # Split The Cmd To Cmd and parameters
    $cmd =shift(@parameters);		
	foreach (@parameters)
	{
		$par = $par." ".$_;
	}
    if($cmd eq "pwd")
    {
        $cmd="pwd";
    }
    elsif($cmd eq "echo")
    {
        $cmd="echo".$par;
    }
	elsif($cmd eq "exit")
	{
		exit();
	}
    else
    {
        if ($cmd eq "")
        {
            next; # Go To the start of the loop
        }
        else
        {
            print "[-] Unknown $cmd\n";
            $error=1;
        }
    }
    if ($error ne 1)
    {
        print `$cmd`;
    }
}

اظن ان الكود واضح ...وبسيط للغاية ..اي شخص واجه مشكلة بشيء معين

يطرح مشكلته ...

1

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#13

خارج النطاق ولا داخل النطاق ... أنا صرلي 3 ساعات قاعد اتتبع البرنامج بال ollydbg هههه ...

على كل حال أخي Z3ron3 ... هذا الرد كتبته قبل أن أراجع المشاركة مرة أخرى بعد قراءتها ...

هذا بخصوص برنامجك ..

اقتباس

بارك الله فيك أخي ...استغرقت مني 3 ساعات كوني مبتدئا ...وقمت بننبع البرنامج حوالي 12 مرة ..

والحمد لله هذا ما وصلت إليه ..

mov 	eax, dword ptr ds:[ecx+esi]//نأخذ أول 4 حروف من كلمة السر بعد تجاوز 0أو 4 أو8حروف  زلا ننسى أن الترتيب معكوس
cmp 	eax, dword ptr ds:[edx+esi]//نقارنها مع أول 4 حروف بعد تجاوز 40حرف بعد تجاوز 0 أو 4 أو 8حروف بترتيب معكوس
jne 	short exploitme.004014A8//خروج من الحلقة ويعطي الدخول ممنوع
add 	esi, 4//يزيد المتحول الذي يشارك في الاشارة لقيمة المتغير
sub 	edi, 1//انقاص العداد بمقدار واحد ... ولا ننسى ان العداد قيمته 3 في البداية
jne 	short exploitme.0040147C//إعادة الحلقة

خلاصة الموضوع ... يكفي أن تتشابه أول12 حرف مع الحروف من40 إلى 52 ...حتى نتجاوز جدار كلمة السر

وبدون مزيد من التعقيد ..اكتب اي كلمة سر من تكرار أحد الحروف 52 مرة وستنجح

والحمد لله رب العالمين ....

هل تحليلي صحيح ؟

وجاري متابعة باقي الردود happy.gif

1
#14

@Sn@CkeR

اقتباس

سأضع لكم KeyGen بسيط جدا

laugh.giflaugh.giflaugh.gifبسيط جداlaugh.giflaugh.giflaugh.gif

__________________________________________

@Z3r0n3

بصراحة لا يسعني إلا أن أشكرك ...ربما لا ينقصنا في الفريق سوى التنظيم ... (أحب كلمة "فريق") ... وهذا ما قمت به الآن ...تشكل ثنائيا ممتازاً مع أخي Sn@cker ...

بالنسبة للفكرة كمشروع كبير ...رائعة بكل ما تعنيه الكلمة ...

__________________________________________

@Laz0rd

لا عليك يمكننا متابعة المجالين معاً ... الفائدة كبيرة ..في هذه المشاركة ... كله في صحيفتك ان شاء الله happy.gif

إن شاء الله نتابع غداً ...

دمتم بود happy.gif

#15
مصطفى 36a2 كتب:

خارج النطاق ولا داخل النطاق ... أنا صرلي 3 ساعات قاعد اتتبع البرنامج بال ollydbg هههه ...على كل حال أخي Z3ron3 ... هذا الرد كتبته قبل أن أراجع المشاركة مرة أخرى بعد قراءتها ...هذا بخصوص برنامجك ..وجاري متابعة باقي الردود happy.gif

إن تواصل هذا النقاش و بمشاركتك فيه ستلاحظ ان مستواك تحسن في تتبع البرامج. كذلك تحليلك صحيح :)

#16
مصطفى 36a2 كتب:

@Laz0rd

لا عليك يمكننا متابعة المجالين معاً ... الفائدة كبيرة ..في هذه المشاركة ... كله في صحيفتك ان شاء الله happy.gif

إن شاء الله نتابع غداً ...

اخي مو مشكلة ...يعني ممكن نطرح يلي يحبه الاعضاء ..ولكن الهندسة العكسية ليست هدفنا ..بل هي اداة ممكن نستخدمها

لحتى نجد الـ Security Hole يلي هي ممكن تكون ثغرة منطقية logic او ممكن تكون بسبب اسأءة المبرمج استخدام اللغة !!!

او ممكن انو كان نعسان وهو عم يكتب مثلي ...:) وما نو شايف قدامه هههههه

ليش مافي اهتمام بالكود يلي طرحته انا ....:) :) :) :) :) :)

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#17

أخي @Laz0rd

عندي بعض الأسئلة تتعلق بفهم الكود .. _خصوصاً أنه بلغة بيرل (من أغرب التراكيب النحوية التي أشاهدها )

1- ماهو هذا المتحول $_ هل هو متحول خاص بالدخل أو الخرج أو شيئا من هذا القبيل ...

2-بالنسبة للقطعة التالية :

@parameters=split (/[ ]/,$cmd);

هل الرمز @يدل على أن المتحول هو مصفوفة ... وهذا يعني أن parameters هي مصفوفة تحوي الكلمات التي أدخلها بعد أول كلمة ( كوسطاء )

رغم عدم فهمي الكود بشكل كامل ...

أجزم بأن الحل يتعلق بتحقيق الشرط التالي :

    if($cmd eq "pwd")
    {
        $cmd="pwd";
    }

ولكن لا يمكنني الإجابة حتى أفهم آليه عمل الأسطر التالية :

        @parameters=split (/[ ]/,$cmd); # Split The Cmd To Cmd and parameters
    $cmd =shift(@parameters);

(ملاحظة : يمكنني البحث وحيداً في توثيق اللغة أو بعض الدروس ...ولكن بما أنك عرضت علينا المساعدة في فهم الكود ..فهذا أفضل ...(ليكون الكود وشرحه معه في نفس المكان ))

بالتوفيق

#18

سلام عليكم

واخيرا وجدنا من يحرك هذا القسم بعد ركود دام طويلا

موضوع رائع

الكود الاخير الذي كتبه الأخ Laz0rd فيه خطأ عند السطر

 $cmd="echo".$par;

وانا ليس لي خبرة في البيرل وما تعنيه رموزها غير أني انتبهت إلى الزيادة par$ وقلت هذا متغير يمكن أن نملأه بما شئنا

وفعلا لما كتبت هذا الأمر

echo help && ls

كانت النتيجة أنه طبع كلمة help وأسماء الملفات والمجلدات

[*] Hell0 Can You Hacke This ...?
$-> echo help && ls
help
ahmed_home~
Bureau
Documents
filtre
gestion
home_r
home_r_21-12-12 19:23:38.sql
home_w
home_w~
home_w_21-12-12 21:15:30.sql
home_w_21-12-12 21:15:30.sql~
Images
LazHistorique
Modèles
pl.pl
projects
Public
script~
Téléchargements
Vidéos
$->

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 22 ديسمبر 2012 في 19:09

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#19

أعتذر للإخوة إن كانت مُشاركتي "خارج نطاق الموضوع" !

هل أحذفها - بعد إذنكم بالطبع - ؟

#20
أحمد أبو عبد البر كتب:

سلام عليكم

واخيرا وجدنا من يحرك هذا القسم بعد ركود دام طويلا

موضوع رائع

الكود الاخير الذي كتبه الأخ Laz0rd فيه خطأ عند السطر

 $cmd="echo".$par;

وانا ليس لي خبرة في البيرل وما تعنيه رموزها غير أني انتبهت إلى الزيادة par$ وقلت هذا متغير يمكن أن نملأه بما شئنا

وفعلا لما كتبت هذا الأمر

echo help && ls

كانت النتيجة أنه طبع كلمة help وأسماء الملفات والمجلدات

[*] Hell0 Can You Hacke This ...?
$-> echo help && ls
help
ahmed_home~
Bureau
Documents
filtre
gestion
home_r
home_r_21-12-12 19:23:38.sql
home_w
home_w~
home_w_21-12-12 21:15:30.sql
home_w_21-12-12 21:15:30.sql~
Images
LazHistorique
Modèles
pl.pl
projects
Public
script~
Téléchargements
Vidéos
$->

جميل للغاية وحل صحيح ...ولكن الحل الذي اريده لم تتوصلوا اليه ...لاحظ اخي بلغة بيرل تستطيع تنفيذ الاوامر بدالة system(cmd) او تحصر الامر ب `cmd` ...اعطيتك معلومات كافية على ما اعتقد !!

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#21
مصطفى 36a2 كتب:

أخي @Laz0rd

عندي بعض الأسئلة تتعلق بفهم الكود .. _خصوصاً أنه بلغة بيرل (من أغرب التراكيب النحوية التي أشاهدها )

1- ماهو هذا المتحول $_ هل هو متحول خاص بالدخل أو الخرج أو شيئا من هذا القبيل ...

2-بالنسبة للقطعة التالية :

@parameters=split (/[ ]/,$cmd);

هل الرمز @يدل على أن المتحول هو مصفوفة ... وهذا يعني أن parameters هي مصفوفة تحوي الكلمات التي أدخلها بعد أول كلمة ( كوسطاء )

رغم عدم فهمي الكود بشكل كامل ...

أجزم بأن الحل يتعلق بتحقيق الشرط التالي :

    if($cmd eq "pwd")
    {
        $cmd="pwd";
    }

ولكن لا يمكنني الإجابة حتى أفهم آليه عمل الأسطر التالية :

        @parameters=split (/[ ]/,$cmd); # Split The Cmd To Cmd and parameters
    $cmd =shift(@parameters);

(ملاحظة : يمكنني البحث وحيداً في توثيق اللغة أو بعض الدروس ...ولكن بما أنك عرضت علينا المساعدة في فهم الكود ..فهذا أفضل ...(ليكون الكود وشرحه معه في نفس المكان ))

بالتوفيق

ههه طبعا شي عادي وهذا من ميزات الموضوع حيث رخ تتيح لك تعلم اشياء وتراكيب جديدة ..

اقتباس

1- ماهو هذا المتحول $_ هل هو متحول خاص بالدخل أو الخرج أو شيئا من هذا القبيل ...

هذا اسمه المتغير الافتراضي حيث ياخذ القيم التي يتم توليدها في حلقات لتكرار و ووو ...

ثانيا المصفوفة تتعرف بالرمز @

parameters=split (/[ ]/,$cmd);

هذه تقوم بفصل لسترنج الموجودة في cmd من خلال المسافة space وتحط كل جزء في خانة من المصفوفة

$cmd =shift(@parameters);

هذه تأخذ اول عنصر من المصفوفة وتعطيع للمتحول cmd يلي هو الامر يلي ادخله لمستخدم

    if($cmd eq "pwd")
    {
        $cmd="pwd";
    }

قربت شوي ...ولكن خطأ لانه هذه تقارن اذا كان المتغير بساوي الامر pwd فتخليه على حاله لانو الامر pwd ما ياخذ برامترات

اما الامر echo ياخذ برامترات ...القي نظرة قريبة ...

لاتنسو لم ينتهي لغز بعد صحيح تم حل هذا اللغز ولكن يوجد حل اخر ..تذكروا في بيرل نطبق الاوامر بأستخدام system() او بحصر الامر ب `cmd`

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#22
Sn@CkeR كتب:

أعتذر للإخوة إن كانت مُشاركتي "خارج نطاق الموضوع" !

هل أحذفها - بعد إذنكم بالطبع - ؟

طبعا لا تحذفها ...نحن لانريد ان نهدر اي حرف اذا كيف نهدر تحدي للهندسة العكسية ...(كيف تريدني ان اضيع كل المتعة التي سوف يشعر بها الاعضاء الذين سوف يحللون برنامجك :) )

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

#23

لا أعلم ما هو الحل الذي تبحث عنه لكن يمكن تنفيذ أوامر إضافية بأشكال عديدة

منها ما تفضل به أحمد باستخدام && لكن يعيبه أنه في حال فشل تنفيذ أحد الأوامر فكل ما يتبعه سيفشل لأنه مبني على شرط تنفيذ الأمر التالي فقط إذا تم تنفيذ الأمر السابق

الشكل آخر بالفصل بين الأوامر باستخدام ;

مثل

$->echo hi; cat /etc/passwd;
hi
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync

وتستطيع الاستفادة من pipe line أيضاً في إرسال خرج أحد الأوامر إلى الأمر الذي يليه

مثلاً:

$->echo | grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

أو

$->echo | cmd /C "dir"
 Volume in drive C is win7
 Volume Serial Number is 96xx-54xx

 Directory of C:\Users\Xacker\Desktop

12/23/2012  06:23 AM    <DIR>          .
12/23/2012  06:23 AM    <DIR>          ..
10/23/2012  07:34 AM           239,541 CC.txt
10/20/2012  02:43 PM    <DIR>          projects
12/22/2012  12:35 PM    <DIR>          translate
12/23/2012  05:36 AM               823 x.pl
               7 File(s)      3,788,306 bytes
               7 Dir(s)   3,792,490,496 bytes free

وأخيراً تستطيع الاستفادة من grave accent كما أشرت في معالجة ما بينها كأمر بدلاً من سلسلة نصية

مثلاً:

$->echo `x=world; echo "hello $x"`
hello world
3

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#24

سلام عليكم

أظن أن ما تقصده هو ما ذكره الأخ x بقوله

$->echo `x=world; echo "hello $x"`
hello world

أي يمكن أن أكتب ما أشاء بين `` مثل

echo `find / -name passwd`

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 23 ديسمبر 2012 في 09:01

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#25
Xacker كتب:

لا أعلم ما هو الحل الذي تبحث عنه لكن يمكن تنفيذ أوامر إضافية بأشكال عديدة

منها ما تفضل به أحمد باستخدام && لكن يعيبه أنه في حال فشل تنفيذ أحد الأوامر فكل ما يتبعه سيفشل لأنه مبني على شرط تنفيذ الأمر التالي فقط إذا تم تنفيذ الأمر السابق

الشكل آخر بالفصل بين الأوامر باستخدام ;

مثل

$->echo hi; cat /etc/passwd;
hi
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync

وتستطيع الاستفادة من pipe line أيضاً في إرسال خرج أحد الأوامر إلى الأمر الذي يليه

مثلاً:

$->echo | grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

أو

$->echo | cmd /C "dir"
 Volume in drive C is win7
 Volume Serial Number is 96xx-54xx

 Directory of C:\Users\Xacker\Desktop

12/23/2012  06:23 AM    <DIR>          .
12/23/2012  06:23 AM    <DIR>          ..
10/23/2012  07:34 AM           239,541 CC.txt
10/20/2012  02:43 PM    <DIR>          projects
12/22/2012  12:35 PM    <DIR>          translate
12/23/2012  05:36 AM               823 x.pl
               7 File(s)      3,788,306 bytes
               7 Dir(s)   3,792,490,496 bytes free

وأخيراً تستطيع الاستفادة من grave accent كما أشرت في معالجة ما بينها كأمر بدلاً من سلسلة نصية

مثلاً:

$->echo `x=world; echo "hello $x"`
hello world

هلا اخي xacker لقد سررت بمرورك ...وحلك صحيح 100000 %

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

اخي أحمد أبو عبد البر خلاص انحل اللغز ...

بس هلق حسب القوانين يلي تم تحديثها من قبل الاعضاء (الاخ Z3r0n3)

على احدكما طرح لغز يعني اما اخي أحمد أبو عبد البر او اخي xacker والاحسن انتو الثنين ههههه

Ninja-Sec.org

logo.png

If You Can't Beat Them Keep Them Confused

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…