• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Überprüfen ob ein Spieler von einem Bungeecord Server kommt

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Hi,

mir ist eine "Sicherheitslücke" bei meinem Server aufgefallen, die wahrscheinlich viele Cracked-Server haben werden:
man kann ja über einen Bungeecord Server auf andere Server joinen. Falls der Hoster des Bungeecords ein Plugin hat, welches Kommandos loggt, kann er ja die Passwörter beim Authmelogin sehen.
Wie kann ich jetzt in einem AsyncPlayerPreLoginEvent Spieler, die von einem Bungeecord Server oder ähnliches kommen sperren?

Bisher bin ich nur hier :oops:
Code:
  public void onJoin(AsyncPlayerPreLoginEvent e)
  {
    Player p = Bukkit.getPlayer(e.getName());
    if (??){
     e.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_FULL, "Benutze die IP: ip");
    }
  }

Danke schon mal im voraus!

Mit freundlichen Grüßen
xXSchrandXx
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Was hab ich hier falsch? Es passiert nichts...
Code:
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener;

import com.google.common.io.ByteArrayDataOutput;

public class Main extends JavaPlugin implements PluginMessageListener {
  @Override
  public void onEnable() {
    this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
    this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
  }

  @Override
  public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    if (!channel.equals("BungeeCord")) {
      return;
    }
  }
  @EventHandler
  public void onJoin (PlayerJoinEvent ev) {
    ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
    DataOutputStream out = new DataOutputStream(byteArray);
    try {
      out.writeUTF("KickPlayer");
      out.writeUTF(ev.getPlayer().getName());
      out.writeUTF("Benutze die IP: " + getServer().getIp() + ":" + getServer().getPort());
    } catch (IOException e) {}
    ev.getPlayer().sendPluginMessage(this, "BungeeCord", ((ByteArrayDataOutput) out).toByteArray());
    getServer().getLogger().info(ev.getPlayer().getName());
  }
}
Nicht einmal die Info kommt in der Konsole.
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Der Listener wird einfach nie gecalled.
danke:D
jetzt kommt aber dieser Error:
Code:
org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.PlayerList.onPlayerJoin(PlayerList.java:342) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.PlayerList.a(PlayerList.java:162) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.LoginListener.b(LoginListener.java:159) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.LoginListener.e(LoginListener.java:57) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:842) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.12.jar:git-Spigot-7228328-af1c013]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
Caused by: java.lang.ClassCastException: java.io.DataOutputStream cannot be cast to com.google.common.io.ByteArrayDataOutput
    at Main.onJoin(Main.java:39) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013]
    ... 14 more
in Zeile 39 wird die Pluginmessage gesendet:
Code:
ev.getPlayer().sendPluginMessage(this, "BungeeCord", ((ByteArrayDataOutput) out).toByteArray());
 
Zuletzt bearbeitet:

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Das kommt halt davon wenn man nur Sourcecode aus dem Internet kopiert und nicht versteht was die einzelnen Sprachkonstrukte bedeuten.

Die Fehlermeldung ist eindeutig. Der Cast ist auch einfach sinnfrei (Logik ist eine Grundvorraussetzung für das Programmieren).

Siehe auch die entsprechende Javadoc.
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Kannst du mir denn sagen, was ich hier falsch habe?
Code:
      try
      {
        Messenger messenger = Bukkit.getMessenger();
        if (!messenger.isOutgoingChannelRegistered(this, "BungeeCord")) {
          messenger.registerOutgoingPluginChannel(this, "BungeeCord");
        }
        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
        DataOutputStream out = new DataOutputStream(byteArray);
        out.writeUTF("KickPlayer");
        out.writeUTF(ev.getPlayer().getName());
        out.writeUTF("Benutze die IP: IP");
       
        ev.getPlayer().sendPluginMessage(this, "BungeeCord", byteArray.toByteArray());
      }
      catch (Exception ex)
      {
        ex.printStackTrace();
        getServer().getLogger().warning("Could not handle BungeeCord command from " + ev.getPlayer().getName()+ ".");
       
        return;
      }
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Kann mir jemand erklären, was eigentlich das Problem ist, das hier gelöst werden soll? Vielleicht ohne ein langes Clickbait Video mit wenig Inhalt und ohne richtige Erklärung? Dass man einen eigenen Bungeecord vorschalten kann und diesen mit fremden Servern verbinden ist nichts neues, das funktioniert mittels iptables sogar gänzlich ohne Bungeecord. Hab ich das Problem falsch verstanden? Welche Gefahr soll hier entstehen?

Die Herrausforderung für so einen Man in the Middle Angriff besteht ja daran es irgendwie erstmal in diese Mitte zu schaffen, was ohne DNS Angriffe oder direkten Zugriff zum Netzwerk unmöglich ist.

Working as intended
 
Zuletzt bearbeitet:

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Die Herrausforderung für so einen Man in the Middle Angriff besteht ja daran es irgendwie erstmal in diese Mitte zu schaffen, was ohne DNS Angriffe oder direkten Zugriff zum Netzwerk unmöglich ist.
Das Video verwendet Social Engineering um das "Opfer" auf einen Proxy weiterzuleiten. Der OP würde dies gerne verhindern. Jenes ist aber eher ein Indiz dafür, dass informative, aufklärende Maßnahmen eingeleitet werden sollten. Präventive Maßnahmen gibt es hier ja - wie bereits dargestellt - nicht.
 

xXSchrandXx

Schafhirte
Registriert
16 September 2012
Beiträge
126
Diamanten
302
Minecraft
xXSchrandXx
Vorrübergehende Lösung wäre auch, dass der Spieler den Server erst in einem ServerListPingEvent zu einer ArrayList hinzugefügt werden müssen um auf den Server zu joinen. Jedes mal wenn der Spieler dann erfolgreich gejoint ist, wird er aus dieser Liste entfernt. (Klappt natürlich nicht, wenn er zuerst den Server an Pingt und dann über den BungeeCord Joint.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Vorrübergehende Lösung wäre auch, dass der Spieler den Server erst in einem ServerListPingEvent zu einer ArrayList hinzugefügt werden müssen um auf den Server zu joinen. Jedes mal wenn der Spieler dann erfolgreich gejoint ist, wird er aus dieser Liste entfernt. (Klappt natürlich nicht, wenn er zuerst den Server an Pingt und dann über den BungeeCord Joint.
Also wenn wir mal davon ausgehen, dass jemand schon einen modifizierten Bungeecord benutzt, glaubst du dann nicht, dass er auch einfach vor jedem Join kurz einen Ping schicken kann?

Das Problem, dass du hier lösen willst existiert nicht, daher wirst du auch keine zufriedenstellende Lösung finden. Wenn ich jemanden dazu bekomm sich mit einem falschen Server zu verbinden, dann bekomme ich ihn auch dazu, dass er mir sein Passwort auf anderem Wege mitteilt. Da gibts genug Tricks um leichtgläubige Opfer auszubeuten.
 
Oben