Paweł Sakowski wrote:
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

Odpowiedź listem elektroniczym