freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

复现APT白利用及快速挖掘新的零日白利用
/xxs/ 2024-03-19 03:07:30 138053

一、什么是白利用

通俗一点说,就是利用已知签名可执行程序,通过重写原有dll导出函数生成新的dll,达到运行其它payload的目的,一般用于加载c2的payload功能,以及一些命令执行,后渗透等功能的插件,达到绕过防护杀软的目的。

二、为什么要使用白利用

以笔者的经验来说,签名程序无疑是一层保护伞,对于签名程序来说,防护软件默认是放行的,尤其是对大厂签名程序,列如,微软,谷歌,思科,VMware等等 。尤其来说,大量签名程序都存在被白利用的可能,这大大降低了攻击的成本,并且我至今认为,白利用是最好的免杀手段。

三、如何挖掘白利用

以复现曾经被APT成功利用过的白利用为例

  • 案例1、wsc_proxy.exe 白程序,我们看到VT全绿,VT链接:https://www.virustotal.com/gui/file/0a61fed98a6eda17fdc5de0b8900bba930e5bbca2f584cd29c1a3dd2137b3a6e

并且我们看到签名至今仍然有效

由于是已知白利用程序,加载的dll名称我们是知道的,我们只需要去下载对应版本的dll,下载dll的网站很多,这里不在赘叙,下载到的dll为wsc.dll.

我们将wsc_proxy.exe载入IDA静态分析一下。

1701215173_65667bc58a3dfd60649e5.png!small?1701215174548

我们发现其导入表中并未见到wsc.dll,应该说大部分的可执行程序都在其导入表中看不到需要调用的        dll,而是通过LoadLibrary动态调用,那么接下来我们将wsc_proxy.exe载入x64dbg动态调试一下

1701215639_65667d97b09246b644983.png!small?1701215640398

运行(无视所有异常) , 我们看到加载的dll名称为wsc.dll ,这里的前提是wsc_proxy.exe该路径下面存在        wsc.dll,如果不存在,依然看不到加载的dll名称,这里因为是复现,前提已经知道了可利用的dll名称,所以我们提前放好了wsc.dll ,那如果不知道的前提下,我们应该怎么去挖掘呢?后面讲挖掘案例的时候会讲到。

接下来将wsc.dll载入IDA分析其导出函数

1701216868_65668264ec40ae31ad1a2.png!small?1701216869658

我们看到有3个导出函数,我们怎么确定调用了哪些函数?继续回到x64dbg调试wsc_proxy.exe

1701216952_656682b8188353c2bcca7.png!small?1701216952944

通过搜索字符串找到wsc.dll的对应汇编代码位置

1701217004_656682ec180a3d06037ec.png!small?1701217004723

进入汇编视图

1701217070_6566832eb1ffa0bf40c65.png!small?1701217071470

这几行的意思是载入wsc.dll,然后调用run方法,这里我们知道了是调用方法,还需要知道参数,返回值,如果方法,参数,返回值不对,都不会去加载我们自己的dll. 继续回到IDA查看wsc.dll中的run方法

1701217521_656684f15ae74ae19d26e.png!small?1701217522533

总的来说,这是一个使用 stdcall 调用约定的函数 _run@4,它接受一个int类型参数,调用另一个函数 sub_100171E0,然后返回int ,那么我们根据这个函数,自己写一个dll, 来实现利用,弹个msgbox

现在,写一个DLL,它导出一个函数 run,该函数调用另一个函数 sub_100171E0 并返回其结果。我们将这个函数的参数和返回值定义为 int,因为这是32位系统中 dword 的对应C++数据类型 (因为我下载的dll是32位)

vs创建动态链接库项目wsc.dll

1701217915_6566867b36ef6e630d611.png!small?1701217915894


1701218795_656689eb0e8a6e0b5ee06.png!small?1701218795797

将wsc_proxy.exe和wsc.dll放在一起,执行wsc_proxy.exe

1701219012_65668ac437280cc9332e7.png!small?1701219013227

1701219080_65668b08e95b29722fe13.png!small?1701219082337

以上是对wsc_proxy.exe的复现和demo测试.

接下来我们将挖掘一个零日白利用

由于安装了sogou输入法,就测试一下吧,找到SGWizard.exe

1701220842_656691ea78bb9c59e0da3.png!small?1701220843403

载入x64dbg

1701220806_656691c6713e529dbbe11.png!small?1701220807176

发现可以利用的dll名称ImageMagik.dll

将SGWizard.exe载入IDA查看,在导入表里面很明显我们就发现了ImageMagik.dll,以及导出函数的名称

1701221010_656692926deb766fe2954.png!small?1701221011361

1701221033_656692a94ec4e5c30dd27.png!small?1701221034005

尝试重写这个dll,代码如下
1701221739_6566956b81c9f65018938.png!small?1701221740303将SGWizard.exe和ImageMagik.dll放在同目录下执行

1701221908_656696145f139888417b2.png!small?1701221910389

这是一个比较简单的白利用,因为在可执行文件里包含了导出的dll名称以及导出函数名称,不需要动态调试即可利用。

总结

挖掘案例中只是一个比较简单的白利用,因为在可执行文件里包含了导出的dll名称以及导出函数名称,不需要动态调试即可利用。
复现案例和挖掘案例中只是证明了可被利用的可行性,真正武器化加载payload,文章的开始便讲到了加载c2的payload,命令执行,后渗透插件等等,白利用的价值不仅仅是加载c2的payload, 在红队攻防的实战当中,往往会有很多利用点,而且极不容易被发现,比如c2的持久化,如果我们本来就存在一个启动项存在白利用,那么我们就可以在不增加启动项的情况下实现持久化,而且这是极其隐蔽的,其它的还有很多….

本人不是专业的二进制选手,也不会太多的逆向及调试技巧,所以挖掘白利用是一项门槛较低的工作,但是白利用对于对抗杀软是有非常大的帮助,攻防的本质是成本的对抗,这是我的理解,如果攻击成本较高,自然不会有人去尝试,当然APT除外,APT是不计成本的攻击,常规情况下,还是成本的对抗,文章写的不好,感谢各位。

写在最后

本人是一位从事安全行业多年的从事者,主要是以渗透为主,工作经历主要是红队方向,在这里想求得一份最好是远程类的工作。联系方式: YXFreHhAcHJvdG9uLm1l,感谢。

# 渗透测试 # 网络安全 # web安全 # 漏洞分析 # 网络安全技术
本文为 /xxs/ 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
/xxs/ LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 1 关注者
文章目录