Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Firmware_Slap — اكتشاف الثغرات في البرامج الثابتة من خلال التحليل التجميعي وتجميع الوظائف. | Kitploit
أدوات/GitHubGitHub/christhecoolhut/firmware_slap
تحليل الثغرات الأمنيةالاستغلالتحليل الملفات الثنائيةتحليل البرامج الثابتة
GitHubchristhecoolhut/firmware_slap

Firmware_Slap

اكتشاف الثغرات في البرامج الثابتة من خلال التحليل التجميعي وتجميع الوظائف.

عرض المستودع
47681منذ 5 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Firmware Slap

Firmware slap يجمع بين التحليل التزامني (concolic analysis) وتجميع الدوال (function clustering) لاكتشاف الثغرات وتشابه الدوال في البرامج الثابتة (firmware). يتم بناء Firmware slap كمجموعة من المكتبات ويصدر معظم المعلومات إما كـ pickles أو JSON للتكامل مع الأدوات الأخرى.

Firmware Slap

يمكن العثور على شرائح المحاضرة هنا

الإعداد

يجب تشغيل Firmware slap داخل بيئة افتراضية. تم اختباره على Python3.6

root@kitploit:~
sudo apt install python3-virtualenv
virtualenv -p python3 fwslap
source fwslap/bin/activate

-- أو --

root@kitploit:~
cd ~
mkdir .virtualenvs
pip install virtualenv
which virtualenv # ملاحظة تحذيرات المسار
pip install virtualenvwrapper
echo "export PATH=$PATH:~/.local/bin" >> ~/.bashrc
echo "export WORKON_HOME=~/.virtualenvs" >> ~/.bashrc
echo "source ~/.local/bin/virtualenvwrapper.sh" >> ~/.bashrc

# عادةً من الأفضل فتح terminal جديد هنا

mkvirtualenv fwslap -p /usr/bin/python3
workon fwslap
root@kitploit:~
python setup.py install

ستحتاج إلى rabbitmq و docker و (radare2 أو Ghidra)

root@kitploit:~
# Ubuntu
sudo apt install rabbitmq-server docker.io
# OSX
brew install rabbitmq

# Radare2
git clone https://github.com/radare/radare2.git
sudo ./radare2/sys/install.sh
# Ghidra
wget https://ghidra-sre.org/ghidra_9.0.4_PUBLIC_20190516.zip
unzip ghidra_9.0.4_PUBLIC_20190516.zip -d ghidra
echo "export PATH=\$PATH:$PWD/ghidra/ghidra_9.0.4/support" >> ~/.bashrc

يتطلب Ghidra JDK 11.

root@kitploit:~
sudo apt install default-jdk
java --version

إذا كنت ترغب في استخدام Elastic search، قم بتشغيل السكربت Elasticsearch_and_kibana.sh

بداية سريعة

تأكد من تشغيل rabbitmq-server.

root@kitploit:~
# في terminal منفصل، قم بتشغيل هذا في الدليل الرئيسي "Firmware_Slap"
celery -A firmware_slap.celery_tasks worker --loglevel=info
# تجاوز سعة المخزن المؤقت الأساسية
Discover_And_Dump.py examples/iwconfig -D iwconfig_results
Load_And_View_Results.py iwconfig_results.all.pickle

# اضغط على إدارة (Management) في اللوحة اليسرى
# اضغط على الكائنات المحفوظة (Saved Objects)
# اضغط على استيراد (Import)
# اختر 'elastic_export.json' داخل دليل elastic في firmware slap
# انتقل إلى لوحات المعلومات (Dashboards) في اللوحة اليسرى واختر 'Overview Dashboard'

Load_And_View_Results.py iwconfig_results.all.pickle -s

# حقن الأوامر
tar -xvf examples/Almond_libs.tar.gz
Vuln_Discover_Celery.py examples/upload.cgi -L Almond_Root/lib/

الاستخدام

root@kitploit:~
# احصل على البرنامج الثابت المستخدم في الأمثلة
wget https://firmware.securifi.com/AL3_64MB/AL3-R024-64MB
binwalk -Mre AL3-R024-64MB

ابدأ مهمة celery من الدليل الجذر للمشروع:

root@kitploit:~
# في terminal منفصل
celery -A firmware_slap.celery_tasks worker --loglevel=info

في نافذة terminal أخرى، قم بتشغيل مهمة اكتشاف الثغرات.

