Browse Source

-Fixed problem which showed received packets always as hex bytes in log
view

Wulf Pfeiffer 10 years ago
parent
commit
c594a34768

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/Handler.java

@@ -208,7 +208,7 @@ public class Handler implements Runnable {
 	 * @throws IOException
 	 */
 	protected void talkToClient(InputStream in, OutputStream out) throws IOException {
-		Reader reader = new Reader(in);
+		Reader reader = new Reader(in, protocol.toString());
 		Writer writer = new Writer(out);
 		Packet inputLine;
 		List<Packet> outputLine;

+ 4 - 2
src/de/tudarmstadt/informatik/hostage/nio/Reader.java

@@ -10,9 +10,11 @@ import de.tudarmstadt.informatik.hostage.wrapper.Packet;
 public class Reader {
 
 	BufferedInputStream in;
+	String protocol;
 
-	public Reader(InputStream in) {
+	public Reader(InputStream in, String protocol) {
 		this.in = new BufferedInputStream(in);
+		this.protocol = protocol;
 	}
 
 	public Packet read() throws IOException {
@@ -20,7 +22,7 @@ public class Reader {
 		do {
 			payload.write(in.read());
 		} while (in.available() > 0);
-		return new Packet(payload.toByteArray());
+		return new Packet(payload.toByteArray(), protocol);
 	}
 
 }

+ 11 - 11
src/de/tudarmstadt/informatik/hostage/protocol/FTP.java

@@ -61,10 +61,10 @@ public class FTP implements Protocol {
 		case NONE:
 			if (request == null) {
 				state = STATE.OPEN;
-				responsePackets.add(new Packet(REPLY_CODE_220 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_220 + "\r\n", toString()));
 			} else {
 				state = STATE.CLOSED;
-				responsePackets.add(new Packet(REPLY_CODE_421 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_421 + "\r\n", toString()));
 			}
 			break;
 		case OPEN:
@@ -72,37 +72,37 @@ public class FTP implements Protocol {
 				state = STATE.CLOSED;
 				return null;
 			} else if (request.equals("USER \r\n")) {
-				responsePackets.add(new Packet(REPLY_CODE_501 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_501 + "\r\n", toString()));
 			} else if (request.contains("USER")) {
 				state = STATE.USER;
-				responsePackets.add(new Packet(REPLY_CODE_331 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_331 + "\r\n", toString()));
 			} else {
-				responsePackets.add(new Packet(REPLY_CODE_332 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_332 + "\r\n", toString()));
 			}
 			break;
 		case USER:
 			if (request.equals("PASS \r\n")) {
 				state = STATE.OPEN;
-				responsePackets.add(new Packet(REPLY_CODE_501 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_501 + "\r\n", toString()));
 			} else if (request.contains("PASS")) {
 				state = STATE.LOGGED_IN;
-				responsePackets.add(new Packet(REPLY_CODE_230 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_230 + "\r\n", toString()));
 			} else {
 				state = STATE.CLOSED;
-				responsePackets.add(new Packet(REPLY_CODE_221 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_221 + "\r\n", toString()));
 			}
 			break;
 		case LOGGED_IN:
 			if (request != null && !request.contains("QUIT")) {
-				responsePackets.add(new Packet(REPLY_CODE_500 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_500 + "\r\n", toString()));
 			} else {
 				state = STATE.CLOSED;
-				responsePackets.add(new Packet(REPLY_CODE_221 + "\r\n"));
+				responsePackets.add(new Packet(REPLY_CODE_221 + "\r\n", toString()));
 			}
 			break;
 		default:
 			state = STATE.CLOSED;
-			responsePackets.add(new Packet(REPLY_CODE_421 + "\r\n"));
+			responsePackets.add(new Packet(REPLY_CODE_421 + "\r\n", toString()));
 		}
 		return responsePackets;
 	}

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/protocol/GHOST.java

@@ -84,7 +84,7 @@ public class GHOST implements Protocol {
 			}
 			byte[] mirrorResponse = new byte[availableBytes];
 			mirrorInputStream.read(mirrorResponse);
-			responsePackets.add(new Packet(mirrorResponse));
+			responsePackets.add(new Packet(mirrorResponse, toString()));
 		} catch (IOException e) {
 			e.printStackTrace();
 			responsePackets.add(requestPacket);

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/protocol/HTTP.java

@@ -216,6 +216,6 @@ public class HTTP implements Protocol {
 		}
 
 		return new Packet(httpVersion + " " + code + headerPrefix
-				+ document.length() + headerSuffix + document);
+				+ document.length() + headerSuffix + document, toString());
 	}
 }

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/protocol/MySQL.java

