Как запустить mssqlclient py на linux

Обновлено: 06.07.2024

With the Impacket mssqlclient you will not need to do manual things such as building the query in SQL scripting language in order to activate the xp_cmdshell. Impacket makes the things easier for you.

You can connect to the database using this command

If you type help and you will get information like below

You need to run the enable_xp_cmdshell in order for you to run the remote execution.

There will out put like the above but actually you dont need to run the RECONFIGURE command since Impacket has done it for you.

The next thing is if you want to create reverse shell then you can just do the below command to connect back to your netcat server defined in the nishang powershell script

the above command is reverse shell using nishang framework. you can find the detail how to prepare nishang reverse shell in my previous tutorial.

Share this:

Like this:

Related

Leave a Reply Cancel reply

1. Penetration testing for banking industry such as Core Banking, SMS Banking, Transaction Switching, Payment Gateway, Mobile Banking, Online Banking, Online trading and Various Cards Application. Segmentation Test for PCI requirement

2. Malware and exploit research and analysis for common and targeted attack for Oil & Gas and Banking Industry.

4. Threat hunting in the oil & gas and banking industry environment. Analysis of several log such as WAF, Firewall, IDPS, Web Application Server, Windows/Linux security event log, Internet Proxy

5. Threat Modeling and threat use case for banking application using OWASP and PASTA framework

6. AWS platform design and security hardening

7. Technical team leader for CSOC team which consist of 8 personel from various background such as SIEM, Public Key Infrastructure, Network Security.

8. Project manager for cyber security software and hardware implementation.

9. SIEM QRadar log onboarding, CRE (Custome Rule Engine), Develop new building block and AQL. SPLUNK log index query.

10. Depth Understanding on below

Burpsuite, Acunetix, Kali Linux, IDA Pro, X64dbg, Cerbero Advance, JEB Android, Hex Editor, Visual Studio, PyCharm, Autopsy and Vmware ESXi

Firewall : Checkpoint, Palo Alto, PFSence, NGINX and F5 Web Application Firewall
Proxy : Bluecoat Proxy
Antivirus/EDR : Symantec and CrowdStrike

Привет, Хабр! Из этой статьи вы узнаете о способе атаки на удаленный сервер, используя особенности MsSQL, создания reverse shell для закрепления в системе и пример эксплуатации плохо сконфигурированной групповой политики в ОС Windows.

Под катом пойдет речь про свой опыт прохождения лабораторной машины Querier на портале hackthebox.

Для тех, кто не знает, что такое hackthebox — это портал, на котором вы можете проверить свои умения пентеста на практике, имеются CTF таски и собственно лабораторные машины.

В правилах сервиса написано: «Dont share how you hacked each machine with other members. This includes the invite code generation and all challenges». Но так как эта машина уже не активна и хранится в разделе «Retired Machines», доступ к ней имеют только VIP-участники.


Сбор информации

Начнем разведку с запуска сканирования портов с помощью nmap.



Перечислим найденные порты.

Enumerate 139/445/tcp (smb)

Воспользуемся утилитой smbclient для доступа к SMB ресурсам сервера.


Пройдясь по всем ресурсам, находим в директории Reports файл “Currency Volume Report.xlsm”.


Если открыть этот файл стандартным Microsoft Excel, то он окажется на первый взгляд совершенно пустым.

Проанализируем файл, используя утилиту binwalk, которая поможет взглянуть на встроенные файлы xlsm- документа.


Из вывода binwalk обнаружили несколько интересных файлов, содержащихся в xlsm.
Используя флаг –e, распакуем его.



Теперь воспользуемся утилитой strings для вывода печатных символов. Пробежавшись по файлам, находим интересные данные в vbaProject.bin. Похоже, что мы нашли учетные данные для mssql server’а.


Подытожим полученную информацию на текущий момент:

  • Мы знаем, что на порту 10.10.10.125:1433 крутится mssql server;
  • У нас есть учетные данные от пользователя mssql server.


Получаем доступ к MsSQL.


Enumerate MsSQL

Перечислим полезную для нас информацию, используя команды из статьи.
Выполнив SQLi, получаем хеш от пароля пользователя mssql-svc.


Чтобы получить пароль в явном виде, необходимо его сбрутить, используя любой удобный для вас инструмент.


Получаем пароль от mssql-svc.

Подключаемся к SQL с новыми кредитами учетными данными.


Права этого пользователя позволяют нам выполнять xp_cmdshell

Вместе с MsSQL поставляется большой набор расширенных хранимых процедур. Наиболее интересная из них — xp_cmdshell. Она предоставляет доступ к командной строке операционной системы.

Получаем reverse shell

Пробуем получить оболочку через netcat, для этого нам необходимо загрузить его на атакуемый сервер.

Переходим в директорию на нашей машине, где находится netcat и запускаем:


В оболочке mssql для загрузки netcat (nc.exe) на удаленный сервер, выполняем команду powershell, указав путь сохранения.


