暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

内存抓取凭据探索

SafeTime 2022-12-29
613

rotgrass@深蓝实验室

0x00 逆向很菜所以想到一条新路子


在进行单机信息收集时,必不可少的步骤是抓取各类工具的凭据,比如浏览器、终端工具(xshell、secureCRT)、数据库连接工具(navicat)等等;经过对这些密码抓取工具进行分析,发现绝大部分的抓取思路是通过对待抓取密码的程序进行逆向分析,还原凭据的加解密算法,再读取保存在本地的凭据密文,最后对密文进行恢复。


但是这种方法存在一定的局限性,一是需要一定的逆向基础,要对加解密算法进行逆向,如果碰到比较大型的程序,如各类浏览器或者加壳的程序,分析的难度会大大增加;二是需要有一定的代码基础,把密码抓取方法武器化的时候,要用代码实现解密过程,对于开发能力也是一个不小的挑战(使用c写过算法的朋友应该可以体会)。

所以我在对一些工具进行分析的时候想到,或许存在一种更为简单的密码抓取思路,不需要逆向或者很高的开发能力,就可以对工具进行分析,并开发稳定的武器化利用工具。

0x01 内存就是一个杂货铺

这个方法就是从内存中读取密码。大多数工具会将凭据的密文保存在本地配置文件或者注册表中,需要使用到密码时会先读取密码的密文,通过内置的算法进行解密,最后进行使用。抛开事实不谈,从内存中一定可以找到该凭据的明文。

如果我们可以定位该凭据明文在内存中的地址,并读取该地址的内容,就可以轻松读取到该明文凭据;这么做的好处是可以很好的降低之前密码抓取方法的难度,不需要逆向能力以及不需要使用代码实现各种加解密算法,就可以实现从分析到武器化的全部过程。

话不多说,我们上才艺。

0x02 不说了开冲

以我写了两天凭据密文解密算法仍然报错的ToDesk为例,来展示分析到实现的整个流程。(ToDesk版本为分析时的最新版v4.5.0.2)

ToDesk随机生成的连接密码是8位数的小写字母+数字的组合


在ToDesk运行的时候会启两个进程,用户权限的ToDesk.exe以及system权限的ToDesk_Service.exe

ToDesk_Service的权限比较高,在读取它内存的时候可能会需要一定的权限,所以我们先用ToDesk.exe开刀

用Cheat Engine对ToDesk.exe的内存进行搜索,找到密码字段,一共有两个位置


再更新一次密码,查看两个地址位的变化,DE39BFEBE8的值随着ToDesk密码的变化发生了变化,而1F9CC1DFBB0没有改变,所以以DE39BFEBE8地址位作为突破口


假如该密码对应的内存值是固定的,在Cheat Engine上会显示为基地址+偏移的形式

如微信进程的某些内存字段,基地址是WeChatWin.dll的内存地址,偏移是2BEE0F0,该偏移是固定的;如果想获取这个值,只需要获取WeChatWin.dll的内存地址,用该地址加上偏移再读取该地址在内存中对应的值就可以了


可以把上个例子中的WeChatWin.dll理解为一个“锚点”,然而在ToDesk.exe进程中并某个加载过的dll可以充当锚点,所以我的主要工作就是给连接密码字段的内存位置(DE39BFEBE8)找一个锚点

查看该地址附近的内存


发现的过程比较繁琐和蠢笨,好在经过了一段时间的探索找到了一个,地址位是DE39BFF8B0,对应的值是ToDesk.exe进程对应的用户名

DE39BFF8B0和DE39BFEBE8的偏移量是cc8,在多个操作系统、不同版本的ToDesk进行测试,该偏移量是固定的

锚点找到,实现的思路就比较简单了

0x03 实现过程的一点小细节

工具代码逻辑如下:


1、首先获取到ToDesk.exe进程对应的用户名

2、循环遍历ToDesk.exe进程的所有内存块,并对内存的状态进行判断,如果存在保护或者不可读等限制直接跳过,这样做的目的是为了加快搜索速度

3、从内存块中搜索用户名字段(可能不止一个)

4、循环获取该字段的地址后加上偏移量cc8,再读取新地址的值,如果该值为空就继续循环,不为空则输出这个密码的值。


代码很简单,而且可以快速的复用;如果想要抓取其他程序的凭据,对其进行分析之后如果存在类似的方法,对代码进行一点点修改就能快速武器化

0x04 测试效果还是有点东西的

操作系统版本是win11,ToDesk版本是当前最新的v4.5.0.2,抓取密码测试


手动更新密码之后,再次抓取密码



换一个环境和版本,在win7环境下,ToDesk版本为v4.5.0.0进行测试



0x05 还是存在很多问题啊啊啊啊

这种方法比较投机取巧,所以也存在了不少的问题


1、某些程序内存空间太大,寻找“锚点”的过程可能很繁琐,或者不存在锚点

2、某些程序在使用完明文的凭据后,会直接销毁掉对应的内存空间

3、不同程序版本以及不同的操作系统上,对应的偏移量可能也会不同,还需要进行大量的测



往期推荐



关于webshell免杀的应用思路

Gitlab常见漏洞复现及后利用

Druid-WallFilter sql防火墙绕过浅析

Impacket脚本利用指南(上)

yeswehack-19 sql注入挑战

攻防实战之Confluence后利用

TLS指纹模拟

文章转载自SafeTime,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论