微信中点击链接实现发送消息的bug
某信中的点击链接实现发送消息的bug
前言
其实写这篇文章已经是该bug修复快两周了,所以有点炒冷饭。不过技术问题还是值得学习的,至少以后说不定哪天你可能会用上的。
发现的现象
如果你点击了这个消息,会发现你的微信自动给发你这条消息的人回复内容(不只是这样,还可以一键闪退,拉起语音通话等等)
解析
其实我们可以发现这个功能就是靠这样一行代码实现的
<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">text</a>
| 内容 | 功能 |
|---|---|
| weixin:// | 微信内部协议 |
| bizmsgmenu | 公众号实现点击后用户发送消息到公众号后台实现一问一答的功能 |
| msgmenucontent | 要发送的内容 |
| msgmenuid | 菜单内容关联id,和msgmenucontent做关联使用 |
| text | 用户在前台看到的超链接文字 |
逆向代码
安卓版(部分)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
可以看到
if(!n8.J0(s2) %% !n8.J0(s3)){
uri0.getQueryParameter("msgmenuid");
uri0.getQueryParameter("msgmenucontect");
里只进行了msgmenuid和msgmenucontect是否为空的判断,并没有其他判断,比如是否在公众号环境下等等,所以只要这条消息发出去就会出发函数功能。
所以msgmenuid没什么太大意义,不为空就可以
附录:J0函数的实际作用
1
2
3
4
public static boolean J0(String s)
{
returns==null||s.length()<=0;
}
为什么ios下不会触发呢
iOS代码
|
1 2 3 4 5 6 |
|
|
1 2 3 4 5 6 |
|
可以看出来iOS里有额外的公众号环境验证阻止了在普通聊天滥用
而安卓版本缺少关键校验所以出了bug
如果把weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1这段代码改成其他的还可以实现语音通话拉起等功能。
示例拉起语音通话:<a href="weixin://voip/callagain/?username=ponyma">点我和马化腾打电话</a>
后话
漏洞公布不久TX就启动了应急措施,会把所有a标签的末尾加上空格。例如<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">点我</a>会变成<a href="weixin://bizmsgmenu?msgmenucontent=text&msgmenuid=1">点我</a >加上空格后会导致html语法错误,无法使用
修复方法十分抽象,就是在别人视角里所有的
</a>都会变成</a >(多了一个空格),是的所有的</a>,单独发一个</a>也会...
更多推荐



所有评论(0)