前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安全研究 | 使用PortShellCrypter对你的shell会话进行加密

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

作者头像
FB客服
发布2021-03-25 10:29:04
7920
发布2021-03-25 10:29:04
举报
文章被收录于专栏:FreeBufFreeBuf

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浏览会话。

工具下载和项目构建

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

代码语言:javascript
复制
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端口号即可,比如说:

代码语言:javascript
复制
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命令:

代码语言:javascript
复制
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地址,而不支持域名。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PortShellCrypter-PSC
  • 工具下载和项目构建
  • 工具使用
  • SOCKS4和SOCKS5支持
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档