Xakep #305. Многошаговые SQL-инъекции
Среди обширных функциональных возможностей, IE использует набор полезных методов для отображения диалогового окна. Методы showModalDialog и showModelessDialog могут передавать объекты от
порождающей страницы до страницы, отображаемой внутри диалога, при помощи свойства dialogArguments.
Свойство dialogArguments предотвращает взаимодействие между
страницами, сравнивая местоположение
начальной и диалоговой страницы. При открытии диалогового окна (например res://shdoclc.dll/policyerror.htm) из другого протокола, порта или домена (например http://jscript.dk), код проверки правильности в IE гарантирует, что никакие объекты не могут
быть переданы, и никакое взаимодействие также невозможно.
Соответственно, когда обе страницы находятся на том же самом протоколе, порте и домене, код проверки правильности позволит взаимодействие. К сожалению, будет проверен первоначальный URL вместо конечного URL, т.е.
можно использовать HTTP переадресацию от
исходного сайта до диалоговой страницы, которая позволит взаимодействие.
Некорректное свойство dialogArguments также
допускает взаимодействие между различными доменами, различными протоколами (HTTP к HTTP, HTTP к FILE, и т.д.) и различными портами (80 к порту 21, порт 80 к 25, и т.д.). Т.е.
уязвимость позволяет перехватывать опознавательные
данные на основе куки любого сайта.
Пример:
<script>
var sCode = '<'+'script>alert("This is running from: " +
location.href);top.close()</'+'script>';
window.showModalDialog("redirect.asp", {url:sCode})
</script>
где redirect.asp содержит следующий код:
<%@Language=Jscript%>
<%
Response.Redirect("res://shdoclc.dll/policyerror.htm");
%>