从公众号与APP切入:深度信息收集实战与攻击面构建指南
1. 项目概述一次从公开资产切入的深度信息收集实战最近在复盘一个内部授权的安全评估项目整个过程挺有意思不是那种直接对着IP段一顿猛扫的常规操作而是从目标单位的微信公众号和官方APP这两个看似平常的“门面”入手像剥洋葱一样一层层挖出了不少有价值的信息甚至为后续的渗透测试铺平了道路。很多朋友觉得信息收集就是跑跑子域名、扫扫端口其实远不止于此。尤其是在当前移动互联网时代企业的微信公众号和APP本身就是一座信息富矿里面藏着大量开发人员无意中遗留的线索、配置甚至是直接的安全漏洞。这次实战我就把整个从这两个“前端入口”进行信息收集、关联分析到最后形成有效攻击面的完整流程和思考逻辑给大家拆解一遍。无论你是安全工程师、渗透测试人员还是对企业安全建设感兴趣的开发者理解这套从公开应用逆向推导内部资产的方法都能帮你更立体地认识自身或客户的安全边界。这不仅仅是技术操作更是一种攻击者视角的思维训练。2. 核心思路与策略为什么是公众号和APP在动手之前得先想清楚为什么选择这两个点作为突破口。这背后是基于对现代企业数字资产暴露面的一个基本判断。2.1 公众号被忽视的“企业名片”与情报源微信公众号尤其是服务号和企业号早已超越了单纯的内容发布功能。它本质上是一个Web应用的轻量级前端背后连接着服务器API、数据库以及各种第三方服务。从安全角度看它暴露出几个关键攻击面交互功能中的接口暴露很多公众号集成了查订单、查进度、在线客服、会员中心等功能。这些功能都需要调用后台API。通过抓包分析这些请求我们能直接拿到API的URL、参数结构甚至发现未授权访问、参数遍历等漏洞。JS文件与前端源码泄露公众号内嵌的H5页面其JavaScript文件里可能硬编码了API密钥、云存储路径、内部系统地址如测试环境、管理后台等敏感信息。开发者为了方便常常把这些信息直接写在前端代码里。历史消息与招聘信息翻看公众号的历史文章特别是技术团队发布的招聘启事、产品更新日志可能会透露他们使用的技术栈如“我们全面转向了Spring Cloud”、“使用了Redis集群”、第三方服务商如“接入了XX云的短信服务”甚至是办公地点、部门架构这些都能用于社会工程学攻击或针对性漏洞利用。我的策略是不把公众号当成一个黑盒而是把它当作一个通向企业后端系统的“接线板”目标是找到所有从这块“接线板”延伸出去的“线头”。2.2 官方APP移动端的“完整镜像”相比公众号官方APP包含的信息维度更广、更深。它是一个编译后的二进制文件但通过逆向工程我们可以窥见其内部逻辑。硬编码敏感信息这是最常见的问题。API密钥、数据库连接字符串尽管少见、第三方SDK的Token、加密盐值等可能会以明文或简单编码的形式存放在配置文件中。API接口全集APP与服务器通信的所有接口几乎都会在代码中有所体现。通过静态分析反编译后阅读代码和动态分析抓包可以绘制出完整的后端接口地图。证书与SSL Pinning绕过分析APP使用的证书有时能发现内部域名。如果APP使用了SSL Pinning证书绑定来防止中间人攻击我们需要掌握绕过它的技术以便进行深入的动态测试。业务逻辑漏洞的入口很多业务逻辑漏洞如越权、重放攻击、竞争条件等其触发点就在APP的某个操作流程中。理解了APP的逻辑才能设计出有效的测试用例。核心思路总结我们的目标不是直接攻破公众号或APP本身虽然也有可能而是将它们作为“探针”和“地图”收集关于目标后端服务器、API架构、子域名、第三方依赖乃至组织信息的碎片然后通过关联分析拼凑出一张可供后续渗透测试使用的“靶场蓝图”。3. 针对微信公众号的信息收集实操拿到目标公众号后我一般会在电脑端和手机端协同操作工具以Burp Suite、浏览器开发者工具为主。3.1 基础信息抓取与页面分析首先在电脑上使用浏览器访问公众号历史消息页面或具体功能页。打开浏览器开发者工具F12切换到“网络”(Network)选项卡。全面抓包清空记录然后在公众号页面内进行各种交互点击每个菜单、查询、提交表单。目标是捕获所有发出的HTTP/HTTPS请求。接口识别与归类重点关注请求URL。通常公众号的后端接口会有明显的路径特征比如包含/api/,/wechat/,/mobile/或者域名可能是api.xxx.com,m.xxx.com等。将所有这些接口URL整理到一个列表中。参数分析仔细查看每个请求的参数。注意像userId,orderId,token,openid这类参数。思考这些参数是如何生成的是递增的数字吗可否遍历哪些参数是用于身份认证的如token它是否容易被伪造或重放是否存在像debugtrue这样的参数可能开启调试模式实操心得很多公众号的API对openid的校验并不严格。openid是微信用户相对于该公众号的唯一标识。在某些查询类接口中尝试修改openid参数为其他值如果接口返回了其他用户的openid可能会造成越权访问直接看到他人信息。这是公众号类应用一个非常高发的漏洞点。3.2 JS文件深度挖掘这是信息收集的“富矿”。在开发者工具的“源代码”(Sources)选项卡中找到该公众号H5页面加载的所有JS文件。搜索关键词在JS文件内容中可使用全局搜索查找以下关键词apikey,secret,password,tokenurl,domain,host,endpointdebug,test,staging,dev这些可能指向测试环境oss,cos,bucket可能暴露云存储配置信息具体的第三方服务域名如qcloud.com,aliyun.com分析前端逻辑阅读JS代码理解前端是如何构造请求、处理响应的。有时能发现前端进行的输入校验这可以帮助我们设计绕过前端校验、直接攻击后端API的Payload。示例发现在一次测试中我在一个名为config.js的文件里发现了如下内容window.APP_CONFIG { apiBaseUrl: https://test-api.目标公司.com/v2, ossBucket: prod-bucket-targetcompany, ossRegion: oss-cn-shenzhen, mapKey: abcdefghijklmnopqrstuvwxyz123456 };这简直是“宝藏”。我立刻得到了一个测试环境的API地址test-api.目标公司.com生产环境OSS存储桶名称和区域为后续针对云存储的测试提供了目标。一个高德或百度地图的API密钥虽然不一定能直接利用但丰富了信息维度。3.3 公众号本身元信息利用账号主体在公众号详情页查看账号主体信息。如果是企业会显示公司全称。用这个公司全称可以去工信部备案网站、企业信用信息公示系统等平台查询该公司的网站备案信息从而获得其官网域名这是子域名爆破的起点。文章内容挖掘使用搜狗微信搜索或其他能搜索公众号文章的引擎搜索目标公司名称、产品名称可能会找到其技术团队运营的其他公众号、博客从中发现更多的技术细节和人员信息。4. 针对官方APP的逆向与动态分析对于APP我们需要静态和动态分析相结合。准备一台已Root的安卓测试手机或模拟器如雷电模拟器以及电脑上的分析工具。4.1 基础静态分析解包与反编译获取APK从官方应用市场下载或直接通过一些第三方APK下载网站获取。确保版本较新。使用工具Apktool用于解包APK获取资源文件、AndroidManifest.xml清单文件包含权限、组件、可能的部分域名和classes.dex文件。dex2jar JD-GUI或Jadx将classes.dex转换为Jar包然后用反编译器查看Java源代码。我个人更推荐Jadx它是一体化工具图形界面友好搜索功能强大。关键搜索在反编译后的代码中进行全局搜索关键词与JS文件搜索类似但要加上移动端特有的http://,https://直接查找所有URL.com,.cn查找域名SharedPreferences,getString查找本地存储的配置sqlite,database查找数据库相关操作特定第三方库的初始化代码如Umeng,JPush,Bugly这些库的配置里可能包含AppKey等。4.2 深入代码审计寻找硬编码与逻辑漏洞静态分析不只是找字符串更要尝试理解代码逻辑。网络请求模块找到负责网络请求的类通常包含HttpClient,OkHttp,Retrofit等关键词。分析请求是如何组装的加密/签名算法是什么头部信息如何添加。这里可能发现固定的User-Agent、自定义的认证头或者脆弱的签名算法。加密解密函数搜索encrypt,decrypt,AES,DES,MD5,SHA等关键词。找到加解密函数分析密钥是否硬编码、加密模式是否不安全如ECB模式。有时甚至能直接找到解码函数将抓包到的加密数据解密。配置文件检查assets,res/raw目录下的文件以及SharedPreferences的默认存储值。常见文件名如config.properties,setting.xml。踩坑记录有一次分析一个金融类APP发现其将所有接口的URL都放在一个url_config.xml文件里并且根据BuildConfig.DEBUG标志位切换测试环境和生产环境地址。通过修改反编译后的Smali代码强制让APP在运行时认为自己是DEBUG版本成功将其流量导到了测试环境而测试环境的防护通常弱得多。4.3 动态分析抓包、调试与Hook静态分析获得蓝图动态分析才是实战。环境配置测试手机设置代理到电脑如Burp Suite。在手机上安装Burp或Charles的CA证书。对付SSL Pinning如果APP启用了SSL Pinning抓包会失败。常用绕过工具有Frida通过注入脚本在运行时绕过证书检查。需要一定的脚本编写能力。Objection基于Frida的命令行工具常用命令android sslpinning disable一键搞定很多情况。JustTrustMe模块适用于Xposed或Magisk这是一个系统级模块可以禁用所有APP的证书验证简单粗暴但有效。全面流量捕获启动APP遍历所有功能点。在Burp Suite中观察所有请求。重点关注登录/注册流程密码是否明文传输是否有验证码可爆破或回显身份认证凭证登录成功后返回的token、session是如何存储和后续使用的是放在Cookie里还是自定义头部接口参数动态分析时可以更直观地看到参数在真实请求中的样子尝试修改它们进行测试。文件系统监控使用adb shell连接手机在APP运行过程中监控其私有数据目录 (/data/data/包名/)看是否在本地存储了敏感数据如缓存图片、日志文件、数据库文件等。5. 信息关联与攻击面构建收集到的信息是零散的就像拼图碎片。这一步就是把它们拼成完整的图画。5.1 资产关联与扩展域名收集将从JS、APP、公众号文章、备案信息中找到的所有域名和子域名汇总。使用工具如subfinder,amass,OneForAll进行子域名爆破。对发现的所有域名进行端口扫描nmap,masscan识别开放的服务Web, 数据库, 中间件等。API接口聚合将从公众号抓包和APP分析得到的所有API接口按功能模块整理。特别注意那些看起来像管理功能的接口路径中包含admin,manage,backstage等。人员与组织信息从招聘文章、技术博客中提取的技术栈、人员昵称、邮箱后缀如targetcompany.com等信息可用于制作钓鱼字典或进行密码喷洒攻击。5.2 漏洞初步探测与验证在深入渗透之前先进行一轮快速筛查。目录/文件扫描对发现的Web站点和API域名使用dirsearch,ffuf等工具扫描隐藏目录、备份文件如.git,.svn,.bak,wwwroot.zip、配置文件等。API安全测试未授权访问直接访问那些需要认证的API接口看是否返回数据。越权测试修改请求中的ID参数看是否能访问其他用户的数据。注入测试对API的参数进行SQL注入、NoSQL注入、命令注入的简单测试。敏感信息泄露检查API的响应头、错误信息是否暴露服务器版本、路径、数据库信息等。第三方服务测试如果发现了OSS存储桶信息尝试直接访问https://prod-bucket-targetcompany.oss-cn-shenzhen.aliyuncs.com或使用工具如ossbrowser、CloudBrute来测试存储桶的权限配置是否可公开列出、上传、下载。5.3 构建攻击路径将以上所有信息整合形成几条清晰的攻击路径假设路径A由公众号JS泄露引发测试环境API (test-api.目标公司.com) - 可能存在弱口令或默认口令的管理后台 - 获取更高级权限。路径B由APP接口发现主站API (api.目标公司.com) 的某个查询接口存在ID遍历漏洞 - 获取大量用户敏感数据。路径C由资产扫描发现某个被遗忘的子公司官网 (old.targetcompany.com) 使用了存在已知漏洞的框架版本如Struts2, ThinkPHP- 直接获取服务器权限。6. 常见问题与排查技巧实录在实际操作中总会遇到各种问题。这里记录几个典型场景和我的解决思路。6.1 抓包时APP无网络或证书错误现象设置代理后APP无法连接网络或提示“证书错误”、“网络连接失败”。排查检查代理设置确保手机Wi-Fi代理设置正确电脑防火墙允许了代理端口连接。确认证书安装确保Burp/Charles的CA证书已正确安装到手机的系统信任证书库中而不仅仅是用户证书库。在安卓7.0以上APP默认不信任用户安装的证书需要将证书移动到系统目录需Root或使用Magisk的“Move Certificates”模块。SSL Pinning这是最可能的原因。使用FridaObjection进行检测和绕过。如果不会用Frida可以尝试使用虚拟机或低版本安卓系统如5.1其SSL Pinning机制可能较弱。APP自身代理检测有些金融、社交类APP会检测是否设置了系统代理。解决办法是使用透明代理模式比如将测试手机接入一个设置了iptables规则进行流量转发的路由器或VPN网关这样APP层面感知不到代理的存在。6.2 反编译后的代码混淆严重无法阅读现象用Jadx打开后类名、方法名、变量名都是a,b,c,d这种无意义字符。应对不要慌混淆主要影响可读性但不改变程序逻辑。字符串常量、网络请求的URL通常不会被混淆。重点搜索字符串直接在全代码中搜索http、url、api、域名等关键词这些信息仍然可见。分析网络库调用即使类名混淆但像OkHttpClient.Builder()、Request.Builder().url()这样的关键方法调用链其模式相对固定可以通过特征来定位网络请求相关代码。动态调试辅助结合动态分析先抓包看到具体的请求和响应然后在混淆的代码中搜索关键的URL路径或参数名来定位处理该请求的代码区域。6.3 收集到的子域名或IP资产非常多如何确定优先级策略不是所有资产都值得投入同等精力。需要建立优先级。业务重要性优先测试与核心业务相关的系统如api.、mobile.、admin.、manage.、pay.、order.等子域名。技术特征通过横幅信息banner识别服务、框架、中间件版本。优先测试那些使用了已知存在高危漏洞的旧版本系统如Apache Struts2, ThinkPHP, Weblogic, Jenkins等。暴露面大小优先测试直接面向互联网、功能复杂的Web应用其次是简单的展示站最后是那些只有特定端口如SSH, RDP的服务。信息关联度优先测试从公众号/APP直接关联出来的域名和IP因为它们与核心业务链路最近突破后影响最大。6.4 疑似发现漏洞但无法稳定复现或利用现象测试时偶然触发了一个异常如报错信息泄露、一次未授权访问但再次请求时又正常了。排查记录所有上下文立即保存完整的HTTP请求和响应包括所有头、Cookie、参数。使用Burp Suite的“Copy as curl command”功能保存完整的请求命令。对比分析将触发异常的请求与正常请求进行逐字节对比找出差异点。可能是一个特殊的参数值、一个额外的头部、一个特定的时间戳甚至是请求顺序有关。检查会话状态确认两次请求的会话Cookie, Token是否一致。可能是第一次请求时处于未登录状态第二次已经自动登录了。考虑竞争条件有些漏洞属于“时间竞争”漏洞需要在极短的时间内发送多个请求。尝试使用Burp的Turbo Intruder或自己编写脚本进行并发测试。环境一致性确保测试环境没有变化比如IP是否被临时加入白名单、是否有WAF在学习和拦截。信息收集从来不是机械的工具堆砌而是一个需要不断思考、关联和验证的智力活动。从公众号和APP这类公开资产入手往往能绕过外围的防护直指开发与运维过程中留下的“痕迹”。这套方法的关键在于耐心和细心把每一个看似无用的信息碎片都捡起来最终它们可能会拼出一条通往核心系统的捷径。在整个过程中保持合法授权的边界意识至关重要我们所有的操作都应在明确授权的范围内进行目的是帮助客户发现问题加固防线。