安全研究 | 使用PortShellCrypter对你的shell会话进行加密

2021年3月19日15:12:29 评论 417

PortShellCrypter-PSC

PortShellCrypter支持对shell会话进行E2E加密,可以帮助研究人员在完全不需要了解底层传输机制的情况下,对会话信息进行可靠的加密。除此之外,PortShellCrypter还可以发送/接收Base64编码的数据而无需对数据进行修改或过滤。除了接收E2E PTY之后,还可以转发TCP和UDP连接,这个功能有些类似于OpenSSH的-L参数。而且不需要在信息发起点本地分配IP地址,这将允许取证人员或渗透测试人员通过下列方式创建网络连接:

到设备的UART会话;

ADB Shell会话,如果OEM adbd不支持TCP转发;

Telnet会话;

不带ppp的调制解调器拨号;

其它类型的控制台登录方式;

SSH/telnet/modem混合会话;

....

想象一下,在Shell会话中有一个不可见的ppp会话,而目标远程设备实际上不支持ppp,那么PortShellCrypter就可以发挥作用了。

PortShellCrypter支持在Linux、Android、OSX、FreeBSD、NetBSD和OpenBSD上运行。

PSC还提供了针对SOCKS4和SOCKS5代理的支持,以便通过Portshell或调制解调器拨号进行实际的Web浏览会话。

工具下载和项目构建

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/stealth/psc.git

接下来,我们需要编辑Makefile来映射我们的预共享密钥,即在Makefile的头部编辑。然后,在Linux设备上切换到该项目目录,并运行make命令即可。

在BSD上,我们还需要安装GNU make,并调用gmake命令。

在macOS上,我们需要安装OpenSSL,并在Makefile中声明正确的安装路径,然后运行make命令即可。

在Linux系统上,PSC使用的是Unix98伪命令行终端,在其他系统上它将使用POSIX pty,不过对于用户来说不会有什么太大的区别。

工具使用

PortShellCrypter的使用非常简单且直接。在我们计算机上,执行pscl,然后传递需要转发的TCP或UDP端口号即可,比如说:

linux:~ > ./pscl -T 1234:[192.168.0.254]:22 -U 1234:[8.8.8.8]:53     PortShellCrypter [pscl] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc     pscl: set up local TCP port 1234 to proxy to 192.168.0.254:22 @ remote.  pscl: set up local UDP port 1234 to proxy to 8.8.8.8:53 @ remote.     pscl: Waiting for [pscr] session to appear ...  linux:~ >     [ UART / SSH / ... login to remote side ... ]

通过shell会话连接远程站点之后,执行pscr命令:

linux:~ > ./pscr     PortShellCrypter [pscr] v0.60 (C) 2006-2020 stealth -- github.com/stealth/psc        pscl: Seen STARTTLS sequence, enabling crypto.  linux:~ >

一旦执行了pscr命令,两端就建立了一个加密握手,并在现有会话上建立了一个对我们透明的附加协议。然后,我们可以通过TCP连接到本地设备上的127.0.0.1:1234以达到192.168.0.254:22,或者通过UDP连接到8.8.8.8解析器。如果远程站点具有IPv6连接,这也适用于[IPv6]地址。实际上,我们甚至可以使用它将IPv4软件转换为IPv6,因为我们总是在本地连接到127.0.0.1。

此时,我们可以传递多个-T和-U参数。如果我们的会话已经被e2e加密,那么我们可以向本地pscl进程发送SIGUSR1。

如果我们想从远程SSH shell使用Tor,PSC也很有用,我们可以将socks5和DNS端口转发到远程主机127.0.0.1地址。由于SSH不转发UDP数据包,因此通常会使用两个socat连接器或类似的连接器通过Tor节点进行解析。PSC的优点是保持UDP数据报边界,而SSH-L上的socat可能会打破数据报边界并创建格式错误的DNS请求。

会话将使用我们在Makefile中选择的PSK的aes_256_ctr进行加密。这种加密方案是可以修改的,但是添加AAD或OAD数据会破坏数据包的大小,因为在交互式会话中,由于Base64编码,每个类型的字符都会导致发送更多的数据。

UART会话可以通过屏幕使用,但不能通过minicom使用,因为minicom将创建带有状态行的不可见窗口,并充当破坏PSC协议的过滤器。PSC尝试检测过滤,并且可以承受一定数量的数据损坏,但在某些情况下无法恢复。tmux也有类似的东西。我们应该避免将pty处理程序与PSC堆叠在一起,因为PSC会过多地混乱/处理它们的传入数据。

在这里,我们需要为pscl和pscr设置SHELL环境变量,以便PSC知道在pty上执行哪个SHELL。默认情况下,大多数环境中都设置了SHELL,但如果没有设置,则需要像SHELL=/bin/bash pscl等那样执行PSC。

SOCKS4和SOCKS5支持

pscl还支持通过SOCKS4(-4端口)和SOCKS5(-5端口)转发TCP连接。这将端口设置为TCP连接的SOCKS端口,我们可以从portshell会话浏览远程网络,而无需在渗透测试期间打开任何其他连接。对于chrome,必须使用SOCKS4,因为pscsocks实现本身不支持解析域名。相反,它要求传递IPv4或IPv6地址。由于Chrome会将SOCKS5协议地址类型始终设置为域名(0x03)-即使在地址栏中输入了IP地址-SOCKS5不能与chrome一起使用。但是你可以将chrome与SOCKS4结合使用,因为这个协议只支持IPv4地址,而不支持域名。

工具使用演示

视频地址:【点我观看

项目地址

PortShellCrypter:【GitHub传送门

https://www.freebuf.com/sectool/265624.html

高性能云服务器2折起

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: