白加黑免杀-利用微信&QQ上线CS,轻松过某绒、某卫士、Defender

【声明】本文所涉及的技术、思路和工具仅用于安全测试和防御研究,切勿将其用于非法入侵或攻击他人系统以及盈利等目的,一切后果由操作者自行承担!!!

前言

       通常在运行一个EXE文件的时候,会先加载支持该EXE文件运行的DLL(动态链接库)文件,那如果把其中一个DLL文件替换成恶意DLL,DLL里面注入一个后门文件, 当被攻击者双击执行程序时,就会加载恶意DLL,进而触发后门文件,最终达到控制对方主机的目的。

       替换DLL操作,也就是我们所说的“DLL劫持”,而“白+黑”里面的“白”则指的是EXE文件(带有数字签名),“黑”则指替换的恶意DLL。

0x01 DLL 劫持原理

当一个可执行文件在Windows上运行时,系统的加载器会将该可执行模块映射到进程的地址空间中。加载器会分析可执行模块的导入表,并寻找所需的DLL文件,并将它们映射到进程的地址空间中。导入表中只包含DLL的名称而没有路径信息,因此加载器必须在磁盘上搜索DLL文件。搜索路径按照特定规则顺序进行,恶意程序就是利用了这个特点,伪造了一个与系统DLL同名的DLL文件,该文件具有相同的导出表,并将每个导出函数重定向到真正的系统DLL函数。这样,当程序调用系统DLL时,它首先调用了在当前目录下伪造的DLL文件,完成相关功能后,再跳转到真正的系统DLL同名函数进行执行。

Windows XP SP2的系统以上DLL文件加载的搜索顺序如下:

(1)可执行程序加载的目录

(2)系统目录

(3)16位系统目录

(4)Windows目录

(5)运行某文件的所在目录

(6)路径环境变量中列出的目录

0x02 微信测试-弹"计算器弹窗"

首先寻找带有数字签名的可执行文件(这里我是利用微信),且必须是正常的签名才可以,直接右键->属性查看,因为带有数字签名的,通常都是被杀软标记为白名单的。

图片

现在需要寻找一个被劫持的DLL文件,但是目前并不清楚,运行微信,会加载哪些DLL文件,这里有两种方式可以查找:

  • 静态查找

把EXE文件单独放到一个文件夹中,执行,会报错缺少xxx.dll文件,如下图:

图片

这种方式虽然可以找到加载的dll文件,但是并不完整

  • 动态查找

使用Process Monitor工具或者其他进程查看工具也可以,查找加载的DLL文件,根据自己的需求先过滤出需要的进程,方便查找

接下来,选择一个dll(这里我选择的是dwmapi.dll),利用Visual Studio来伪造dwmapi.dll

挖掘白文件dll小技巧:

1) 最好选择系统搜索路径较靠前的DLL文件进行劫持,以确保被劫持的DLL文件被优先加载

2) 劫持应用中不存在的dll时(Result值为NAME NOT FOUND),最好选择loadlibrary这个api的dll(因为这个dll的调用栈中存在LoadLibrary(EX),也就表明这个dll是动态加载的),这时不需要再伪造dll所调用的导出函数

3) 劫持应用中存在的dll时(Result值为SUCCESS),这时需要伪造dll所调用的函数(可以使用VS自带的工具dumpbin查找),因此最好选择调用函数较少的DLL文件

首先创建项目->动态链接库

图片

伪造dll代码,这里测试调用计算器:

图片

将伪造好的dll,重命名dwmapi.dll,放到微信的当前路径下:

图片

这时执行WeChat.exe,会发现弹出了计算器窗口,说明上面的操作过程均是正确的

图片

0x03 QQ测试-上线Cobalt Strike

这里我们利用QQ来演示,但是这里我们选择去劫持应用中存在的dll文件,使用图片分离的方式来上线CS。

同样的,使用Process Monitor过滤出dll文件,过滤操作如下图:

图片

这里,按照按照前面所讲到的dll文件搜索顺序,所以先找当前路径下的dll文件,我这里选择伪造的是TaskTray.dll(选择dll依然按照我们前面所讲到的技巧去选择,该dll是已经测试过的)。

