有些授权测试中,允许红队人员用社会工程学之类的方法进行渗透。钓鱼和水坑则是快速打点或横向的常用手段。钓鱼通常需要绕过目标邮件网关等安全设备,水坑则需要摸清目标的操作习惯。在此简单的罗列一下布置水坑的方法。ps:本文未涉及任何真实案例。
水坑简述
布置水坑的目的通常为两种:一是暂未获取到目标任何账号凭据和权限,需要利用水坑获取目标的账号凭据或初步建立渗透的据点。二是已经获取基础凭据和权限,但未完全接管系统,借助水坑进行横向或针对关键人员进行渗透。相比之下,前者适合进行“广撒网”,后者则更适合定制化、精细化的操作。
第一种是权限从无到有的一个过程,通常是利用仿冒一些可信度较高的网站,来达到欺骗用户的目的。拜读过倾旋大佬的文章《红队技巧:基于反向代理的水坑攻击》,里面介绍了一种基于Nginx反向代理部署水坑的思路,可以很好的仿冒网站,并且和正常的网站后端无缝衔接。
第二种则是横向扩展的过程,目的是权限升级。通常是已有基础权限,在此基础上分析人员的活动规律,确定目标人员,制定具有针对性的水坑方案。本文就简单聊聊这种。
一种纯想象的部署方案
前提假设,已有一台部署在云上的论坛服务器权限,无法通向内网,通过WEB日志等手段分析出,该网站有目标内部的人员浏览。此处提到的假设是对论坛服务器有完全的控制权限,因为探针和水坑都是Js编写的,实际情况可能只需要一个存储性XSS漏洞就可。
信息收集
通过JS探针的形式,布置在论坛页面上,针对性的记录来源于目标网络出口的访问记录,将用户名、时间、IP、UA和浏览器指纹等信息进行记录。通过长时间的收集,可以确定哪些用户访问频次较高、访问时间段,以及所使用的浏览器。原则上不在目标上留下过多的文件,Js探针可以通过远程引入的方式注入进目标页面,当然具体情况具体分析,灵活变通。
代码语言:javascript复制{
"time":2021/6/15 上午 11:22:06,
"ip":1.2.3.4,
"User-Agent":Mozilla/5.0 (Linux; Android 6.0; NEM-AL10 Build/HONORNEM-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043906 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060133) NetType/WIFI Language/zh_CN
}
根据User-Agent可以判断目标用户常用的终端和浏览器版本(一个HR小姐姐她应该不会有需要修改UA的情况吧~)。如果多个目标用户使用目标公司的办公电脑,那么User-Agent就会大概率相同,而且有些账号可能是公司内部多人使用,因此需要鉴别每一个人的浏览器。fingerprintjs就这能计算出浏览器的唯一标识,我们则只需要记录这个唯一表示就可以区分每一个浏览器。长时间的记录和分析后,就可以脑补出如下信息:
根据用户名判断,应该是一个年轻貌美的运营小姐姐。她在过去三周的时间里,她每天在上午9点40分左右会上论坛后台看看有没有什么新情况。6月10号可能是比较特殊的一天,她加班了,晚上10点13分了,她的账号仍然有登录的情况。6月12号和13号,她是不是忙的生病了,账号由另一个浏览器登录。不过还好在14号熟悉的她回来了。
明确目标
通过大量的信息收集,可以确定所要针对的目标用户。根据目标用户的习惯和浏览器等等,制定相应的诱饵。尤其是浏览器信息非常重要,搞过前端开发的都应该晓得适配不同浏览器是一件不太有趣的事情,尤其IE这个大魔王。为了提高针对性,可以限制水坑触发的时间、操作系统、目标的来源IP、浏览器的类型或版本等等。这些工作是十分重要的,不然很可能闹出一个笑话:目标用户用Firefox打开了页面、却弹出了Chrome更新提示。(身边朋友的真实案例)。
诱饵
确定目标用户后,且分析出不是一个计算机专业人员,那么就可以选择布置水坑,投递诱饵了。诱饵的选择有很多,浏览器升级、Flash升级等等,反正就是忽悠目标下载一个可执行程序。值得一提的是,Flash这玩意已经退出历史舞台,仅国内的官网还保留着。不过骗骗非计算机背景人员应该还是可以的。网上流传很广的Flash钓鱼,这边随手贴一篇大伙乐呵乐呵。
释放器
释放器是释放恶意程序和正常程序的载体。啥意思?当目标用户下载了一个浏览器更新程序,结果双击点开,却无事发生,显然这样会让目标用户起疑心。释放器可以先释放恶意程序,然后释放正常程序,这样看起来流程正常了许多。另外,使用释放器还有一个好处,就是可以回传信息。由于释放器是我们自己编写的程序,虽然可以自定义很多功能,但还是保持越精简越好,通常完成释放程序,回传一条信息即可。回传信息的方式有很多种,基于HTTP/s或者DNS等等都可以,目的是为了让服务端知道目标用户是否下载并点开了所谓的更新程序。
风筝的线
从水坑部署上的时候开始,就像风筝上了天,需要通过"风筝线"把控“风筝的高度”。通过Js代码增加若干个探测点,可以监控记录用户访问、弹窗、下载、运行和木马上线的每一个时刻。以确保每一个环节都在自己的掌控之中,当释放器发出回传信息后,水坑则自动失效,后续则是观察马的上线情况。
小结
水坑攻击是人层面上的攻防,技术层面上只能最大程度的限制,不能武装人的大脑。Chrome就会将可疑的文件标记成红色,可还是有人中招。简单实现了一下各环节的代码,踩了一些坑。信息收集是最花费时间的一个环节,这个时间可能长达数周。