Запускаем netcat на прослушивание порта 4444.


Запускаем на своей стороне netcat, указав ip и порт, атакуемого сервера и получаем оболочку.

image

В данной статье разберем прохождение не просто машины, а целой мини-лаборатории с площадки HackTheBox.

Как сказано в описании, P.O.O. предназначен для проверки навыков на всех стадиях атак в небольшой среде Active Directory. Цель состоит в том, чтобы скомпрометировать доступный хост, повысить привилегии и, в конечном итоге, скомпрометировать весь домен, собрав при этом 5 флагов.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

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

Intro

Данный endgame состоит из двух машин, и содержит 5 флагов.

image

Так же дается описание и адрес доступного хоста.

image

Recon flag

Данная машина имеет IP адрес 10.13.38.11, который я добавляю в /etc/hosts.
10.13.38.11 poo.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.


image

Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.


image

Таким образом, мы имеем службы IIS и MSSQL. При этом мы узнаем реальное DNS имя домена и компьютера. На веб сервере нас встречает домашняя страница IIS.

image

Давайте переберем директории. Я для этого использую gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w) и расширения, которые нас интересуют (-x).


image


image

Мы получаем содержимое каталога. Самое интересное здесь — это каталог /dev, из которого мы в двух ветках можем посмотреть исходники и файлы db. Но мы можем первые 6 символов имени файлов и директорий, если сервис уязвим к IIS ShortName. Проверить наличие данной уязвимости можно с помощью IIS shortname Scanner.

И на ходим один текстовый файл, который начинается с «poo_co». Не зная что делать дальше, я просто выбрал из словаря директорий все слова, начинающиеся на «co».


И переберем с помощью wfuzz.


image

И находим подходящее слово! Смотрим данный файл, сохраняем учетные данные (судя по параметру DBNAME, они от MSSQL).

image

Сдаем флаг, и мы продвигаемся на 20%.

image

Huh flag

Подключаемся к MSSQL, я использую DBeaver.

image

Ничего интересного в данной базе не находим, давайте создадим Редактор SQL и проверим, какие есть пользователи.


image

У нас два пользователя. Давайте проверим свои привилегии.


image

Таким образом, привилегий никаких нет. Давайте посмотрим связанные серверы, про данную методику я подробно писал здесь.


image

Так мы находим еще один SQL Server. Давайте проверим выполнение команд на этом сервере с помощью openquery().


image

И мы даже можем выстраивать дерево запросов.


Дело в том, что когда мы выполняем запрос на связанный сервер, то запрос выполняется в контексте другого пользователя! Давайте посмотрим, в контексте какого пользователя мы работаем на связанном сервере.


image

А теперь посмотрим в каком контексте выполняются запрос со связанного сервера на наш!


image

Таким образом, это контекст DBO, который должен обладать всеми привилегиями. Давайте проверим привилегии в случае запроса со связанного сервера.


image

Как можно заметить, у нас есть все привилегии! Давайте так создадим своего админа. Но через openquery не пускают, давайте сделаем это через EXECUTE AT.


И теперь подключаемся с учетными данными нового пользователя, наблюдаем новую базу данных flag.

image

Сдаем этот флаг и идем далее.

image

BackTrack flag

Получим шелл с помощью MSSQL, я использую mssqlclient из пакета impacket.


image

Нам нужно раздобыть пароли, и первое, что мы уже встречали, — это сайт. Таким образом нам нужен конфиг веб сервера (бросить удобный шелл не получается, видимо работает firewall).

image

Но доступ запрещен. Хотя мы можем прочитать файл из MSSQL, нужно лишь знать какие языки программирования настроены. И в директории MSSQL узнаем, что есть Python.

image

Тогда прочитать файл web.config нет никаких проблем.


image

С найденными учетными данными зайдем на /admin и забираем флаг.

image

image

Foothold flag

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

image

Добавим данный адрес в /etc/hosts.
dead:babe::1001 poo6.htb
Давайте снова просканируем хост, но уже по протоколу IPv6.

image

И по IPv6 доступна служба WinRM. Подключимся с найденными учетными данными.

image

На рабочем столе есть флаг, сдаем его.

image

P00ned flag

Проведя разведку на хосте с помощью winpeas ничего особенного не находим. Тогда было принято решение снова искать учетные данные (на эту тему я тоже писал статью). Но получить все SPN из системы через WinRM у меня не вышло.


image

Давайте выполним команду через MSSQL.

image

Указанным способом мы получаем SPN пользователей p00_hr и p00_adm, а это означает, что они уязвим к такой атаке, как Kerberoasting. Если вкратце, то мы можем получить хеши их паролей.

Для начала нужно получить стабильный шелл от имени пользователя MSSQL. Но так как нас ограничивают в доступе, то мы имеем связь с хостом только через 80 и 1433 порт. Но есть возможность туннелирования трафика через 80 порт! Для этого воспользуемся следующим приложением. Загрузим файл tunnel.aspx в домашнюю директорию веб сервера — C:\inetpub\wwwroot\.

