CNVD加速乐分析案例

本文是CNVD漏洞共享平台的爬虫案例,该网站采用了JSL的主题混淆和加密。

文章内容仅用于学习和技术交流,如有侵权请联系我删除。

在这里插入图片描述

@toc


分析接口

先在Application中的cookie处,clear掉现有cookie,然后刷新页面查看数据包。

在这里插入图片描述

可以发现,请求时页面加载了三次。
第一次请求,response的cookie中有__jsluid_s,请求失败。
第二次请求,cookie多了一个jsl_clearance_s,请求失败。
第三次请求,cookie的
jsl_clearance_s发生了变化,请求成功获得响应。

那我们只要分析好流程,按照这个逻辑进行模拟请求就能解决问题。


第一次请求分析

__jsluid_s 可以通过请求在set-cookie中直接获得。

全局搜索 __jsl_clearance_s ,能找到这段script代码。
在这里插入图片描述
但是在浏览器中无法显示响应内容,所以需要用抓包工具或者代码进行请求,查看响应结果。

打开charles,发现返回的是一段经典的字符混淆。
在这里插入图片描述
这种混淆很好处理,直接复制到控制台输出就可以。
在这里插入图片描述
可以发现返回的是 __jsl_clearance_s的第一次值。


第二次请求分析

那接下来分析第二次请求。
在这里插入图片描述

这是一段经典的ob混淆,ob混淆的特征是开头就是大串数组,所以随便找个工具解一下就行。
在这里插入图片描述
复制到本地,格式化查看
在这里插入图片描述
大概意思就是添加了一个cookie, 那具体是哪个呢,_0x1c3e6f是传进去的参数,_0x1c3e6f['tn']就是上面的jsl_clearance_s,说明执行这里后更新了jsl_clearance_s。
在这里插入图片描述
到这里就完了,但是想要本地跑这段代码还需要去补一些环境,比如window = {},window.navigator={}之类的,报啥错就补啥。

所以把JS保存到本地比较方便一点,当然你也可以通过编辑字符串动态去添加环境。


第三次请求分析

第三次请求没什么问题了,携带着前两次生成的cookie即可进行请求。
在这里插入图片描述


流程还原

还原的过程中发现了一些问题,不同页面的JS是不一样的,通过ha这个参数控制的,比如首页是sha255,漏洞列表是md5,还有sha1的。

所以说得根据返回的情况进行处理。
在这里插入图片描述

代码只是示例了部分,完整的需要去下载

import requests
import re
import execjs

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'

}
url = 'https://www.cnvd.org.cn/flaw/list.htm'
sess = requests.session()

def start():
    r =sess.get(url,headers=headers,verify=False)
    text = r.text
    cookie = re.search('<script>document.cookie=(.*?);location',text).group(1)
    x = execjs.eval(cookie).split(';')[0].split('=')
    sess.cookies[x[0]] = x[1]
    print(x[0],x[1])

def then():
    '''获取第二次请求的cookie'''
    r1 = sess.get(url,headers=headers,verify=False)
    text = r1.text
    data = re.search(';go\((.*?)\)</script>',text).group(1)
    hash = re.search('"ha":"(.*?)",',data).group(1)
    # get_cookie_2是执行JS,完整代码请下载
    cookie = get_cookie_2(data,hash).split(';')[0].split('=')
    sess.cookies[cookie[0]] =cookie[1]

源码下载

【温馨提示:此处隐藏内容需要付费订阅后才能查看!】

点赞

发表回复