@@ -183,6 +183,6 @@ public class MySQL implements Protocol {
 
 		byte[] wrappedResponse = HelperUtils.concat(packetLength, packetNumber,
 				response);
-		return new Packet(wrappedResponse);
+		return new Packet(wrappedResponse, toString());
 	}
 }

+ 4 - 4
src/de/tudarmstadt/informatik/hostage/protocol/SIP.java

@@ -122,7 +122,7 @@ public class SIP implements Protocol {
 		sb.append("\r\n");
 		sb.append(sdpPayload);
 
-		return new Packet(sb.toString());
+		return new Packet(sb.toString(), toString());
 	}
 	
 	private Packet getOkResponse() {
@@ -131,7 +131,7 @@ public class SIP implements Protocol {
 		sb.append(header);
 		sb.append("Content-Length:   0\r\n");
 		
-		return new Packet(sb.toString());
+		return new Packet(sb.toString(), toString());
 	}
 	
 	private Packet getBadRequestResponse() {
@@ -140,7 +140,7 @@ public class SIP implements Protocol {
 		sb.append(header);
 		sb.append("Content-Length:   0\r\n");
 		
-		return new Packet(sb.toString());
+		return new Packet(sb.toString(), toString());
 	}
 	
 	private Packet getVersionNotSupportedResponse() {
@@ -149,7 +149,7 @@ public class SIP implements Protocol {
 		sb.append(header);
 		sb.append("Content-Length:   0\r\n");
 		
-		return new Packet(sb.toString());
+		return new Packet(sb.toString(), toString());
 	}
 
 }

+ 20 - 18
src/de/tudarmstadt/informatik/hostage/protocol/SMB.java

@@ -110,71 +110,73 @@ public class SMB implements Protocol {
 			lastMessage = requestPacket.getBytes();
 		smbPacket.prepareNextResponse(lastMessage);
 		byte smbCommand = smbPacket.getSmbCommand();
+		byte[] response;
 		List<Packet> responsePackets = new ArrayList<Packet>();
 
 		switch (state) {
 		case NONE:
 			if (smbCommand == SMB_COM_NEGOTIATE) {
 				state = STATE.CONNECTED;
-				responsePackets.add(new Packet(smbPacket.getNego()));
+				response = smbPacket.getNego();
 			} else {
 				state = STATE.DISCONNECTED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			}
 			break;
 		case CONNECTED:
 			if (smbCommand == SMB_COM_SESSION_SETUP_ANDX) {
-				responsePackets.add(new Packet(smbPacket.getSessSetup()));
+				response = smbPacket.getSessSetup();
 			} else if (smbCommand == SMB_COM_TREE_CONNECT_ANDX) {
 				state = STATE.AUTHENTICATED;
-				responsePackets.add(new Packet(smbPacket.getTreeCon()));
+				response = smbPacket.getTreeCon();
 			} else {
 				state = STATE.DISCONNECTED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			}
 			break;
 		case AUTHENTICATED:
 			if (smbCommand == SMB_COM_NT_CREATE_ANDX) {
 				state = STATE.LISTING;
-				responsePackets.add(new Packet(smbPacket.getNTCreate()));
+				response = smbPacket.getNTCreate();
 			} else if (smbCommand == SMB_COM_ECHO) {
-				responsePackets.add(new Packet(smbPacket.getEcho()));
+				response = smbPacket.getEcho();
 			} else if (smbCommand == SMB_COM_TRANSACTION2) {
-				responsePackets.add(new Packet(smbPacket.getTrans2()));
+				response = smbPacket.getTrans2();
 			} else if (smbCommand == SMB_COM_CLOSE) {
-				responsePackets.add(new Packet(smbPacket.getClose()));
+				response = smbPacket.getClose();
 			} else if (smbCommand == SMB_COM_TREE_DISCONNECT) {
 				state = STATE.CLOSED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			} else {
 				state = STATE.DISCONNECTED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			}
 			break;
 		case LISTING:
 			if (smbCommand == SMB_COM_TRANSACTION) {
-				responsePackets.add(new Packet(smbPacket.getTrans()));
+				response = smbPacket.getTrans();
 			} else if (smbCommand == SMB_COM_CLOSE) {
-				responsePackets.add(new Packet(smbPacket.getClose()));
+				response = smbPacket.getClose();
 			} else if (smbCommand == SMB_COM_TREE_DISCONNECT) {
 				state = STATE.CLOSED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			} else if (smbCommand == SMB_COM_NEGOTIATE) {
 				state = STATE.CONNECTED;
-				responsePackets.add(new Packet(smbPacket.getNego()));
+				response = smbPacket.getNego();
 			} else {
 				state = STATE.DISCONNECTED;
-				responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+				response = smbPacket.getTreeDisc();
 			}
 			break;
 		case DISCONNECTED:
 			state = STATE.CLOSED;
-			responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+			response = smbPacket.getTreeDisc();
 			break;
 		default:
 			state = STATE.CLOSED;
-			responsePackets.add(new Packet(smbPacket.getTreeDisc()));
+			response = smbPacket.getTreeDisc();
 		}
+		responsePackets.add(new Packet(response, toString()));
 		return responsePackets;
 	}
 

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

@@ -180,7 +180,7 @@ public class SSH implements Protocol {
 		switch (state) {
 		case NONE:
 			responsePackets
-					.add(new Packet(serverVersion + serverType + "\r\n"));
+					.add(new Packet(serverVersion + serverType + "\r\n", toString()));
 			state = STATE.SERVER_VERSION;
 			break;
 		case SERVER_VERSION:
@@ -643,6 +643,6 @@ public class SSH implements Protocol {
 		}
 		packetNumber++;
 
-		return new Packet(wrappedResponse);
+		return new Packet(wrappedResponse, toString());
 	}
 }

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

@@ -89,13 +89,13 @@ public class TELNET implements Protocol {
 
 		switch (state) {
 		case NONE:
-			responsePackets.add(new Packet(optionRequest));
+			responsePackets.add(new Packet(optionRequest, toString()));
 			state = STATE.OPEN;
 			break;
 		case OPEN:
 			if (request != null) {
-				responsePackets.add(new Packet(getOptionResponse(request)));
-				responsePackets.add(new Packet(login + "login: "));
+				responsePackets.add(new Packet(getOptionResponse(request), toString()));
+				responsePackets.add(new Packet(login + "login: ", toString()));
 				state = STATE.LOGIN;
 			}
 			break;
@@ -107,10 +107,10 @@ public class TELNET implements Protocol {
 					byte[] buffer = new byte[request.length - 2];
 					System.arraycopy(request, 0, buffer, 0, request.length - 2);
 					user = HelperUtils.concat(user, buffer);
-					responsePackets.add(new Packet(buffer));
+					responsePackets.add(new Packet(buffer, toString()));
 				}
-				responsePackets.add(new Packet("\r\n"));
-				responsePackets.add(new Packet("password: "));
+				responsePackets.add(new Packet("\r\n", toString()));
+				responsePackets.add(new Packet("password: ", toString()));
 				state = STATE.AUTHENTICATE;
 				if (serverVersion.contains("Windows")) {
 					sessionToken = HelperUtils.concat("C:\\Users\\".getBytes(), user, ">".getBytes());
@@ -126,7 +126,7 @@ public class TELNET implements Protocol {
 				byte[] tmp = new byte[user.length - 1];
 				System.arraycopy(user, 0, tmp, 0, user.length - 1);
 				user = tmp;
-				responsePackets.add(new Packet("\b \b"));
+				responsePackets.add(new Packet("\b \b", toString()));
 				break;
 			} else if (!checkForByte(request, (byte) 0xff)) {
 				if (user == null)
@@ -140,11 +140,11 @@ public class TELNET implements Protocol {
 			if (request == null)
 				break;
 			else if (checkForByte(request, (byte) 0x0d)) {
-				responsePackets.add(new Packet("\r\n"+serverBanner));
-				responsePackets.add(new Packet(sessionToken));
+				responsePackets.add(new Packet("\r\n"+serverBanner, toString()));
+				responsePackets.add(new Packet(sessionToken, toString()));
 				state = STATE.LOGGED_IN;
 			} else if (checkForByte(request, (byte) 0x7f)) {
-				responsePackets.add(new Packet("\b \b"));
+				responsePackets.add(new Packet("\b \b", toString()));
 			}
 			break;
 		case LOGGED_IN:
@@ -155,20 +155,20 @@ public class TELNET implements Protocol {
 					byte[] buffer = new byte[request.length - 2];
 					System.arraycopy(request, 0, buffer, 0, request.length - 2);
 					command = HelperUtils.concat(command, buffer);
-					responsePackets.add(new Packet(buffer));
+					responsePackets.add(new Packet(buffer, toString()));
 				}
 				if (command == null) {
-					responsePackets.add(new Packet("\r\n"));
-					responsePackets.add(new Packet(sessionToken));
+					responsePackets.add(new Packet("\r\n", toString()));
+					responsePackets.add(new Packet(sessionToken, toString()));
 				} else if (new String(command).contains("exit")) {
-					responsePackets.add(new Packet("\r\nlogout\r\n"));
+					responsePackets.add(new Packet("\r\nlogout\r\n", toString()));
 					state = STATE.CLOSED;
 				} else {
 					String bash = "\r\n-bash: " + new String(command)
 							+ ": command not found";
-					responsePackets.add(new Packet(bash));
-					responsePackets.add(new Packet("\r\n"));
-					responsePackets.add(new Packet(sessionToken));
+					responsePackets.add(new Packet(bash, toString()));
+					responsePackets.add(new Packet("\r\n", toString()));
+					responsePackets.add(new Packet(sessionToken, toString()));
 					command = null;
 				}
 			} else if (checkForByte(request, (byte) 0x7f) && command != null
@@ -176,7 +176,7 @@ public class TELNET implements Protocol {
 				byte[] tmp = new byte[command.length - 1];
 				System.arraycopy(command, 0, tmp, 0, command.length - 1);
 				command = tmp;
-				responsePackets.add(new Packet("\b \b"));
+				responsePackets.add(new Packet("\b \b", toString()));
 				break;
 			} else if (!checkForByte(request, (byte) 0xff)) {
 				if (command == null)
@@ -187,7 +187,7 @@ public class TELNET implements Protocol {
 			}
 			break;
 		default:
-			responsePackets.add(new Packet("\r\nlogout\r\n"));
+			responsePackets.add(new Packet("\r\nlogout\r\n", toString()));
 			state = STATE.CLOSED;
 			break;
 		}

+ 10 - 8
src/de/tudarmstadt/informatik/hostage/wrapper/Packet.java

@@ -11,7 +11,7 @@ import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
 public class Packet {
 
 	private byte[] payload;
-	private boolean createdWithBytes;
+	private String protocol;
 
 	/**
 	 * Constructs Packet from byte[]
@@ -19,9 +19,9 @@ public class Packet {
 	 * @param payload
 	 *            The byte[] payload
 	 */
-	public Packet(byte[] payload) {
+	public Packet(byte[] payload, String protocol) {
 		this.payload = payload;
-		createdWithBytes = true;
+		this.protocol = protocol;
 	}
 
 	/**
@@ -30,9 +30,9 @@ public class Packet {
 	 * @param payload
 	 *            The String payload
 	 */
-	public Packet(String payload) {
+	public Packet(String payload, String protocol) {
 		this.payload = payload.getBytes();
-		createdWithBytes = false;
+		this.protocol = protocol;
 	}
 
 	/**
@@ -56,10 +56,12 @@ public class Packet {
 	 */
 	@Override
 	public String toString() {
-		if (createdWithBytes) {
-			return HelperUtils.bytesToHexString(payload);
-		} else {
+		if (protocol.equals("FTP") 
+				|| protocol.equals("HTTP") 
+				|| protocol.equals("HTTPS")) {
 			return new String(payload);
+		} else {
+			return HelperUtils.bytesToHexString(payload);
 		}
 	}