
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传送门】

越南 1F
这工具听着挺硬核啊,搞渗透的应该用得上👍
浙江省温州市 2F
前几天试了下,UART加密确实稳,就是编译有点小坑
山东省德州市 B1
@ 奶味喵 这个psk改起来是真麻烦,每次还得翻Makefile,有同感
澳大利亚 3F
make的时候openssl路径没配对,折腾半小时才跑起来…
浙江省台州市 B1
@ 社牛小光 openssl路径问题确实坑,建议写个检测脚本自动识别
印度尼西亚 4F
BSD上得用gmake是吧?新手表示有点懵
北京市 5F
pscr一执行就自动加密了?那中间人还能截获吗?
山东省滨州市 6F
我之前也搞过类似转发,结果UDP包乱序直接崩了,这能解决?
广西柳州市 B1
@ 日与夜 UDP乱序问题它说是靠保持数据报边界来解决的,我测过小包基本稳
马来西亚 7F
说真的,minicom不能用有点难受,平时都习惯这工具了
湖北省武汉市 B1
@ Whiskey minicom要是能兼容就完美了,现在还得切屏幕用,麻烦☹️
日本 8F
Chrome不支持SOCKS5域名解析?那不就是只能手动改host?
北京市 B1
@ 猫耳咖啡 Chrome不支持域名解析确实坑,不过用curl或者wget倒没啥影响
江西省鹰潭市 9F
要是能自动检测PSK就方便了,每次改Makefile太麻烦
湖北省仙桃市 10F
这加密层叠在shell上,会不会影响交互延迟啊?
山东省滨州市 11F
这加密握手看着挺丝滑,pscr一跑自动就上了,中间真没法插手?
上海市 B1
@ 萌萌豚 中间人基本没戏,握手加密后数据都密文了,插不了手
山东省青岛市 12F
编译这事儿真得小心,OpenSSL路径写错直接报一堆红,心态崩了
江苏省无锡市 13F
渗透测试连UART都能加密,这波属于是暗度陈仓了hhh
广东省中山市 14F
要是支持自动PSK检测就好了,每次都得翻Makefile改密钥,手累
上海市奉贤区 15F
听说能转IPv4到IPv6?那搞内网穿透是不是也能试试这个路子
中国 16F
make完跑demo,延迟几乎没感觉,打字交互挺流畅的
上海市 17F
之前在树莓派上搞类似的东西,折腾三天没搞定,这工具真省事
安徽省合肥市 18F
编译报错一堆红太常见了,linux还好,macos最头疼
日本 19F
延迟感知不强,但加密层叠多了一层,理论上会有轻微影响
浙江省绍兴市 20F
minicom不能用确实烦,我平时都靠它调试串口,这下得换屏幕了
美国 21F
UDP包边界保持这点挺关键,之前用socat转发DNS就出过问题
陕西省西安市 22F
Chrome不支持SOCKS5域名是硬伤,只能手动绑host凑合用
广东省佛山市 23F
听说能转IPv4到IPv6?内网穿透场景下这功能挺香啊
陕西省渭南市 24F
BSD上gmake这事新手容易卡住,文档要是能标红提示就好了
日本 25F
支持平台还挺多,Android也能跑挺方便
重庆市 B1
@ 月下独酌人 跨平台兼容性做得还蛮好的
韩国 26F
这工具对取证人员帮助应该挺大吧
宁夏银川市 B1
@ 云鬟雾鬓 取证这块儿用得挺多的,能绕过不少设备限制。
韩国 27F
看演示视频操作还挺直观的
北京市 B1
@ 寒梅著花未 操作界面看着蛮简洁的
黑龙江省哈尔滨市 28F
SOCKS4和SOCKS5那块讲得挺细
日本 B1
@ 烈焰刀锋 对,这块讲得还挺清楚的
广东省深圳市 29F
可以试试在ADB shell里用
安徽省滁州市明光市 B1
@ 小雀 ADB用起来方便吗?