|
@@ -3,6 +3,10 @@ package de.tudarmstadt.informatik.hostage.protocol;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
|
|
+import android.content.Context;
|
|
|
|
+
|
|
|
|
+import de.tudarmstadt.informatik.hostage.HoneyService;
|
|
|
|
+import de.tudarmstadt.informatik.hostage.R;
|
|
import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
|
|
import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
|
|
import de.tudarmstadt.informatik.hostage.wrapper.Packet;
|
|
import de.tudarmstadt.informatik.hostage.wrapper.Packet;
|
|
|
|
|
|
@@ -33,11 +37,18 @@ public class TELNET implements Protocol {
|
|
/** name of the server */
|
|
/** name of the server */
|
|
private static String serverName = HelperUtils.getRandomString(16, false);
|
|
private static String serverName = HelperUtils.getRandomString(16, false);
|
|
|
|
|
|
|
|
+ private static String serverVersion = initServerVersion();
|
|
|
|
+
|
|
|
|
+ private static String login = initLogin();
|
|
|
|
+
|
|
|
|
+ private static String serverBanner = initServerBanner();
|
|
|
|
+
|
|
/** command line prefix */
|
|
/** command line prefix */
|
|
private static byte[] sessionToken = null;
|
|
private static byte[] sessionToken = null;
|
|
|
|
|
|
/** options requested by the server */
|
|
/** options requested by the server */
|
|
- private static final byte[] optionRequest = { (byte) 0xff, (byte) 0xfb,
|
|
|
|
|
|
+ private static final byte[] optionRequest = {
|
|
|
|
+ (byte) 0xff, (byte) 0xfb,
|
|
0x03, // will suppress go ahead
|
|
0x03, // will suppress go ahead
|
|
(byte) 0xff, (byte) 0xfb, 0x01 // will echo
|
|
(byte) 0xff, (byte) 0xfb, 0x01 // will echo
|
|
};
|
|
};
|
|
@@ -83,7 +94,7 @@ public class TELNET implements Protocol {
|
|
case OPEN:
|
|
case OPEN:
|
|
if (request != null) {
|
|
if (request != null) {
|
|
responsePackets.add(new Packet(getOptionResponse(request)));
|
|
responsePackets.add(new Packet(getOptionResponse(request)));
|
|
- responsePackets.add(new Packet(serverName + " login: "));
|
|
|
|
|
|
+ responsePackets.add(new Packet(login + "login: "));
|
|
state = STATE.LOGIN;
|
|
state = STATE.LOGIN;
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
@@ -98,12 +109,16 @@ public class TELNET implements Protocol {
|
|
responsePackets.add(new Packet(buffer));
|
|
responsePackets.add(new Packet(buffer));
|
|
}
|
|
}
|
|
responsePackets.add(new Packet("\r\n"));
|
|
responsePackets.add(new Packet("\r\n"));
|
|
- responsePackets.add(new Packet("Password: "));
|
|
|
|
|
|
+ responsePackets.add(new Packet("password: "));
|
|
state = STATE.AUTHENTICATE;
|
|
state = STATE.AUTHENTICATE;
|
|
- sessionToken = HelperUtils.concat(sessionPrefix, user,
|
|
|
|
- "@".getBytes(), serverName.getBytes(), sessionMiddle,
|
|
|
|
- user, "@".getBytes(), serverName.getBytes(),
|
|
|
|
- sessionSuffix);
|
|
|
|
|
|
+ if (serverVersion.contains("Windows")) {
|
|
|
|
+ sessionToken = HelperUtils.concat("C:\\Users\\".getBytes(), user);
|
|
|
|
+ } else {
|
|
|
|
+ sessionToken = HelperUtils.concat(sessionPrefix, user,
|
|
|
|
+ "@".getBytes(), serverName.getBytes(), sessionMiddle,
|
|
|
|
+ user, "@".getBytes(), serverName.getBytes(),
|
|
|
|
+ sessionSuffix);
|
|
|
|
+ }
|
|
break;
|
|
break;
|
|
} else if (checkForByte(request, (byte) 0x7f) && user != null
|
|
} else if (checkForByte(request, (byte) 0x7f) && user != null
|
|
&& user.length != 0) {
|
|
&& user.length != 0) {
|
|
@@ -124,7 +139,7 @@ public class TELNET implements Protocol {
|
|
if (request == null)
|
|
if (request == null)
|
|
break;
|
|
break;
|
|
else if (checkForByte(request, (byte) 0x0d)) {
|
|
else if (checkForByte(request, (byte) 0x0d)) {
|
|
- responsePackets.add(new Packet("\r\n"));
|
|
|
|
|
|
+ responsePackets.add(new Packet("\r\n"+serverBanner));
|
|
responsePackets.add(new Packet(sessionToken));
|
|
responsePackets.add(new Packet(sessionToken));
|
|
state = STATE.LOGGED_IN;
|
|
state = STATE.LOGGED_IN;
|
|
} else if (checkForByte(request, (byte) 0x7f)) {
|
|
} else if (checkForByte(request, (byte) 0x7f)) {
|
|
@@ -187,6 +202,32 @@ public class TELNET implements Protocol {
|
|
public TALK_FIRST whoTalksFirst() {
|
|
public TALK_FIRST whoTalksFirst() {
|
|
return TALK_FIRST.SERVER;
|
|
return TALK_FIRST.SERVER;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private static String initServerVersion() {
|
|
|
|
+ String sharedPreferencePath = HoneyService.getContext().getString(
|
|
|
|
+ R.string.shared_preference_path);
|
|
|
|
+ String profile = HoneyService
|
|
|
|
+ .getContext()
|
|
|
|
+ .getSharedPreferences(sharedPreferencePath,
|
|
|
|
+ Context.MODE_PRIVATE).getString("os", "");
|
|
|
|
+ return profile;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static String initServerBanner() {
|
|
|
|
+ if (serverVersion.contains("Windows")) {
|
|
|
|
+ return "\r\n*===============================================================\r\n"
|
|
|
|
+ + "Microsoft Telnet Server.\r\n"
|
|
|
|
+ + "*===============================================================\r\n";
|
|
|
|
+ }
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static String initLogin() {
|
|
|
|
+ if (serverVersion.contains("Windows")) {
|
|
|
|
+ return "Welcome to Microsoft Telnet Service \r\n\r\n";
|
|
|
|
+ }
|
|
|
|
+ return "Debian GNU/Linux 7.0\r\n";
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* Checks a byte array for occurence of one byte.
|
|
* Checks a byte array for occurence of one byte.
|