✦
点击蓝字
关注我们
日期:2022-04-18
作者:Zero
介绍:浅谈 LOLBins。
1、 前言
LOLBins
在国内不怎么常说,但是白利用这个词肯定是耳熟能详,LOLBins
的全称是Living-Off-the-Land Binaries
,直接翻译过来是“生活在陆地上的二进制”,这样还是有些模糊,但是诸如Certutil
、msiexec
、Bitsadmin
、Windows Defender
等文件下载的技巧肯定不会陌生,没错,这些程序都属于LOLBins
的范畴。
那可以自行总结下,需要具备哪些特点才能够称为LOLBins
:
-
具备微软官方数字签名、第三方大公司的数字签名。
-
具备对渗透活动有帮助的功能。
-
可以做预期之外的事情。(执行代码、绕过系统限制)
互联网前辈的开源项目(LOLBAS、GTFOBins
)对 Windows、Linux
平台下的LOLBins
进行了标签化整理,可以很方便的查用,项目的预览如下:
如图可见,通过标签可以很方便的找到自己所需要的功能,虽然好用,但既然整理出来了,那这些程序也会是安全防护软件的重点关注对象。
以文件下载(Download
)需求为例,常见的Certutil
等程序已经被各路安全软件严防死守,这时如果拥有曝光度不高的文件下载方法就显得尤为重要,那么如何寻找文件下载方法呢?
为了寻找新的文件下载方法,当然是可以遍历系统中存在的所有可执行程序,对其进行手动或自动化的逆向分析,肯定会有所收获,但这太刻意了,要是有一种更容易上手,而且简单粗暴的方法,可以在电脑的日常使用过程中被动发现文件下载方法就好了!
本文抛砖引玉,提供一个思路切入点,这也是我在日常生活中无意发现的,独乐乐不如众乐乐。
2、 故事的开始
故事还要从一次与大佬朋友闲聊说起,朋友说弄到个远控主控端,但是做了使用限制,一机一程序,更换机器无法使用,便问我有没有兴趣看看,我一听,那我可太有兴趣了,得盘!
收到文件后,本打算先改革后缀以免不小心运行,然后再拖入虚拟机中分析,但是手欠直接点了双击,干了蠢事当然要自己善后,于是先对电脑进行了一遍检查,同时开启了火绒的联网控制,确认主控没有绑定后门之后便开始了分析过程,分析过程略,结果当然是顺利搞定,在这之后联网控制也一直没有关闭,于是偶然的一次联网提示弹窗引起了注意,弹窗如下图所示。
很普通的一个弹窗,本没有太在意,但是看到程序名中带有 Download
字样,再加上还有 Intel
公司的数字签名,好奇心让我想分析一下这个程序是不是可以作为文件下载技巧使用,再加上这是显卡驱动软件里的程序,装机量肯定是不小的,如果可以那岂不是白捡了个技巧。(PS:事后搜索才知道原来这早已被国外大佬发现)
3、分析过程
分析需要使用到一部分基础的逆向知识,首先定位到程序所在目录,将程序拷贝一份再进行食用(分析),这样以免误更改程序,给自己添麻烦,程序文件目录如下图所示:
主程序带有 Intel
公司的数字签名,如图所示:
对主角 GfxDownloadWrapper.exe
进行分析,首先需要看一下是什么语言编写的以及是否存在保护壳,然后才能使用相应的工具进行分析,这里使用DIE
进行检测。
可以看到没有保护壳,是一个.NET
程序,并且没有保护壳,直接上dnSpy
进行分析。
可以看到类名没有任何影响分析的混淆干扰,接下来定位到程序入口,分析代码。
代码也很干净,继续向下看,寻找与下载文件有关的代码,如下所示。
由于代码可读性非常好,很明显能够看出程序存在文件下载行为,通过webClient.DownloadFile()
方法进行文件下载,看一下该方法的实现,以确定函数定义。
public void DownloadFile(string address, string fileName)
再结合之前的关键代码。
string text2 = args[0];
string text3 = args[1];
webClient.DownloadFile(text2, text3);
综上就能够确定命令行进行下载文件的方式。
GfxDownloadWrapper.exe URL FileName
4、结果验证
首先在新目录中创建一个 test.txt
,内容为Hello World
,之后使用 Python
开一个文件服务器。
# 创建目录
mkdir demo
cd demo
# 创建文件
echo "Hello World!" > test.txt
type test.txt
# 开启文件服务器
python3 -m http.server
然后按照前面分析出来的命令调用方式进行测试。
# 前面分析出的文件下载命令行调用方式
GfxDownloadWrapper.exe "http://127.0.0.1:8000/test.txt" "./test.txt"
如果执行成功,文件服务器会看到访问记录,并且当前目录下会出现test.txt
,接下来执行测试一下。
由于过程十分简单,推测已有前辈分析过此程序,互联网中搜索发现确实如此,在上文提到的开源项目中也有所记录:
但是,也仅仅是记录了Download
功能,分析代码过程中看到有执行 DLL
中的函数相关代码,且 DLL
名称是通过参数传递,那这不就是一个代码执行功能吗?继续分析!
5、额外收获的代码执行功能
在上面的代码中,文件下载相关的代码上面还有一个分支,也就是程序入口最开始的那一块代码。
仔细阅读的话会发现那里是加载 DLL
,并调用其中指定名称的方法,既然 DLL
可控,那岂不是可以用来加载自己的 DLL
用于执行代码,那只执行指定名称的方法怎么办?写个和它名字一样的方法不就行了!
// 方法定义
public static void CacheCleanup(string args)
# 进行验证测试
GfxDownloadWrapper.exe "run" "d:testmydll.dll" "2" ";AppDataLocalIntelGamesx"
进行测试验证,比如弹个消息框、弹个计算器。
有些小技巧往往是在日常工作生活中发现的,这类可能不需要很高深的技术,只是需要多一点点的观察。
6、 结语
生活不只有网络世界,多出去走走,可能会有新的发现。如果本文对您有帮助,来个关注、点赞、在看就是对我们莫大的鼓励!
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。
团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。
对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。
分享
收藏
点赞
在看
原文始发于微信公众号(宸极实验室):『红蓝对抗』解密红队 LOLBins
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论