mail.ru Что за данные добавляются к запросу.

Discussion in 'PHP' started by De-visible, 21 Aug 2012.

  1. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    ВОПРОС РЕШЕН. ТЕМУ МОЖНО ЗАКРЫТЬ. ВСЕМ СПАСИБО


    Делаю запрос на смену пароля, ответ приходит такой же как и при удачном запросе, но сам пароль не меняется.
    Все проснифал увидел что при отправке запроса, к старому и новому паролю, добавляются 2 или 1 символов, но знаний в JS не хватает, что бы выяснить откуда они берутся... Вот запрос:

    Code:
    [COLOR=White]POST /cgi-bin/modifypass HTTP/1.1
    Accept-Encoding: identity
    Content-Length: 425
    Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    Connection: close
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
    Host: e.mail.ru
    Cookie: Здесь печеньки
    Referer: https://e.mail.ru/cgi-bin/editpass
    Content-Type: application/x-www-form-urlencoded[/COLOR]
    
    POST - данные:
    
    [COLOR=White]x_reg_id=yMW0MGiw&
    form_sign=405410312838354260527282252891373638199&
    modify=1&
    back=&
    security_image_word=ckk8ex&
    Username=юзер
    Password=новый пароль + 2a
    Password_Verify=новый пароль + 2
    oldPswd=старый пароль + BA
    form_token=74414172637d5658190892020d02900603060b000d0a0201070f0704060503010205040b090e0003060403040d000d0e181e45454a1d5e575a585d16424144195e57505b164647185d5245541d46461c1b4d5258455a554551411e495144424e564a551e58595358&
    browserData=NoJS[/COLOR]

    гуру JS можете уделить пару минут?)
     
    #1 De-visible, 21 Aug 2012
    Last edited: 21 Aug 2012
  2. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    дай тестовый акк (с ответом на секретный вопрос/доп. почтой/etc) в личку, попробую помочь
     
  3. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    а при чем тут секретный вопрос?
     
  4. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Если это тебе мешает отключи JS и проснифай, тогда ничего не добовляется и всё меняется =)
     
    1 person likes this.
  5. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Да у меня полный набор инструментов, и перехватывал и изменял. И JS отключал. Но суть не в этом. Мне наоборот надо узнать как генерируются те символы которые добавляются потому что без них пароль не изменяется.
     
  6. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    De-visible Копай у себя у меня в браузере без JS и без добовлений пароль изменился.
    А значит в скрипте твоём проблема.. Копируй запрос точь в точь и не отсылай лишнего ... пошли теже хидеры и теже параметры не больше не меньше и тогда проверяй .. не может быть что браузер отсылает без и всё норм а ты не можешь.
     
  7. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Делаем в 3 шага:
    1. Ищем функцию function a (form), выглядит она так:
    PHP:
    function (form) {
    var 
    r;
                
    eval(function(
    p,a,c,k,e,r)....//и так далее
    2. В найденной функции ищем массив символов r, выглядит примерно так:
    Code:
    r=[\'l\',\'h\',\'i\',\'j\',\'m\',\'9\',\'d\',\'e\']
    
    3. Приписываем к параметрам нужные символы. Соотношение параметр - символ из массива (приписываемый параметру при отправке):
    Code:
    form_sign - r[2]+r[0]
    form_token - r[5]+r[7]
    oldPswd - r[4]+r[3]
    Password - r[6]
    Password_Verify - r[1]
    
     
    #7 patcher, 21 Aug 2012
    Last edited: 21 Aug 2012
    1 person likes this.
  8. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    //edit

    Извиняюсь первоначально тупанул. - большое спасибо.
     
    #8 De-visible, 21 Aug 2012
    Last edited: 21 Aug 2012
  9. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Ты немного не понимаешь, что мне необходимо. Каждый раз там новые данные. мне нужно понять как они генерируются. Для этого нужно понять как работает JS функция. С этим и вся проблема. а копировать запрос точь в точь - чего я этим добьюсь?

    // added

    Отталкиваясь от того что написал patcher

    Вот кусок кода полностью:

    Code:
    <script type="text/javascript">
    	$(function() {
    
    		var $form = $('#passwordForm'), input = $form[0].elements['security_image_word'];
    
    		function a (form) {
    			var r;
    			
    				eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('r=[\'l\',\'g\',\'i\',\'j\',\'m\',\'9\',\'d\',\'e\'];f h(a,b,c){a.k[b].t+=c}h(8,\'n\',r[3]+r[1]);h(8,\'o\',r[5]+r[7]);h(8,\'p\',r[4]+r[2]);h(8,\'q\',r[6]);h(8,\'s\',r[0]);',30,30,'||||||||form|f||||F|X|function|N||u|b|elements|U|z|form_sign|form_token|oldPswd|Password||Password_Verify|value'.split('|'),0,{}));
    				
    			
    		}
    
    		$form.submit(function (evt) {
    			if (CheckPassword($form[0])) {
    				collectBrowserData($form[0]);
    				
    					a($form[0]);
    				
    			} else {
    				evt.preventDefault();
    			}
    		});
    
    		
    	});
    </script>

    Расшифровываем и приводим в читабельный вид:

    Code:
    <script type="text/javascript">
        $(function () {
    
            var $form = $('#passwordForm'),
                input = $form[0].elements['security_image_word'];
    
            function a(form) {
                var r;
    
                r = ['U', 'N', 'u', 'b', 'z', 'f', 'F', 'X'];
    
                function h(a, b, c) {
                    a.elements[b].value += c
                }
                h(form, 'form_sign', r[3] + r[1]);
                h(form, 'form_token', r[5] + r[7]);
                h(form, 'oldPswd', r[4] + r[2]);
                h(form, 'Password', r[6]);
                h(form, 'Password_Verify', r[0]);
    
    
            }
    
            $form.submit(function (evt) {
                if (CheckPassword($form[0])) {
                    collectBrowserData($form[0]);
    
                    a($form[0]);
    
                } else {
                    evt.preventDefault();
                }
            });
    
    
        });
    </script>
    Вот необходимый кусок, то есть то, что и требовалось:

    Code:
                h(form, 'form_sign', r[3] + r[1]);
                h(form, 'form_token', r[5] + r[7]);
                h(form, 'oldPswd', r[4] + r[2]);
                h(form, 'Password', r[6]);
                h(form, 'Password_Verify', r[0]);
    вот массив:

    Code:
    r = ['U', 'N', 'u', 'b', 'z', 'f', 'F', 'X'];
    Вопрос решен. тему можно закрыть спасибо.
     
    #9 De-visible, 21 Aug 2012
    Last edited: 21 Aug 2012
  10. S0ulVortex

    S0ulVortex Elder - Старейшина

    Joined:
    18 Nov 2007
    Messages:
    161
    Likes Received:
    85
    Reputations:
    10
    А что мешает просто вырезать эти символы ? Я хоть и не смотрел код и не снифал запросы, но зачастую бывает так что такого рода цифры могут генерироваться алгоритмом известный только разработчикам дабы повысить безопасность и приходится тупо вырезать их из страницы.
     
  11. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    De-visible Тьфу ты)) что ты прицепился к этому JS я же тебе говорю что я отключил JS в браузере ... поменял пароль и проснифал запрос .. к старому и новому паролю ни чё не добавилось(При включеном JS добавлялось) вышел из акка и зашёл новым паролем...

    Выводы: Не обязательно анализировать функцию можно и без добавления соли к паролям изменить пароль.

    Чего добьешься? Ненужно будет анализировать функцию просто нужно симулировать браузер с выключеным JS.

    У тебя задача какая? Правильно. Изменить пароль...
    А зачем еб*тся и анализировать работу JS если можно симулировать браузер с выключеным JS.


    //Added

    Вот решение без JS если что =)

    PHP:
    <?php

    /**
     * @author @Fatal@
     * @copyright 2012
     */
     
     
    set_time_limit(0);
     
     
    $login ''//Логин
     
    $pass ''//Пароль
     
    $domain 'bk.ru'//Домен
     
    $npass ''// Новый
     
    $cook dirname(realpath(__FILE__)).'/test.txt';
     
     
     require_once(
    'cu/mod/cURL.class.php');
     
     
    $c = new cURL(true,$cook);

     
     if(isset(
    $_POST['cap']))
     {      
        
    $post 'form_sign='.$_POST['sing'].'&form_token='.$_POST['token'].'&back=&modify=1&Username=tema357&browserData=NoJS&oldPswd='.$pass.'&Password='.$npass.'&Password_Verify='.$npass.'&security_image_word='.$_POST['cap'].'&x_reg_id='.$_POST['reg'];
      
    $c->post('https://e.mail.ru/cgi-bin/modifypass',$post,array('Referer' => 'https://e.mail.ru/cgi-bin/modifypass'));  
      
        echo 
    'OK';
     } else 
     {
        
    unlink($cook);
        
       
    $r $c->get('https://e.mail.ru/cgi-bin/login');

    /********* ЛОВИМ ВАЖНЫН КУКИ!! **********/
        
    preg_match('#src="(https://rs\.mail\.ru\/.+?)"#',$r,$p);
        
    preg_match('#src="//(top-fwz1\.mail\.ru\/counter.+?)"#',$r,$fw);

        
    $c->get($p[1]);
        
    $c->get('https://'.$fw[1]);
    /****************************************/    
        
            
    $login urlencode($login);
            
    $pass urlencode($pass);
            
    $domain urlencode($domain);
            

        
    $c->post('http://win.mail.ru/cgi-bin/auth','Login='.$login.'&Domain='.$domain.'&Password='.$pass);
        
        
    $r $c->get('https://e.mail.ru/cgi-bin/editpass');
       
        
    preg_match("#src='(\/cgi-bin\/x_pass_frame\?x_reg_id=.+?&no_meta_refresh=1&r=\d+?)'>#",$r,$cap);
            
    preg_match('#<input type="hidden" name="form_sign" value="(\d+?)" />#',$r,$sing);
        
    preg_match('#<input type="hidden" name="form_token" value="(.+?)" />#',$r,$token);
        
    preg_match('#<input type="hidden" value="(.+?)" name="x_reg_id"/>#',$r,$reg);
        
        
    $r $c->get('https://e.mail.ru'.$cap[1]);
        
    preg_match('#<img src="(x_get_image\?x_reg_id=.+?&r=\d+?)"#',$r,$cap);
        
    $r $c->get('https://e.mail.ru/cgi-bin/'.$cap[1]);
        
    file_put_contents('a.jpeg',$r);
        
        
        
        echo 
    '<img src="a.jpeg" /><form method="POST">
        <input type="hidden" name="sing" value="'
    .$sing[1].'" /><input type="hidden" name="token" value="'.$token[1].'" />
        <input type="hidden" name="reg" value="'
    .$reg[1].'" />
        <input type="text" name="cap" /><input type="submit" /></form>'
    ;
    }
    ?>
     
    #11 Doom123, 21 Aug 2012
    Last edited: 23 Aug 2012
    1 person likes this.
Loading...
Similar Threads - mail данные добавляются
  1. GAiN
    Replies:
    3
    Views:
    7,607