finde keine moeglichkeit, um einen buffer overflow herbeizufuehren
-
moin
ich setz mich grad mit buffer overflows auseinander und wollte dazu von der page von zotteljedi das beispiel probieren, wobei ein minimaler http server gegeben ist, der eine schwachstelle enthaelt, also nen buffer overflow. die comments sagen sogar ziemlich deutlich WO, aber ich krieg einfach nicht mal nen ansatz hin
erstmal habe ich recht lange den kurzen code studiert, um zu kapieren was ne gueltige HTTP request ist, da ich das rfc nicht kenne und sonst mit http nicht soviel zu tun hatte
ich fand dann heraus das zb
GET /peter.html HTTP/
ne gueltige request waere. nun ja, aber ich finde bei gottesnamen einfach keine moeglichkeit, irgendwo nen buffer overflow herbeizufuehren, hoffe ihr koennt mir mal was helfen
http://www.zotteljedi.de/doc/stacksmashing/faulty_httpd_uncommented.c
das is der code des kleinen httpddanke!
p.s. also es geht nicht dadrumm nen exploit zu schreiben, oder wie man mit nem debugger umgeht oder shellcode schreibt etc also das weiss ich mittlerweile alles so ungefaehr, es geht also wirklich nur erstmal dadrum, das ich keine stelle finde, wo man ueberhaupt einen buffer overflow machen koennte.
-
Also die Zeile:
strcpy(fullpath_buffer, wwwdir_buffer);
Ist schonmal auffällig. "fullpath_buffer" wurde mit 1024 angegeben, und "wwwdir_buffer" mit 4096. Da könnte man mal was versuchen...
Edit: Buffer Overflows findet man meistens an Stellen, wo mit Strings hantiert oder Speicher alloziert wird.
-
yo, aber das bringt uns ja nix, da wwwdir_buffer ja nur die expand path form von WWW_DIR ist, da koennen wir ja nix drann werkeln: interessanter ist doch das dadrunter oder?
/* concatentate the requested path WITHOUT CHECKING THE LENGTH! */
strcat(fullpath_buffer, path);also der comment laesst dadrauf schliessen, das dies der punkt ist, da der uebergebene path einfach nach fullpath_buffer kopiert wird. und den path kann man ja selber als client bestimmen... ABER
BUF_SIZ ist 1024, und es werden maximal 1024 bytes eingelesen, wir koennen also keinen path angeben der groesser als 1024 ist. aber wir muessen ja mehr als 1024 bytes schicken, damit path groesser als fullbath_buffer wird, damit dieser ueberlaeuft, aber das is doch nicht moeglich. aber es werden sogar im loesungsexploit weniger als 1024 bytes geschickt oO ich kapier das net. oder...
achso moment, in fullbath_buffer steht ja schon was drinnen! der path wird ja nur angehaengt. in dem beispielt steht da schon
/home/felix/www_files/
drinnen, oder?
ist es das? reicht das ueberhaupt aus? ich mein das sind ja nur wenige bytes, die der buffer dann ueberlaeuft, das kanns doch net sein oder?!
-
klar mann, der füllt die erste 5 byte mit GET \, die nächsten 1006 mit NOP´s
und dann hängt er den shellcode dran, der die 1024 byte grenze überschreitet
und sich dann in den stack bohrt. dann verbiegt er den IP(Insturction Pointer)
und landet höchstwahrscheinlich bei den NOP´s. Da kommt dann auch irgendwann
der shellcode zur Ausführung.So sehe ich jedenfalls die Sache
b4sh0r
-
Hallo,
vielleicht hilft dir dieser Text weiter:
http://www.insecure.org/stf/smashstack.txtIst leider schon etwas älter, und ich glaub mit den aktuellen Kompilern gar nicht mehr so einfach herbeizuführen, aber verstehen tut mans trotzdem.