【攻防技术】信息收集之公众号自动收集
字数 953 2025-08-10 22:08:13
微信公众号自动化信息收集技术详解
0x00 信息收集的重要性
渗透测试的本质在于信息收集,特别是在边界突破阶段,信息收集是前置条件。经过多年实战攻防积累,信息收集已形成标准化流程,自动化信息收集工具的建设成为趋势。
关键点:
- 防守方通常将主要力量集中在边界Web系统上
- 移动端资产(如微信公众号)往往成为防守薄弱环节
- 自动化收集能提高效率并形成系统化资产清单
0x01 企业信息查询方法
常用企业信息查询平台
- 天眼查
- 企查查
- 爱企查
- 启信宝
- 小蓝本
数据获取方式
1. 前端爬取
- 优点:免费
- 缺点:
- 反爬虫机制严格(验证码、频率限制)
- 技术门槛较高(需绕过反爬措施)
2. API接口调用
- 优点:
- 使用方便
- 免去反爬对抗
- 缺点:需要付费(成本随查询量增加)
天眼查API示例代码
def GetWechatOfficialAccount(self, keyword, pageNum=1, pageSize=20):
url = "http://open.api.tianyancha.com/services/open/ipr/publicWeChat/2.0?keyword=%s&pageNum=%s&pageSize=%s" % (keyword, pageNum, pageSize)
headers = {'Authorization': {天眼查Token}}
try:
response = requests.get(url, headers=headers)
except Exception as err:
logger.error(str(err))
return None
data = response.json()
0x02 搜索引擎收集方法
搜狗微信搜索特点
- 与微信有合作关系,可直接搜索公众号
- 结果数量通常比企业信息平台更多
- 基础搜索URL:
https://weixin.sogou.com/weixin?type=1&s_from=input&query={关键字}&ie=utf8&_sug_=n&_sug_type_=&page={页数}
反爬虫机制与绕过方法
常见反爬对抗策略
- 硬钢验证码(OCR识别等)
- 更换IP(代理池)
- 修改请求cookie绕过
搜狗反爬特点
- 通过HTTP请求头中的特殊cookie字段实现频率检测
- 关键cookie字段:
SNUID
搜狗cookie获取流程
- 访问搜狗视频页面(频率限制较宽松):
https://v.sogou.com/?forceredirect=2&ie=utf8 - 从响应中提取新的
SNUID值 - 更新请求头中的cookie
完整实现代码
import urllib.parse
import requests
from lxml import etree
from fake_useragent import UserAgent
import time, sys, os, math, json, random
# 生成随机UA
ua = UserAgent(browsers=["chrome", "edge", "internet explorer", "firefox", "safari"])
global_headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
# ...其他标准请求头...
"Cookie": "SUID=10800C75492CA20A000000006145E582; SUV=1641002706609755; ssuid=8628497906; IPLOC=CN1200; cuid=AAERmghDQwAAAAqgHl6xlgAASQU=; ABTEST=0|1684314665|v1; JSESSIONID=aaaXmp_IROcwx7NZRDDEy; PHPSESSID=snjidnapfi0p1lsac6jgb8huu1; SNUID=8A0A5AACD7DD2C295C858FD2D8397552; ariaDefaultTheme=undefined",
# ...其他标准请求头...
"User-Agent": ua.random
}
def Chinese2Url(chinese_context):
return urllib.parse.quote(chinese_context)
def GetWechatofficialAccount(keyword_url, headers=global_headers, page=1):
url = "https://weixin.sogou.com/weixin?query="+keyword_url+"&_sug_type_=&s_from=input&_sug_=n&type=1&ie=utf8&page=" + str(page)
xpath_get_official_account = "//li/div/div[2]/p[1]/a/text()"
rep = requests.get(url, headers=headers)
if "请输入验证码" in rep.text:
headers = GetNewCookieHeaders()
rep = requests.get(url, headers=headers)
global global_headers
global_headers = headers
response = rep.text.replace("<em><!--red_beg-", "").replace("<!--red_end--></em>", "")
etree_obj = etree.HTML(response)
wechat_official_account = etree_obj.xpath(xpath_get_official_account)
if(' 1:
page = 2
while (page <= page_num):
wechat_official_account = sum([wechat_official_account, GetWechatofficialAccount(keyword_url, headers=global_headers, page=page)], [])
print("page = %s" % page)
page += 1
wechat_official_account = list(set(wechat_official_account))
print(wechat_official_account)
0x03 技术要点总结
- 随机User-Agent:使用fake_useragent库生成多样化请求头
- 中文编码处理:使用urllib.parse.quote进行URL编码
- XPath解析:精准定位页面中的公众号名称
- 反爬绕过机制:
- 检测"请输入验证码"提示
- 自动获取新SNUID并更新请求头
- 分页处理:自动计算总页数并遍历所有结果
- 结果去重:使用set()去除重复公众号名称
0x04 优化建议
- 代理池集成:结合IP代理服务增强反爬能力
- 验证码识别:作为SNUID失效的备用方案
- 结果存储:将收集结果保存到数据库或文件
- 异常处理:增强对各种网络异常和反爬措施的容错能力
- 性能优化:引入异步请求提高收集效率
通过以上方法,可以构建一个稳定高效的微信公众号自动化收集工具,为渗透测试和信息收集工作提供有力支持。