Browse Source

Fixed some small bugs in telnet

qam 10 years ago
parent
commit
c68c7ec9f3

+ 6 - 4
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -201,15 +201,17 @@ public final class HelperUtils {
 	public static byte[] concat(byte[]... bytes) {
 		int newSize = 0;
 		for (byte[] b : bytes)
-			newSize += b.length;
+			if(b != null) newSize += b.length;
 		byte[] dst = new byte[newSize];
 
 		int currentPos = 0;
 		int newPos;
 		for (byte[] b : bytes) {
-			newPos = b.length;
-			System.arraycopy(b, 0, dst, currentPos, newPos);
-			currentPos += newPos;
+			if(b != null) {
+				newPos = b.length;
+				System.arraycopy(b, 0, dst, currentPos, newPos);
+				currentPos += newPos;
+			}
 		}
 		return dst;
 	}

+ 36 - 12
src/de/tudarmstadt/informatik/hostage/protocol/TELNET.java

@@ -46,11 +46,14 @@ public final class TELNET implements Protocol<ByteArray> {
 
 	@Override
 	public List<ByteArray> processMessage(ByteArray message) {
-		if(message != null)
-			lastMessage = message.get();
 		byte[] request = null;
-		if(message != null) request = message.get();
+		if(message != null) {
+			lastMessage = message.get();
+			request = message.get();
+			System.out.println(HelperUtils.byteToStr(lastMessage));
+		}
 		List<ByteArray> response = new ArrayList<ByteArray>();
+		
 		switch (state) {
 		case NONE:
 			response.add(new ByteArray(optionRequest));
@@ -66,18 +69,25 @@ public final class TELNET implements Protocol<ByteArray> {
 			break;
 		case LOGIN:
 			if(request == null) break;
-			else if(request[0] == 0x0d) {
+			else if(checkForByte(request, (byte) 0x0d)) {
+				if(request.length > 2) {
+					byte[] buffer = new byte[request.length - 2]; 
+					System.arraycopy(request, 0, buffer, 0, request.length - 2); 
+					user = HelperUtils.concat(user, buffer);
+					response.add(new ByteArray(buffer));
+				}
 				response.add(new ByteArray("\r\n"));
 				response.add(new ByteArray("Password: "));
 				state = STATE.AUTHENTICATE;
 				sessionToken = HelperUtils.concat(sessionPrefix, user, "@".getBytes(), server.getBytes(), sessionMiddle, user, "@".getBytes(), server.getBytes(), sessionSuffix);
 				break;
-			} else if (request[0] == 0x7f) {
+			} else if (checkForByte(request, (byte) 0x7f) && user != null && user.length != 0) {
 				byte[] tmp = new byte[user.length - 1];
 				System.arraycopy(user, 0, tmp, 0, user.length - 1);
 				user = tmp;
 				response.add(new ByteArray("\b \b"));
-			} else if (request[0] != (byte) 0xff){
+				break;
+			} else if (!checkForByte(request, (byte) 0xff)){
 				if(user == null)
 					user = request;
 				else
@@ -87,17 +97,23 @@ public final class TELNET implements Protocol<ByteArray> {
 			break;
 		case AUTHENTICATE:
 			if(request == null) break;
-			else if(request[0] == 0x0d) {
-				response.add(new ByteArray("\r\nLast Login: \r\nLinux" + server + " 3.6.11+\r\n"));
+			else if(checkForByte(request, (byte) 0x0d)) {
+				response.add(new ByteArray("\r\nLinux" + server + " 3.6.11+\r\n"));
 				response.add(new ByteArray(sessionToken));
 				state = STATE.LOGGED_IN;
-			} else if (request[0] == 0x7f) {
+			} else if (checkForByte(request, (byte) 0x7f)) {
 				response.add(new ByteArray("\b \b"));
 			}			
 			break;
 		case LOGGED_IN:
 			if(request == null) break;
-			else if(request[0] == 0x0d) {
+			else if(checkForByte(request, (byte) 0x0d)) {
+				if(request.length > 2) {
+					byte[] buffer = new byte[request.length - 2]; 
+					System.arraycopy(request, 0, buffer, 0, request.length - 2); 
+					command = HelperUtils.concat(command, buffer);
+					response.add(new ByteArray(buffer));
+				}
 				if(command == null) {
 					response.add(new ByteArray("\r\n"));
 					response.add(new ByteArray(sessionToken));
@@ -111,12 +127,13 @@ public final class TELNET implements Protocol<ByteArray> {
 					response.add(new ByteArray(sessionToken));
 					command = null;
 				}
-			} else if (request[0] == 0x7f) {
+			} else if (checkForByte(request, (byte) 0x7f) && command != null && command.length != 0) {
 				byte[] tmp = new byte[command.length - 1];
 				System.arraycopy(command, 0, tmp, 0, command.length - 1);
 				command = tmp;
 				response.add(new ByteArray("\b \b"));
-			} else if (request[0] != (byte) 0xff){
+				break;
+			} else if (!checkForByte(request, (byte) 0xff)){
 				if(command == null)
 					command = request;
 				else
@@ -150,6 +167,13 @@ public final class TELNET implements Protocol<ByteArray> {
 	public Class<ByteArray> getType() {
 		return ByteArray.class;
 	}
+	
+	private boolean checkForByte(byte[] bytes, byte b) {
+		for(byte oneByte : bytes) {
+			if(oneByte == b) return true;
+		}
+		return false;
+	}
 
 	/**
 	 * Determines which options that are requested by the client will be done and which not

+ 6 - 1
src/de/tudarmstadt/informatik/hostage/render/MySQLRenderer.java

@@ -1,5 +1,10 @@
 package de.tudarmstadt.informatik.hostage.render;
 
-public class MySQLRenderer {
+public class MySQLRenderer implements ProtocolRenderer {
+
+	@Override
+	public String render(String packet) {
+		return "";
+	}
 
 }

+ 22 - 2
src/de/tudarmstadt/informatik/hostage/render/SMBRenderer.java

@@ -7,8 +7,15 @@ public class SMBRenderer implements ProtocolRenderer {
 	@Override
 	public String render(String packet) {
 		byte[] bytes = HelperUtils.hexStringToByte(packet);
-		String command = "Command: " + getCommandString(bytes[8]);
-		return command;
+		byte cmd = bytes[8];
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("Command: ");
+		buffer.append(getCommandString(cmd));
+		buffer.append("\n");
+		buffer.append("Content: ");
+		buffer.append(getContent(cmd, bytes));
+		
+		return buffer.toString();
 	}
 		
 	private String getCommandString(byte cmd) {
@@ -89,5 +96,18 @@ public class SMBRenderer implements ProtocolRenderer {
 		default: return "Unknown Command";
 		}
 	}
+	
+	private String getContent(byte cmd, byte[] packet) {
+		switch(cmd) {
+		case 0x72: return get0x72content(packet);
+		default: return "";
+		}
+	}
+	
+	private String get0x72content(byte[] packet) {
+		byte[] content = new byte[packet.length-39];
+		System.arraycopy(packet, 39, content, 0, content.length);
+		return HelperUtils.byteToStr(content);
+	}
 
 }

+ 6 - 1
src/de/tudarmstadt/informatik/hostage/render/TELNETRenderer.java

@@ -1,5 +1,10 @@
 package de.tudarmstadt.informatik.hostage.render;
 
-public class TELNETRenderer {
+public class TELNETRenderer implements ProtocolRenderer {
+
+	@Override
+	public String render(String packet) {
+		return "";
+	}
 
 }

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/ui/ViewLogTable.java

@@ -25,6 +25,7 @@ public class ViewLogTable extends Activity{
 			log.append(record.toString(2));
 			log.append(ViewLogRenderer.render(record.getProtocol(), record.getPacket()));
 			log.append("\n");
+			log.append("\n");
 		}
 		
 		ScrollView scroll = new ScrollView(this);