[OT] Fwd: Advisory 15/2004: Cyrus IMAP Server multiple remote vulnerabilities
Paweł Sakowski
saq w pld-linux.org
Śro, 24 Lis 2004, 19:51:39 CET
On Wed, 2004-11-24 at 06:45 +0100, Cezary Krzyżanowski wrote:
> Lukasz Marciniak wrote:
>
> No i tu się zawsze zastanawiałem, jak to się robi :D No niby "attacker"
> może wykonać ten kod zdalnie, ale powiedzcie mi, jak do cholery
> kontrolować zawartość stosu na zdalnej maszynie, którą mamy atakować? To
> by chyba wymagało conajmniej konta tam, a jak sam ten artykuł pisze,
> cyrusa wrzuca się w miejsca, gdzie nie trza tworzyć wszystkim looserowm
> kont shellowych.
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
--
Paweł Sakowski <saq w pld-linux.org>
PLD Linux Distribution
Więcej informacji o liście dyskusyjnej pld-devel-pl