图片

这时伪造dll文件,我们有两个点特别需要注意,否则上不了线。

第一点是我们需要知道我们伪造的dll被调用时会用到哪些函数,这里使用VS自带的工具dumpbin来查看,具体用法如下图:

第二点就是我们需要确定伪造的dll是多少位的,这涉及到后面我们去生成shellcode的位数要对应,同样使用VS自带的dumpbin工具可以查看,使用方式如下图:

图片

经过查看,发现该dll是32位的,接下来,去生成32位的shellcode,打开CS->有效载荷->Payload生成器,32位的shellcode一定不能勾选使用x64 payload

图片

然后使用工具DKMC把shellcode写进图片里面,这里需要python2环境,具体用法如下:

图片

进入DKMC后,选择gen,将刚才生成的shellcode写入

图片

最后run执行,可以看到在DKMC的路径下生成了一个bmp后缀的图片

所有需要准备的内容已经准备完成,现在使用VS来生成伪造的dll文件,在编写伪造dll代码时,需要在dll调用的函数前面加上extern “C”,因为在构建dll的时候,编译器会为函数名进行改编,但是在构建可执行文件的时候,编译器不会对函数名进行更改,这时候当链接器试图链接可执行文件的时候,会发现可执行文件引用了一个不存在的符号并报错,因此这里在函数前面加上extern “C”就是来告诉我们的编译器不对变量名和函数名进行改编。

图片

加载器部分代码:

图片

然后将生成的dll文件,同图片一起放到QQ.exe路径下面,运行QQ,CS上线

图片

0x04 杀软效果检测

火绒:

图片

360:

图片

win Defender:

图片

尾声 

        通过前面讲到的方式,火绒、360以及Defender都能搞定,那么,除了上线以外,我们还可以运用到权限维持里面,比如说我们添加注册表,实现开机自启动的功能,那不就可以每次重启,都能拿到对方权限。

本文所涉及工具、源码,关注公众号【404攻防实验室】,回复【240202】,即可获得!!!

  • 27
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这里提供一个Python的实现,使用numpy库来生成随机数: ```python import numpy as np # 生成随机数 np.random.seed(1) record = np.random.randint(0, 21, size=(7, 4)) # 输出周二和周六,感康的销量 print("周二,感康的销量:", record[1, 1]) print("周六,感康的销量:", record[5, 1]) # 输出周二到周六的药品销售情况 print("周二到周六的药品销售情况:") print(" 泰诺 感康 白加 百服宁") print(record[1:6, :]) # 输出药品销量为0的记录 print("药品销量为0的记录:") for i in range(7): for j in range(4): if record[i, j] == 0: print("周{},{}销量为0".format(i+1, ["泰诺", "感康", "白加", "百服宁"][j])) # 输出四种药品的销量平均值 print("四种药品的销量平均值:", np.mean(record, axis=0)) # 输出按每种药品的销量排序的结果 print("按每种药品的销量排序的结果:") print(["泰诺", "感康", "白加", "百服宁"]) print(np.sort(record, axis=0)) ``` 输出结果如下: ``` 周二,感康的销量: 0 周六,感康的销量: 14 周二到周六的药品销售情况: 泰诺 感康 白加 百服宁 [[11 0 8 9] [12 0 3 5] [ 6 2 2 18] [ 4 7 9 1] [ 0 14 0 2]] 药品销量为0的记录: 周1,感康销量为0 周2,感康销量为0 周3,泰诺销量为0 周3,感康销量为0 周4,泰诺销量为0 周4,百服宁销量为0 周5,泰诺销量为0 周5,感康销量为0 周5,白加销量为0 周6,泰诺销量为0 周6,白加销量为0 四种药品的销量平均值: [ 5.57142857 3.71428571 5.28571429 10.71428571] 按每种药品的销量排序的结果: ['泰诺', '感康', '白加', '百服宁'] [[ 0 0 0 1] [ 4 0 2 2] [ 6 2 3 5] [11 7 8 9] [12 14 9 18]] ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值