Обход файла hosts

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by denis7656, 8 Oct 2012.

  1. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Приветствую всех, возник вопрос такого плана:
    Написал простенький web-сервер на Delphi для того чтобы попробовать обмануть одну из флешек в контакте. Через сниффер узнал реальный адрес сервера приложения, забил его в файл hosts операционки, для того чтобы все вызовы из приложения посылались уже на мой сервер а не на реальный, написал обработку запросов и фильтрацию оных прямо в моем приложении (сервере), чтобы приложение не догадалось о том что оно общается не с настоящим сервером, а получала полноценные адекватные ответы от сервера.
    Вся заморочка возникла когда попытался из своего сервера отправить откорректированный запрос на реальный сервер приложения. Так как в файле hosts, прописан уже автоматический редирект на мой сервер а не на реальный, то походу мой сервер с реальным связаться не сможет и будет получать свои же перенаправленные (файлом hosts) запросы. Подскажите пожалуйста как можно решить данную проблему ? Почитал про перехват всех соединений через инжект длл'кой в браузер и установкой хука, но там долгая очень история, слишком большой велосипед придется изобретать. Да и знаю что некоторые флешки открывают свои соединения на вообще левых портах. Web дебагеры и снифферы можете не предлагать, так как в некоторых приложениях есть переменная TIMESTAMP, и никакой web дебаггер уже в этом случае не прокатит. Так как реальный сервант будет будет сливать такие соединия. Пробовал пользоваться Fiddler'ом вторым но там мне не хватает функций фильтрации и обработки данных.
    Пробовал Proxomitron, но там фильтры только на заголовки, фильтров POST запросов нету, вернее они есть, но их функциональности мне к сожалению не хватает, да и опять же будет проблема коннекта к серверу по левому не стандартному порту из флешь-приложения.
    Очень надеюсь на Вашу помощь, и выражаю большую благодарность за внимание к посту а так же огромную благодарность за любую помощь в этом вопросе.
     
  2. TorRom

    TorRom New Member

    Joined:
    29 Apr 2012
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    hosts отвечает за резолвинг имени сервера в его ип адрес.
    Cоответственно, чтобы в него не "упираться", нужно делать запрос напрямую по IP. Если это http протокол, то нужно еще не забывать про параметр Host в запросе(в него оригинальный домен).
     
  3. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    ах да, точно.... Забыл, вернее почему-то не подумал что из своего сервера уже могу обращаться именно по IP'шнику сервера реального.

    Спасибо, добавил репы, но почему-то не плюсанулось =(
    Еще раз спасибо, буду пробовать.
     
  4. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Тренируюсь на ya.ru.
    Возник второй вопрос, при получении IP ya.ru получаю - 93.158.134.3.
    самое интересное то что при получении страницы http://93.158.134.3/
    получаю исходник страницы хоста http://yandex.ru/ (то есть полная версия сайта)
    если же получаю исходник страницы http://ya.ru/ (упрощенная версия сайта) - то все ок.
    Сам вопрос, получаю IP YA.RU, сокращенной версии сайта, по этому IP запрашиваю страницу - ан отдает полную. Думаю посмотреть, может там какой-то редирект... Или что-то другое... Может кто уже с этим работал ?

    при запросе указываю Host т.к. на одном айпишке может быть много сайтов
    Code:
    var
    str:ansistring;
    begin
    http1.Request.Host:='ya.ru';
    str:=http1.get('http://93.158.134.3/');
    str:=utf8toansi(str);
    memolog.Lines.Add(str);
    end;
    пробовал хост указавать и с www.
    результата нет.
     
    #4 denis7656, 8 Oct 2012
    Last edited: 8 Oct 2012
  5. TorRom

    TorRom New Member

    Joined:
    29 Apr 2012
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    мне почему-то кажется что Host не выставляется в запрос(не могу проверить, тк делфи нет)
    Сравни снифером запросы на ya.ru просто через домен и как у тебя сейчас. Должно проясниться.
     
  6. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    да, точно так и есть, уже до вас выяснил при сниффинге запроса строку хост вообще можно не писать, то что в гете указано, туда запрос и идет, указание хоста ваще на запросе никак не отражается. Возможно отразится если запрос в Tstream писать (без указания переменной впереди). Так что в моей проблеме пока нормального решения нету =(
     
  7. TorRom

    TorRom New Member

    Joined:
    29 Apr 2012
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    составляй запрос сам и посылай его через сокеты.

    Хотя это странно, что idhttp никак не дает возможности переназначить это поле...
     
  8. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Его можно переназначить, если GET - запрос другого вида делать. А я об этом только после снифа вспомнил, когда логи увидел.
    Через сокеты - думаю тоже не спасет, так как резолвинг срабатывать будет (файл HOSTS), если я не ошибаюсь, хотя и проблем с этим возникнуть не возникло бы, уже писал что-то, давно правда...
     
    #8 denis7656, 9 Oct 2012
    Last edited: 9 Oct 2012
  9. drim

    drim Member

    Joined:
    27 Aug 2009
    Messages:
    347
    Likes Received:
    33
    Reputations:
    4
    Через сокеты резолвинг срабатывать не будет, т.к. ты самостоятельно формируешь структуру данных отправки и прописываешь туда IP или доменное имя и выставляешь заголовки запроса.
    Из GET-запроса никаких данных для определения виртуального хоста веб-сервер не делает.
    Т.е. варианта 2:
    1) использовать низкоуровневые вещи (сокеты) и самостоятельно корректно заполнять структуру данных
    2) использовать высокоуровневый класс для обмена данных с веб-сервером и внимательно читать документацию по нему. Не верю, что нельзя менять заголовок "Host"
     
  10. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое за наводку, буду в ту сторону тогда копать... Где-то многолетний исходничек сокетовый остался еще (все посл время спасали компоненты).
    Насчет Host опишу фишку:
    если в файлстрим файл писать получается:
    Code:
    http1.Request.Host:='ya.ru';
    http1.get('http://93.158.134.3/', FS);
    
    запрос будет выглядеть так

    [​IMG]


    а если писать данные сразу в переменную ansistring:


    Code:
    http1.Request.Host:='ya.ru';
    ansistr:=http1.get('http://93.158.134.3/');
    
    запрос будет выглядеть так
    [​IMG]

    как видите сами - переменная HOST в запросе Indy 10 не играет...
    В этом вся и проблема.
     
    #10 denis7656, 9 Oct 2012
    Last edited: 9 Oct 2012
  11. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    теперь пытаюсь вспомнить прошлое, вернее занимаюсь RTFM, а точнее RFC по сокетам...
     
    #11 denis7656, 9 Oct 2012
    Last edited: 9 Oct 2012