[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