Суровый байт-одиночка 1dt.w0lf Хакер, номер #083, стр. 083-064-5 Злосчастное переполнение возникало, когда длина пути, к которому осуществляется обращение, равнялась MAXPATHLEN+1 символам. Переполнение отведенного буфера позволяло перезаписать информацию в стеке. Уязвимость - результат некорректного использования переменой rootd при вычислении длины конкатенированной строки: /* * Join the two strings together, ensuring that the right thing * happens if the last component is empty, or the dirname is root. */ if (resolved[0] == '/' && resolved[1] == '\0') rootd = 1; else rootd = 0; if (*wbuf) { if (strlen(resolved) + strlen(wbuf) + rootd + 1 > MAXPATHLEN) { errno = ENAMETOOLONG; goto err1; } if (rootd == 0) (void) strcat(resolved, "/"); (void) strcat(resolved, wbuf); } В результате, при помощи любой FTP-команды возможно переполнить буфер и перехватить управление программой. На некоторых системах использовать этот баг невозможно. Такой облом возникает в случае, когда размер отведенного под строку буфера, больше, чем MAXPATHLEN. Это верно для wu-ftpd, собранных на версиях линуксового ядра, в которых длина PATH_MAX и MAXPATHLEN жестко зафиксирована на 4095 байтах - например, 2.2.x и ранние 2.4.x. Поэтому использовать сплоит для этой дыры можно только против ftpd-демонов, собранных на 2.0.x или более поздних 2.4.x. INFO Несмотря на кажущуюся незначительность этой уязвимости, от нее пострадали весьма уважаемые проекты: mod_ssl и wu-ftpd. Как ты уже понял, даже перезаписав один байт в стеке, возможно захватить управление программой. CD На нашем диске ты найдешь отладчик gdb, уязвимую версию wu-ftpd для экспериментов, а также исходник сплоита для этого демона. Экспериментируй на своем компьютере! WWW Скачать сплоит для wu-ftpd можно здесь: www.security.nnov.ru/files/0x82-wu262.c |