cross-site scripting (javascript) поделитесь опытом

[Удален]
677

для белого проекта необходимо реализовать XSS в яваскрипте

к примеру:

есть два сайта site1.ru, site2.ru

в код страницы site2.ru/index.html вставляется код <script src="http://site1.ru/somejs.js">

потом необходимо отправить данные в http://site1.ru/somescript.pl - (можно ли как-то отправить post запрос?)

потом необходимо скачать данные с http://site1.ru/somedata.xml или http://site1.ru/somedata.json

и соответственно поменять содержимое страницы без перезагрузки

другими словами, как можно обойти ограничения XmlHttpRequest к XSS?

ps: доступ полный ко обоим сайтам

pss: есть несколько вариантов на уме уже, но хотелось бы послушать советов тех,кто сталкивался

[Удален]
#1

post - можно через ифрейм, но если тебе не интересен ответ этого поста) потому что обратится к нему и из него не дадут настройки безопасности.

а чтобы подгружать данные схема проста - вставляй <script src="http://... ?..&..&..&callback=MyFunc"></script>

ну и твой скрипт долежн писать нечто вида

data_aUIYHANKnAUKQKNNkjAKN = [{name:"user"},{name:"vasia"}];

MyFunc(data_aUIYHANKnAUKQKNNkjAKN);

вот такие пироги :)

John Lee Hooker
На сайте с 18.10.2007
Offline
14
#2
MOP1:

потом необходимо отправить данные в http://site1.ru/somescript.pl - (можно ли как-то отправить post запрос?)

можно передать данные на сервер методом POST с помощью XmlHttpRequest / Msxml2.XMLHTTP / Microsoft.XMLHTTP, почему нет? Был у меня такой код, который обходил поля формы и конструировал POST запрос, а затем отправлял его через AJAX. Все работало замечательно, пока на каком-то хостинге не установили систему безопасности, которая начала такие запросы резать - я предпочел отказаться от POST в AJAX тогда, хотя можно было просто получше замимикрировать под какой-либо броузер, но времени не было разбираться. Я так подозреваю, что по RFC состряпать запрос этой системе мало показалось - нужно было разделители полей в POST сделать похожими на те, что броузеры используют.

А ограничения XmlHttpRequest к XSS можно обходить, установив скрипт, редиректящий запросы на "родном" домене - лишняя нагрузка, конечно... bearman - толково предложил.

[Удален]
#3
Я так подозреваю, что по RFC состряпать запрос этой системе мало показалось - нужно было разделители полей в POST сделать похожими на те, что броузеры используют.

по рфц там ничего стряпать не надо)

по рфц там как и в гете &.

а вот если использовать multiple/form-data .. тогда да, придется баундари стряпать

[Удален]
#4
bearman:
post - можно через ифрейм, но если тебе не интересен ответ этого поста) потому что обратится к нему и из него не дадут настройки безопасности.

интересен :)

bearman:

а чтобы подгружать данные схема проста - вставляй <script src="http://... ?..&..&..&callback=MyFunc"></script>

ну и твой скрипт долежн писать нечто вида

data_aUIYHANKnAUKQKNNkjAKN = [{name:"user"},{name:"vasia"}];
MyFunc(data_aUIYHANKnAUKQKNNkjAKN);

вот такие пироги :)

вот так я и думал делать.. но тут проблема... скорее всего, передавать придется большие массивы... по крайней мере, больше, чем 255 символов

как выход вижу, сделать пост запрос в ифрейм, дождаться, когда он загрузится, после этого сделать гет запрос, и узнать статус прошлого запроса... муторно это

в принципе, можно и такой способ реализовать... но может кто-то подскажет, как передать на другой сервер большой массив данных (метод пост для этого подходит) и получить ответ сервера по-красивее?

