Microsoft IIS поддерживает функцию SSI (Server Side Include). IIS используют ssinc.dll как SSI интерпретатор. По умолчанию ssinc.dll установлен в IIS как интерпретатор файлов с расширениями .stm, .shtm и .shtml.
SSI поддерживает директиву "#include", главным образом,
в такой форме:
<!--#include file="Filename"-->
При обработке "#include", ssinc.dll проверяет имя каталога, в котором находится .shtml файл, затем добавляет в конец этот файл и формирует новый путь.
При получении включенного имени файла от
test.shtml ssinc.dll проверяет длину этого файла. В случае, если она больше чем 0x801 байт, ssinc.dll, обрезает его до 0x801 байт и добавляет 'в конце '\0'. Таким образом, включающееся имя файла (включая '\0 ') будет не больше чем 0x802 (2550) байт. Но, как оказалось, ssinc.dll не проверяет длину новой строки, содержащей путь, который добавляется в конец имени текущего каталога. Таким образом, можно вызвать переполнение буфера. Так как ssinc.dll выполняется с системными привилегиями, то у удаленного нападающего появляется возможность выполнить произвольный код с системными правами.
Чтобы эксплуатировать уязвимость, нападающий нуждается в выполнении двух условий:
1. Возможность создать файл или каталог в web директории.
2. Способность обращаться к созданному файлу через web службу.
Exploit:
1. Создайте файл "test.shtml" со следующим содержанием:
<!--#include file="AAAA[...]AA"-->
Количество 'A' должно быть больше, чем 2049.
2. Создайте каталог "a" под каталогом Web. Копируйте "test.shtml" в "a" каталог.
3. Запросите "test.shtml" через web-браузер: http: //
webhost/a/test.shtml
4. IIS возвращает пустую страницу, которая указывает, что произошло переполнение.
Для устранения уязвимости скачайте патч:
Microsoft IIS 4.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=32061
Microsoft IIS 5.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=32011