Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks bewerben? Oder möchten Sie Zugriff auf die neueste Version von PEASS oder HackTricks im PDF-Format haben? Überprüfen Sie die ABONNEMENTPLÄNE!
Wenn Sie nichts über Java-Deserialisierungspayloads wissen, kann es schwierig sein, herauszufinden, warum dieser Code einen Taschenrechner ausführt.
Zunächst einmal müssen Sie wissen, dass ein Transformer in Java etwas ist, das eine Klasse erhält und sie in eine andere umwandelt.
Es ist auch interessant zu wissen, dass die hier ausgeführte Payloadäquivalent zu folgendem ist:
Also, wie ist das erste Payload-Beispiel äquivalent zu diesen "einfachen" Einzeilern?
Zunächst einmal kann man im Payload erkennen, dass eine Kette (Array) von Transformationen erstellt wird:
String[] command = {"calc.exe"};finalTransformer[] transformers =newTransformer[]{//(1) - Get gadget Class (from Runtime class)newConstantTransformer(Runtime.class),//(2) - Call from gadget Class (from Runtime class) the function "getMetod" to obtain "getRuntime"newInvokerTransformer("getMethod",newClass[]{ String.class,Class[].class},newObject[]{"getRuntime",newClass[0]}),//(3) - Call from (Runtime) Class.getMethod("getRuntime") to obtain a Runtime ojectnewInvokerTransformer("invoke",newClass[]{Object.class,Object[].class},newObject[]{null,newObject[0]}),//(4) - Use the Runtime object to call exec with arbitrary commandsnewInvokerTransformer("exec",newClass[]{String.class},command)};ChainedTransformer chainedTransformer =newChainedTransformer(transformers);
Wenn Sie den Code lesen, werden Sie feststellen, dass Sie durch das Verketten der Transformation des Arrays in der Lage sind, beliebige Befehle auszuführen.
Also, wie werden diese Transformationen verknüpft?
Im letzten Abschnitt der Payload sehen Sie, dass ein Map-Objekt erstellt wird. Anschließend wird die Funktion decorate von LazyMap mit dem Map-Objekt und den verketteten Transformers ausgeführt. Aus dem folgenden Code geht hervor, dass dadurch die verketteten Transformers in das Attribut lazyMap.factory kopiert werden:
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
Und dann wird das große Finale ausgeführt: lazyMap.get("anything");
Dies ist der Code der get Funktion:
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
Und dies ist der Code der transform Funktion:
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
Also, erinnern Sie sich daran, dass wir innerhalb der Factory den chainedTransformer gespeichert haben und innerhalb der transform-Funktion gehen wir alle diese verketteten Transformer durch und führen sie nacheinander aus. Das Lustige ist, dass jeder Transformer object als Eingabe verwendet und object das Ergebnis des zuletzt ausgeführten Transformers ist. Daher werden alle Transformationen verkettet und führen die bösartige Nutzlast aus.
Zusammenfassung
Am Ende, aufgrund der Art und Weise, wie lazyMap die verketteten Transformer innerhalb der get-Methode verwaltet, ist es so, als ob wir den folgenden Code ausführen würden:
Beachten Sie, wie value die Eingabe jedes Transformationsvorgangs ist und das Ergebnis der vorherigen Transformation, was die Ausführung eines Einzeilers ermöglicht:
Beachten Sie, dass hier die Gadgets erklärt wurden, die für das ComonsCollections1-Payload verwendet werden. Aber es bleibt unklar, wie das alles gestartet wird. Sie können hier sehen, dass ysoserial, um dieses Payload auszuführen, ein AnnotationInvocationHandler-Objekt verwendet, da dieses Objekt, wenn es deserialisiert wird, die Funktion payload.get() aufruft, die das gesamte Payload ausführt.
Java Thread Sleep
Dieses Payload kann nützlich sein, um festzustellen, ob die Website anfällig ist, da es einen Sleep ausführt, wenn dies der Fall ist.
Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks bewerben? Oder möchten Sie Zugriff auf die neueste Version von PEASS oder HackTricks im PDF-Format haben? Überprüfen Sie die ABONNEMENTPLÄNE!