John Lee Hooker:
можно передать данные на сервер методом POST с помощью XmlHttpRequest / Msxml2.XMLHTTP / Microsoft.XMLHTTP, почему нет? Был у меня такой код, который обходил поля формы и конструировал POST запрос, а затем отправлял его через AJAX. Все работало замечательно, пока на каком-то хостинге не установили систему безопасности, которая начала такие запросы резать - я предпочел отказаться от POST в AJAX тогда, хотя можно было просто получше замимикрировать под какой-либо броузер, но времени не было разбираться. Я так подозреваю, что по RFC состряпать запрос этой системе мало показалось - нужно было разделители полей в POST сделать похожими на те, что броузеры используют.

А ограничения XmlHttpRequest к XSS можно обходить, установив скрипт, редиректящий запросы на "родном" домене - лишняя нагрузка, конечно... bearman - толково предложил.

редирект - не выход :( . схему передачи данных я описал в первом посте

там как бы дело не в форме... запрос будет на лету генериться из разных данных

[Удален]
#5

редирект не сканает (если я не ошибаюсь) браузер не тупой (я про фф например).

гет данные давно уже больше 255 символов) 1000 - легко. а 1000 - много достаточно. а чо за массивы то передавать собираешься? нах большие?)))

bearman добавил 04.02.2009 в 02:05

если большие, разбей на части)))))) по несколько <script цепляй )))

malls
На сайте с 08.08.2005
Offline
255
#6
MOP1:
есть два сайта site1.ru, site2.ru
в код страницы site2.ru/index.html вставляется код <script src="http://site1.ru/somejs.js">
потом необходимо отправить данные в http://site1.ru/somescript.pl - (можно ли как-то отправить post запрос?)
потом необходимо скачать данные с http://site1.ru/somedata.xml или http://site1.ru/somedata.json
и соответственно поменять содержимое страницы без перезагрузки
другими словами, как можно обойти ограничения XmlHttpRequest к XSS?

1. POST легко отправляется AJAXом.

2. Ограничения обходятся просто - ставишь на site2.ru скрипт "зеркальщик" который просто получает запрос от AJAXа - переправляет его на http://site1.ru/somescript.pl, получает ответ и транслирует его твоему AJAXу без всяких проблем с безопасностью...

Хотя я подозреваю что речь идет о случае, когда речь идет о site2.ru на бесплатном хостинге и хочется на них делать "доры" с раздачей контента с основного сервака где site1.ru лежит... :)

В этом варианте удаленные загрузки для site2.ru не поддерживаюся бесплатным хостингом, либо там вообще PHP/PERL нету. Тогда никак... Разве что заставлять пользователей работать из под FF и при этом заставлять их устанавливать Greasemonkey, после чего юзать GM_xmlhttpRequest...

[Удален]
#7
bearman:
редирект не сканает (если я не ошибаюсь) браузер не тупой (я про фф например).

гет данные давно уже больше 255 символов) 1000 - легко. а 1000 - много достаточно. а чо за массивы то передавать собираешься? нах большие?)))

bearman добавил 04.02.2009 в 02:05
если большие, разбей на части)))))) по несколько <script цепляй )))

гет данные давно уже больше 255 символов)

привет из каменного века вам :)

большие - типа краткого содержания новости... с форматирование хтмл... не уверен, но может быть большим

еще может несколькими запросами отправлять?

1. POST легко отправляется AJAXом.
2. Ограничения обходятся просто - ставишь на site2.ru скрипт "зеркальщик" который просто получает запрос от AJAXа - переправляет его на http://site1.ru/somescript.pl, получает ответ и транслирует его твоему AJAXу без всяких проблем с безопасностью...

могу только статику использовать на первом серваке...

писал постом выше

[Удален]
#8

http://www.google.ru/search?hl=ru&q=%D0%B4%D0%BB%D0%B8%D0%BD%D0%B0+get+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=0&oq=%D0%B4%D0%BB%D0%B8%D0%BD%D0%B0+get+

При этом длина GET-запроса лимитирована 2048 символа

честно скажу что ЭТО зависит от браузера.

используй ифрейм + setInterval (document.werite<script

чтобы проверять пришли ли данные. думаю что такого должно хватить :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий