最近做了一个小破解,仅是练习Go语言之用,不作为其他商业用途,若有不妥欢迎大家指正...
Sina登录的大致流程如下:
1、Client发送一个登录请求:4f0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2&6i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3M7s2u0G2k6X3W2D9k6g2)9J5c8Y4g2F1L8r3!0Y4K9h3^5`.
2、Server响应请求,返回Set_Cookies字段要求Client设置下次请求的cookies(ps:这步我忽略了,实则不该省去)
3、Client请求:
cc4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2k6$3W2F1i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3M7%4y4G2i4K6u0r3M7s2u0W2L8r3!0Y4K9h3&6Q4x3X3g2H3K9s2m8Q4x3@1j5`.
entry=account&callback=pluginSSOController.preloginCallBack&su=base64用户名
&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_= 请求时间戳(我有偷懒省去了)
4、Server响应请求,返回一些关键参数servertime、nonce、pubkey、rsakv、account,这些参数是下面发送POST
请求需要用到的重要参数
5、根据 pubkey 给 passwd 加密,之后作为一个 sp 字段放在POST包中发送给Server
6、Client发送POST数据包
7、Server影响Client,返回一个数据包,retcode标志是否成功,若成功,retcode = 0,若失败,retcode = 非零值
一、登录sina账号链接:51eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2&6i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3M7s2u0G2k6X3W2D9k6g2)9J5c8Y4g2F1L8r3!0Y4K9h3^5`.
由于我省去了cookies设置,所以此处就不放WireShark抓包的图了...
二、开始登录-->登录界面

三、登录过程,使用截获数据包软件WireShark/BurpSuite,认证成功POST包内容如下:

可以很容易的得出,发送POST包的地址: 729K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2k6$3W2F1i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3M7%4y4G2i4K6u0r3L8r3!0Y4K9h3&6Q4x3X3g2H3K9s2m8Q4x3@1k6U0L8r3W2W2L8Y4c8Q4x3@1c8K6M7$3!0D9L8$3N6A6L8W2)9J5k6h3A6K6i4K6t1^5N6U0q4Q4x3X3f1@1i4K6u0W2x3e0W2Q4x3U0W2Q4x3U0k6S2L8i4m8Q4x3@1u0Q4y4h3k6Q4x3@1b7`.
这里是个时间戳,也可以省略,它的效果图是:

解析关键参数:
1)su : base64加密的用户名
2)sp : 经过服务器返回的公钥(后面提到)加密的密码
3)servertime :请求时间戳
4)nonce : 计算加密密码时候使用
5)rsakv :其实我也不知道是嘛
6)sr :当前使用机器分辨率,这里根据自己的机器分辨率修改就可以了
其中,servertime、nonce、rsakv可以从服务器返回,从分析截获数据包可知请求的地址,先上个数据包截图:
=========>>>请求包 WireShark抓包内容如下:

=========>>>对应的Wireshark抓到的响应包如下:

得出请求地址:
cfeK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2k6$3W2F1i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3M7%4y4G2i4K6u0r3M7s2u0W2L8r3!0Y4K9h3&6Q4x3X3g2H3K9s2m8Q4x3@1j5`.
entry=account&callback=pluginSSOController.preloginCallBack&su=base64用户名
&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=
上图中Pubkey是比较重要的,是用于加密密码的公钥
四、下面就是 填充POST包里的参数,发送POST包验证了,没有圈出的POST包参数是固定的,那么最重要的是获取
servertime、nonce、pubkey、rsakv、account,填充到POST包中的su、sp、servertime、nonce、rsakv
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课