To idzie jakoś tak:
#include <string.h> void fun(const char *str) { char buf[5]; strcpy(buf, str); } int main() { fun("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); return 0; }
- "A*" nadpisze ci adres powrotu z fun - dostaniesz SIGSEGV bo funkcja zechce wrócić pod 0x41414141 - pisząc stringa "A*" trochę sprytniej można zapodać adres powrotu do dowolnego kodu w przestrzeni adresowej programu - ten kod się wykona po powrocie z fun - w szczególności w tym samym stringu możesz zawrzeć dowolny własny kod - dowolny twój kod się wykona - a teraz wyobraź sobie, że argument fun pochodzi z sieci i w żaden sposób nie sprawdzono prawdziwości założenia, że ma on być krótszy niż 5-1 oktetów
No trochę za duż tych A i rzeczywiście wyskakuje Naruszenie ochrony pamięci, ale jak jest tylko o parę za dużo, to rzeczywiście można nadpisać adres powrotu i wsyłać go dzieś w kosmos...hm....no to już tylko krok do zhackowania microsoftu :P Kolejny dowód na to, że hackerstwo to dłubanie w bitach :P
Pozdrawiam [EMAIL PROTECTED]
_______________________________________________ pld-devel-pl mailing list [EMAIL PROTECTED] http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl
