Browse Source

Started integrating JLan CIFS

Alexander Brakowski 9 years ago
parent
commit
4e5ab0adab

+ 3 - 3
assets/payload/redirect-ports.sh

@@ -4,9 +4,9 @@
 # MySQL SIP (3306 and 5060) are left out because they are >= 1024 anyways
 
 #             ECHO  FTP   HTTP  HTTPS SMB (NETBIOS UDP & TCP) SSH   TELNET
-protocol=(    "tcp" "tcp" "tcp" "tcp" "udp" "udp" "tcp" "tcp" "tcp" "tcp" )
-origin=(       7     21    80    443   137   138   137   139   22    23   )
-destination=( 28144 28169 28217 28580 28274 28275 28274 28276 28159 28160 ) # simply offset by 1024 + 27113
+protocol=(    "tcp" "tcp" "tcp" "tcp" "udp" "udp" "tcp" "tcp" "tcp" "tcp" "tcp")
+origin=(       7     21    80    443   137   138   137   139   22    23    445)
+destination=( 28144 28169 28217 28580 28274 28275 28274 28276 28159 28160 28582) # simply offset by 1024 + 27113
 length=${#protocol[@]} # count protocol elements
 
 # for (( i=0; i<$length; i++ ))

+ 1 - 0
res/values/protocols.xml

@@ -10,6 +10,7 @@
         <item>MySQL</item>
         <item>SIP</item>
         <item>SMB</item>
+        <item>CIFS</item>
         <item>SSH</item>
         <item>TELNET</item>
     </string-array>

+ 12 - 5
src/de/tudarmstadt/informatik/hostage/Handler.java

@@ -23,6 +23,7 @@ import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
 import de.tudarmstadt.informatik.hostage.logging.SyncDevice;
 import de.tudarmstadt.informatik.hostage.nio.Reader;
 import de.tudarmstadt.informatik.hostage.nio.Writer;
+import de.tudarmstadt.informatik.hostage.protocol.CIFS;
 import de.tudarmstadt.informatik.hostage.protocol.GHOST;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol;
 import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
@@ -82,6 +83,12 @@ public class Handler implements Runnable {
 			((GHOST) protocol).setAttackerIP(client.getInetAddress());
 			((GHOST) protocol).setCurrentPort(listener.getPort());
 		}
+
+        if(protocol.toString().equals("CIFS")){
+            ((CIFS) protocol).initialize(this);
+
+        }
+
 		this.client = client;
 		this.thread = new Thread(this);
 		pref = PreferenceManager.getDefaultSharedPreferences(service);
@@ -192,7 +199,7 @@ public class Handler implements Runnable {
 	 *            The content of the message.
 	 * @return The Record representing the communication message.
 	 */
-	protected MessageRecord createMessageRecord(TYPE type, String packet) {
+	public MessageRecord createMessageRecord(TYPE type, String packet) {
 		MessageRecord record = new MessageRecord(true);
 		//record.setId(message_id++); // autoincrement
 		record.setAttack_id(attack_id);		
@@ -207,7 +214,7 @@ public class Handler implements Runnable {
 	 * 
 	 * @return The AttackRecord representing the attack.
 	 */
-	protected AttackRecord createAttackRecord() {
+    public AttackRecord createAttackRecord() {
 		AttackRecord record = new AttackRecord();
 		record.setAttack_id(attack_id);
         record.setSync_id(attack_id);
@@ -230,7 +237,7 @@ public class Handler implements Runnable {
 	 * 
 	 * @return The NetworkRecord representing the current network.
 	 */
-	protected NetworkRecord createNetworkRecord() {
+    public NetworkRecord createNetworkRecord() {
 		NetworkRecord record = new NetworkRecord();
 		record.setBssid(BSSID);		
 		record.setSsid(SSID);		
@@ -247,8 +254,8 @@ public class Handler implements Runnable {
 		}
 		return record;
 	}
-	
-	private void log(TYPE type, String packet){
+
+    public void log(TYPE type, String packet){
 		if(!logged){
 			Logger.log(Hostage.getContext(), createNetworkRecord());
 			Logger.log(Hostage.getContext(), createAttackRecord());

+ 111 - 2
src/de/tudarmstadt/informatik/hostage/protocol/CIFS.java

@@ -1,14 +1,94 @@
 package de.tudarmstadt.informatik.hostage.protocol;
 
 
+import org.alfresco.config.ConfigElement;
+import org.alfresco.jlan.debug.ConsoleDebug;
+import org.alfresco.jlan.debug.DebugConfigSection;
+import org.alfresco.jlan.server.SessionListener;
+import org.alfresco.jlan.server.SrvSession;
+import org.alfresco.jlan.server.auth.CifsAuthenticator;
+import org.alfresco.jlan.server.auth.DefaultAuthenticator;
+import org.alfresco.jlan.server.config.CoreServerConfigSection;
+import org.alfresco.jlan.server.config.GlobalConfigSection;
+import org.alfresco.jlan.server.config.InvalidConfigurationException;
+import org.alfresco.jlan.server.config.SecurityConfigSection;
+import org.alfresco.jlan.server.config.ServerConfiguration;
+import org.alfresco.jlan.server.core.DeviceContextException;
+import org.alfresco.jlan.server.filesys.DiskDeviceContext;
+import org.alfresco.jlan.server.filesys.DiskInterface;
+import org.alfresco.jlan.server.filesys.DiskSharedDevice;
+import org.alfresco.jlan.server.filesys.FileListener;
+import org.alfresco.jlan.server.filesys.FilesystemsConfigSection;
+import org.alfresco.jlan.server.filesys.NetworkFile;
+import org.alfresco.jlan.smb.server.CIFSConfigSection;
+import org.alfresco.jlan.smb.server.SMBServer;
+
+import java.io.IOException;
 import java.util.List;
 
+import de.tudarmstadt.informatik.hostage.Handler;
+import de.tudarmstadt.informatik.hostage.protocol.cifs.PseudoCIFSDiskDriver;
 import de.tudarmstadt.informatik.hostage.wrapper.Packet;
 
-public class CIFS implements Protocol {
+public class CIFS implements Protocol, SessionListener, FileListener {
+    private Handler mHandler;
+    private SMBServer mSmbServer;
+
+    public void initialize(Handler mHandler) {
+        this.mHandler = mHandler;
+
+        DiskInterface disk = new PseudoCIFSDiskDriver(mHandler);
+        DiskDeviceContext context = null;
+        try {
+            context = (DiskDeviceContext) disk.createContext("theContext", new ConfigElement("",""));
+        } catch (DeviceContextException e) {
+            e.printStackTrace();
+        }
+
+        ServerConfiguration config = new ServerConfiguration("HostageConfig");
+        CIFSConfigSection cifsConfig = new CIFSConfigSection(config);
+        try {
+            cifsConfig.setHostAnnouncer(false);
+            cifsConfig.setNetBIOSSMB(true);
+            cifsConfig.setWin32NetBIOS(false);
+            cifsConfig.setAuthenticator(DefaultAuthenticator.class.getCanonicalName(), new ConfigElement("", ""), 0x10000000, true);
+            cifsConfig.setTcpipSMB(true);
+            cifsConfig.setNetBIOSDebug(true);
+            cifsConfig.setTcpipSMBPort(28582);
+            cifsConfig.setNameServerPort(28274);
+            cifsConfig.setDatagramPort(28275);
+            cifsConfig.setSessionPort(28276);
+            cifsConfig.setServerName("HAHAHA");
+            cifsConfig.setDomainName("Workgroup");
+
+            FilesystemsConfigSection filesystems = new FilesystemsConfigSection(config);
+            DiskSharedDevice dev = new DiskSharedDevice("VirtualDisk", disk, context);
+            filesystems.addShare(dev);
+
+            GlobalConfigSection global = new GlobalConfigSection(config);
+
+            CoreServerConfigSection core = new CoreServerConfigSection(config);
+            core.setThreadPool(2, 8);
+
+            DebugConfigSection debugConfigSection = new DebugConfigSection(config);
+            debugConfigSection.setDebug(ConsoleDebug.class.getCanonicalName(), new ConfigElement("append", ""));
+
+            this.mSmbServer = new SMBServer(config);
+            this.mSmbServer.addSessionListener(this);
+            this.mSmbServer.addFileListener(this);
+            this.mSmbServer.startServer();
+
+        } catch (InvalidConfigurationException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
     @Override
     public int getPort() {
-        return 0;
+        return 1025;
     }
 
     @Override
@@ -30,4 +110,33 @@ public class CIFS implements Protocol {
     public TALK_FIRST whoTalksFirst() {
         return null;
     }
+
+    public String toString(){
+        return "CIFS";
+    }
+
+    @Override
+    public void sessionClosed(SrvSession srvSession) {
+        System.out.println("---------------------- [CIFS] Session closed!");
+    }
+
+    @Override
+    public void sessionCreated(SrvSession srvSession) {
+        System.out.println("---------------------- [CIFS] Session created!");
+    }
+
+    @Override
+    public void sessionLoggedOn(SrvSession srvSession) {
+        System.out.println("---------------------- [CIFS] Session LoggedOn!");
+    }
+
+    @Override
+    public void fileClosed(SrvSession srvSession, NetworkFile networkFile) {
+        System.out.println("---------------------- [CIFS] File closed!");
+    }
+
+    @Override
+    public void fileOpened(SrvSession srvSession, NetworkFile networkFile) {
+        System.out.println("---------------------- [CIFS] File closed!");
+    }
 }

+ 126 - 0
src/de/tudarmstadt/informatik/hostage/protocol/cifs/PseudoCIFSDiskDriver.java

@@ -0,0 +1,126 @@
+package de.tudarmstadt.informatik.hostage.protocol.cifs;
+
+import org.alfresco.config.ConfigElement;
+import org.alfresco.jlan.server.SrvSession;
+import org.alfresco.jlan.server.core.DeviceContext;
+import org.alfresco.jlan.server.core.DeviceContextException;
+import org.alfresco.jlan.server.filesys.DiskInterface;
+import org.alfresco.jlan.server.filesys.FileInfo;
+import org.alfresco.jlan.server.filesys.FileOpenParams;
+import org.alfresco.jlan.server.filesys.NetworkFile;
+import org.alfresco.jlan.server.filesys.SearchContext;
+import org.alfresco.jlan.server.filesys.TreeConnection;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import de.tudarmstadt.informatik.hostage.Handler;
+
+public class PseudoCIFSDiskDriver implements DiskInterface {
+
+    private final Handler mHandler;
+
+    public PseudoCIFSDiskDriver(Handler mHandler){
+        this.mHandler = mHandler;
+    }
+
+    @Override
+    public void closeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
+
+    }
+
+    @Override
+    public void createDirectory(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
+
+    }
+
+    @Override
+    public NetworkFile createFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
+        return null;
+    }
+
+    @Override
+    public void deleteDirectory(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException {
+
+    }
+
+    @Override
+    public void deleteFile(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException {
+
+    }
+
+    @Override
+    public int fileExists(SrvSession srvSession, TreeConnection treeConnection, String s) {
+        return 0;
+    }
+
+    @Override
+    public void flushFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile) throws IOException {
+
+    }
+
+    @Override
+    public FileInfo getFileInformation(SrvSession srvSession, TreeConnection treeConnection, String s) throws IOException {
+        return null;
+    }
+
+    @Override
+    public boolean isReadOnly(SrvSession srvSession, DeviceContext deviceContext) throws IOException {
+        return false;
+    }
+
+    @Override
+    public NetworkFile openFile(SrvSession srvSession, TreeConnection treeConnection, FileOpenParams fileOpenParams) throws IOException {
+        return null;
+    }
+
+    @Override
+    public int readFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException {
+        return 0;
+    }
+
+    @Override
+    public void renameFile(SrvSession srvSession, TreeConnection treeConnection, String s, String s2) throws IOException {
+
+    }
+
+    @Override
+    public long seekFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l, int i) throws IOException {
+        return 0;
+    }
+
+    @Override
+    public void setFileInformation(SrvSession srvSession, TreeConnection treeConnection, String s, FileInfo fileInfo) throws IOException {
+
+    }
+
+    @Override
+    public SearchContext startSearch(SrvSession srvSession, TreeConnection treeConnection, String s, int i) throws FileNotFoundException {
+        return null;
+    }
+
+    @Override
+    public void truncateFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, long l) throws IOException {
+
+    }
+
+    @Override
+    public int writeFile(SrvSession srvSession, TreeConnection treeConnection, NetworkFile networkFile, byte[] bytes, int i, int i2, long l) throws IOException {
+        return 0;
+    }
+
+    @Override
+    public DeviceContext createContext(String s, ConfigElement configElement) throws DeviceContextException {
+        return null;
+    }
+
+    @Override
+    public void treeOpened(SrvSession srvSession, TreeConnection treeConnection) {
+
+    }
+
+    @Override
+    public void treeClosed(SrvSession srvSession, TreeConnection treeConnection) {
+
+    }
+}