root@kitploit:~
$ Vuln_Discover_Celery.py Almond_Root/etc_ro/lighttpd/www/cgi-bin/upload_bootloader.cgi -L Almond_Root/lib/
[+] الحصول على دوال الوسيطات
[+] تحليل 1 دالة
  0%|                                                                                                                                                                                                                                   | 0/1 [00:01<?, ?it/s]
{   'Injected_Location': {   'base': '0x7ffefde8',
........................ SNIP ......................
    'type': 'Command Injection'}
Python 3.5.2 (default, Nov 12 2018, 13:43:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.3.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 

كائن الثغرة التي تم إرجاعها

سيقوم الأمر أعلاه بإرجاع كائن في المتغير result. هذا قاموس يحتوي على جميع أنواع المعلومات الرائعة حول الثغرة. هناك ثلاثة مفاتيح رئيسية في الكائن: وسيطات الدالة، الذاكرة، والموقع المحقون.

root@kitploit:~
In [3]: result.keys()                                                                                 
Out[3]: dict_keys(['args', 'file_name', 'type', 'mem', 'Injected_Location'])

args

سيفصل مفتاح args المعلومات حول الوسيطة المستردة وما يجب أن تكون عليه قيم الوسيطة لإعادة إنشاء الثغرة. في المثال أدناه، تم استرداد وسيطة واحدة، ولتشغيل حقن الأمر يجب أن تكون تلك الوسيطة من نوع char* وتحتوي على "`reboot`" لتفعيل إعادة التشغيل.

root@kitploit:~
In [1]: result['args']                                                           
Out[1]: 
[{'base': 'a1',
  'type': 'int',
  'value': "0x0 -> b'`reboot`\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00'"}]

الذاكرة (Memory)

يحتفظ مكون الذاكرة من الكائن بقيم الذاكرة المطلوبة التي تم تعيينها لتشغيل الثغرة. كما يقدم عناوين المكدس وعناوين .text مع الأوامر المخالفة لتعيين قيود الذاكرة المطلوبة. حدث الذاكرة الأول مطلوب عند mtd_write_firmware+0x0 والثاني عند mtd_write_firmware+0x38. يتم توفير التجميع للمساعدة في تجميل عرض العمل في المستقبل.

root@kitploit:~
In [2]: result['mem']                                                                   
Out[2]: 
[{'BBL_ADDR': '0x401138',
  'BBL_DESC': {'DESCRIPTION': 'mtd_write_firmware+0x0 in upload_bootloader.cgi (0x401138)',
   'DISASSEMBLY': ['0x401138:\tlui\t$gp, 0x42',
    '0x40113c:\taddiu\t$sp, $sp, -0x228',
    '0x401140:\taddiu\t$gp, $gp, -0x5e90',
    '0x401144:\tlw\t$t9, -0x7f84($gp)',
    '0x401148:\tsw\t$a2, 0x10($sp)',
    '0x40114c:\tlui\t$a2, 0x40',
    '0x401150:\tmove\t$a3, $a1',
    '0x401154:\tsw\t$ra, 0x224($sp)',
    '0x401158:\tsw\t$gp, 0x18($sp)',
    '0x40115c:\tsw\t$a0, 0x14($sp)',
    '0x401160:\taddiu\t$a1, $zero, 0x200',
    '0x401164:\taddiu\t$a0, $sp, 0x20',
    '0x401168:\tjalr\t$t9',
    '0x40116c:\taddiu\t$a2, $a2, 0x196c']},
  'DATA': "b'`reboot`\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'",
  'DATA_ADDRS': ['0x0']},
 {'BBL_ADDR': '0x401170',
  'BBL_DESC': {'DESCRIPTION': 'mtd_write_firmware+0x38 in upload_bootloader.cgi (0x401170)',
   'DISASSEMBLY': ['0x401170:\tlw\t$gp, 0x18($sp)',
    '0x401174:\tnop\t',
    '0x401178:\tlw\t$t9, -0x7f68($gp)',
    '0x40117c:\tnop\t',
    '0x401180:\tjalr\t$t9',
    '0x401184:\taddiu\t$a0, $sp, 0x20']},
  'DATA': "b'/bin/mtd_write -o 0 -l 0 write `reboot`'",
  'DATA_ADDRS': ['0x7ffefe07']}]

خاص بحقن الأوامر

نظرًا لأن حقن الأوامر هي الأسهل في العرض، قمت بإنشاء مفتاح قاموس ملائم لإظهار موقع حقن الأمر بسهولة.

root@kitploit:~
In [4]: result['Injected_Location']                                                                      
Out[4]: {'base': '0x7ffefde8', 'type': 'char *', 'value': '/bin/mtd_write -o 0 -l 0 write `reboot`'}

نموذج سكربت تجميع الثغرات (Cluster)

سيحاول سكربت تجميع الثغرات اكتشاف الثغرات باستخدام الطريقة في سكربت اكتشاف الثغرات النموذجي، ثم بناء عناقيد k-means لمجموعة من الدوال المعطاة عبر برنامج ثابت مستخرج للعثور على دوال مشابهة للدوال المعرضة للخطر.

root@kitploit:~
$ Vuln_Cluster_Celery.py -h
usage: Vuln_Cluster_Celery.py [-h] [-L LD_PATH] [-F FUNCTION] [-V VULN_PICKLE]
                              Directory

positional arguments:
  Directory

optional arguments:
  -h, --help            show this help message and exit
  -L LD_PATH, --LD_PATH LD_PATH
                        Path to libraries to load
  -F FUNCTION, --Function FUNCTION
  -V VULN_PICKLE, --Vuln_Pickle VULN_PICKLE

يأخذ الأمر أدناه -F كدالة معروفة بالثغرة. -V كملف pickle مأخوذ من تشغيل سابق لتجنب الحاجة إلى اكتشاف ثغرات جديدة، و -L لمسار المكتبة. استخدام نموذجي:

root@kitploit:~
$ python Vuln_Cluster_Celery.py -F mtd_write_firmware -L Almond_Root/lib/ Almond_Root/etc_ro/lighttpd/www/cgi-bin/
[+] Reading Files
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  2.80it/s]
Getting functions from executables
Starting main
... Snip ...

تنزيل الأداة