image

image

И теперь при обращении к tunnel.aspx получаем ответ, что все готово к работе.

image

Давайте запустим клиентскую часть приложения, которая будет заниматься ретранслированием трафика. Мы будем перенаправлять весь трафик с 5432 порта на сервер.


image

И используем proxychains, чтобы слать трафик любого приложения через наш прокси. Добавим данный прокси в файл конфигурации /etc/proxychains.conf.

image

Теперь загрузим на сервер программу netcat, с помощью которой сделаем стабильный bind шелл, и скрипт Invoke-Kerberoast, c помощью которого выполним атаку Kerberoasting.

image

Теперь через MSSQL запускаем листенер.


image

И подключаемся через наш прокси.


image

И давайте получим хеши.


image

Далее нужно перебрать эти хеши. Так как в rockyou словаре данных паролей не было, то я использовал ВСЕ словари passwords, предоставленные в Seclists. Для перебора используем hashcat.


И находим оба пароля, первый в словаре dutch_passwordlist.txt, а второй в Keyboard-Combinations.txt.

image

image

И так у нас есть три пользователя, идем на контроллер домена. Сначала узнаем его адрес.

image

Отлично, мы узнали IP адрес контроллера домена. Давайте узнаем всех пользователей домена, а также кто из них является администратором. Для загрузим скрипт для получения информации PowerView.ps1. Потом подключимся с помощью evil-winrm, указав в параметре -s директорию со скриптом. А потом просто загрузим скрипт PowerView.

image

Теперь нам доступны все его функции. Пользователь p00_adm похож на привилегированного, поэтому будем работать в его контексте. Создадим объект PSCredential для этого пользователя.


Теперь все команды Powershell, где мы укажем Creds, будут выполнены от имени p00_adm. Давайте выведем список пользователей и атрибут AdminCount.


image

И так, наш пользователь реально является привилегированным. Давайте глянем, в каких группах он состоит.


image

Окончательно утверждаемся, что пользователь является администратором домена. Это дает ему право удаленного входа на контроллер домена. Давайте попробуем войти через WinRM, используя наш туннель. Меня смутили ошибки, выдаваемые reGeorg’ом при использовании evil-winrm.

image

Тогда воспользуемся другим, более легким, скриптом для подключения к WinRM. Откроем и поменяем параметры для подключения.

image

Пробуем подключиться, и мы в системе.

image

Но флага нет. Тогда посмотри пользователе и проверим рабочие столы.

image

У mr3ks находим флаг и лаборатория пройдена на 100%.

image

Вот и все. В качестве обратной связи, прокомментируйте — узнали ли Вы что-то новое из данной статьи и была ли она Вам полезна.

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.

Довольно часто происходят ситуации, когда доступ к серверу нужен здесь и сейчас. Однако, не всегда подключение по SSH является наиболее удобным способом, потому что под рукой может не оказаться SSH клиента, адреса сервера или связки «пользователь/пароль». Конечно, есть Webmin, который упрощает администрирование, но он также не даёт моментальный доступ.

Поэтому я решил реализовать простое, но любопытное решение. А именно — написать Telegram-бота, который, запускаясь на самом сервере, будет выполнять присылаемые ему команды и возвращать результат. Изучив несколько статей на эту тему, я понял, что подобных реализаций ещё никто не описывал.

Данный проект я реализовывал на Ubuntu 16.04, но для беспроблемного запуска на других дистрибутивах я постарался сделать всё в общем виде.

Регистрируем нового бота у BotFather. Отправляем ему /newbot и далее по тексту. Нам понадобятся токен нового бота и ваш id (получить его можно, например, у @userinfobot).

Подготовка питона

Для запуска бота будем использовать библиотеку telebot ( pip install pytelegrambotapi ). С помощью библиотеки subprocess будем выполнять команды на сервере.

Запуск бота

На сервере создаем файл bot.py:
nano bot.py

И вставляем в него код:


Заменяем в нём токен бота на тот, который выдал BotFather, и user_id — на значение id вашего аккаунта. Проверка id юзера нужна для того, чтобы бот предоставлял доступ к вашему серверу только вам. Функция check_output() выполняет переданную команду и возвращает результат.

Осталось только запустить бота. Для запуска процессов на сервере я предпочитаю использовать screen ( sudo apt-get install screen ):

(где «ServerBot» — идентификатор процесса)

Процесс автоматически запустится в фоном режиме. Перейдем в диалог с ботом и проверим, что всё работает, как надо:


Сongratulations! Бот выполняет присылаемые ему команды. Теперь, чтобы получить доступ к серверу, вам достаточно открыть диалог с ботом.

Повторение команд

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


Снова проверим, что всё работает корректно:


Читайте также: