IE: все по-старому Крис Касперски ака мыщъх Хакер, номер #090, стр. 090-055-2 Со вторым exploit'ом (http://lcamtuf.coredump.cx/iedie2-2.html) нам везет куда больше. На первый взгляд, все просто замечательно, и за исключением подозрительных пустых квадратов, IE отображает его вполне корректно, но вот при закрытии explorer'a IE падает с воплем о критической ошибке, и в лог доктора Ватсона добавляется новая запись (естественно, если он установлен just-in-time отладчиком по умолчанию). Обычно такое происходит при разрушении динамической памяти (так называемой кучей), но не будем спешить с выводами, а посмотрим, чем первый exploit отличается от второго. Исходный код exploit'a IEdie2-2.html <OBJECT></OBJECT><X>Bork</X> <OBJECT></OBJECT><X>Bork</X> <OBJECT></OBJECT><X>Bork</X> ... ... ... <STYLE></STYLE> <OBJECT> Bork <STYLE></STYLE> <OBJECT> Bork <STYLE></STYLE> <OBJECT> Bork ... ... ... Сначала идет множество корректно закрытых OBJECT'ов с неизвестным IE 5.0 тэгом <X> — источником тех пустых квадратов, а вот дальше повторяется код предыдущего exploit'а. Но во втором случае IE падает, а в первом — нет. Почему? Может, оказалось недостаточно уровня вложенности для падения? Открываем iedie2-1.html в FAR'е по <F4> и увеличиваем количество OBJECT'ов вдвое-втрое. Загружаем его в IE и... вуаля! Ловим исключение при закрытии приложения! Надеюсь, мысль ясна? Третий exploit (http://lcamtuf.coredump.cx/iedie2-3.html) заставляет IE глубоко задуматься, в результате чего работа эксплойта в аварийном режиме автоматически завершается. Вот оно — переполнение! Смотрим на код: Исходный код exploit'a IEdie2-3.html <OBJECT></OBJECT><X>Bork</X> <OBJECT></OBJECT><X>Bork</X> <OBJECT></OBJECT><X>Bork</X> <OBJECT></OBJECT><X>Bork</X> <STYLE></STYLE> ... ... ... <OBJECT type=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> Bork <STYLE></STYLE> <OBJECT type=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA> Bork Какой еще "<OBJECT></OBJECT><X>Bork</X>"?! Ведь мы же выяснили, что IE обрабатывает его вполне корректно. Открываем файл по <F4> и отрезаем весь текст вплоть до строки "<STYLE></STYLE>"! Загружаем exploit в IE и… вновь та же задумчивость, заканчивающаяся исключением. Значит, "<OBJECT></OBJECT><X>Bork</X>" тут совсем ни при чем, и реальное переполнение происходит в "<OBJECT type=AAA...AAA>", в направлении которого и надо копать. Четвертый exploit (http://lcamtuf.coredump.cx/iedie2-4.html) во всем повторяет третий, только длина строк "AAA" слегка другая, тем не менее, исключение все равно возникает, значит, переполнение имеет место быть. Остается выяснить, где именно оно происходит и как передать шелл-коду бразды правления. |