本文共1495字,预计阅读需要8分钟
今日阅读:
- 【2022 年】Python3 爬虫教程 - Session + Cookie 模拟登录爬取实战 小记:其实这篇文章写的并不是特别厉害,非常常规且基础的模拟登陆,但是给了我挺大启发。
- 在图书馆看了点实体书(漫画):《监狱学园1》、《无职转生2》+《无职转生3》、《女声男子1》
今日软件:
今天没看啥软件,补觉时间居多。
今日代码:
关于公司某平台下子应用的单点登录逆向,因为涉及到系统安全不会附带图片和实际代码,简单说一下思路和心得。
鉴权部分,公司的大部分新建的系统,用的都是JWT形式,而老的系统用JSESSIONID比较多。
第零步:破解传参加密
该平台的传参有加密,给登录请求加上XHR断点,可以定位到加密的JS,里面写明了就是AES-CBC-PKCS7。
那下一步找IV偏移量跟KEY秘钥就OK了,跟着混淆后的JS追踪了半天搞得头晕脑胀,突然想起我直接拿调用堆栈里面的值不就好了吗。
筛了下16位字符,秒速拿下。
第一步:拿到CAS的TGT
第一步是我一开始尝试逆向中遗漏的部分,以为拿到JWT就万事大吉,结果发现后面登陆了平台后的子应用系统还有一层JWT,而之前拿到的根本不认!
仔细观察抓包发现之前遗漏了一条非常隐蔽的请求,会获取到一个指向以TGT命名的链接。看了下请求的path名里包含tickets,很明显就是认证相关的数据。
拿了再说。
第二步:拿到该平台的accesstoken
这一步反而是简单的,因为前面都解决了传参加密算法,把账号密码和MFA用逆向出来的算法过一遍就OK了。
也是因为该平台使用了TOTP作为MFA方式之一,才让我能够使用程序完全模拟全部登录流程。
邮箱验证码涉及到怎么处理异地登录审核,还有短信转发,被我直接pass。
突然想起还有一个小坑,这一步拿accesstoken传参方式是json,而其他的接口都是表单。
第三步:获取ST凭证
ST凭证跟上面的TGT有关,传参指向的就是我们要访问的子服务的链接地址。
这一步会拿到一个ST开头的认证字段,不知道为何浏览器是显示不出来的,我用POSTMAN调用的时候可以正常看到。是Chrome解析的问题?
第四步:处理两个302拿到最后的token
这里提到的302就跟我上面说到的文章有关系了,也是我为什么要坚持做纯请求模拟登录的原因,因为我觉得是可行的。
首先第一个302就是用获取到的ST凭证来构造访问地址,会产生一个附带jsessionid的链接返回,注意不是返回值而是写在相应标头的location,
用python去构建的时候要设置allow_redirects=False在这里先断一下,再单独的去访问返回的链接,不然容易拿不到。
之后访问带jsessionid的链接的时候,这链接还整一次302重定向,这次给到的就是我之前在浏览器中捕获到的,附带token的访问链接,而这个token就是服务器传回的JWT。
小结:后续回去查关于TGT和ST的资料,才发现这些都是经常听到的Kerberos和CAS。
咋说呢,学而不思则罔,思而不学就要die了呀。
今日见闻:
z-lib的telegram频道被封禁。
今日废话:
周六值班+周六夜班+周日早上起来继续蹲公司破解,差不多24小时内只睡了两小时。
在破解单点登录的第三层的时候我一直在旁边无人的会议室踱步,这是我思考时候的癖好,终于在胡思乱想了快一个小时后坐定开始写代码,终于是一口气拿下。
在下午泡完图书馆之后终于累到在床上,眼睛一睁已经到了11号。