18、JS渗透(三)

js项目分析:

​ 1、为了查找参数

​ 2、为了查找动态加载的隐藏内容

js加密:通过js加密给服务器的是限制机器人,通过js加密给客户端的是防盗保护。前者分析是把参数加密然后用机器人发送达到伪装的目的,后者通过解密客户端发来的js代码,获取资源来达到解密目的。实质是一个加密来伪装自己和一个破解密码的不同原理。

js动态加载:有些内容不是加密,但是需要javascript代码通过用户操作,通过二次的交互加载出来的,这种情况如果是在初始页面的基础上交互的话,网页源码是不会变化的,机器人爬取的时候就不会得到想要的数据。还有一些情形是源码没有想要的数据,但是元素里面有,也是属于动态加载问题,前端开发时网页源码没有交互内容,元素会得到js动态交互的内容。js源码文件里面分析的那些js代码,可以对服务器进行访问的一系列操作,可以让服务器删除某些内容然后服务器发回响应来回复前端,也可以在接收到服务器的某些请求的时候进行一些操作。所以这里的js代码源文件里的内容都是指前端开发者设置好的用来配合服务器进行的一些交互操作,至于权限可以看开发者的设置定夺。

​ 1、这都是前端的东西,都是jS的,他就是写前端的啊,他都是要上谁,要往服务器里写东西的,要服务器里要么是增删改查,你这个前端的东西,它无非就是你想展示在页面上,那干嘛呢,怎么就是你展示你从哪展示呢?无非就是增删改查对吧,你比如图片呢,其实是从哪里是从图片是从哪里是从哪里是从这个数据库里获取出来的,就是查询数据库里的内容对吧,就是这个意思啊。

​ 2、所以大部分都是单向的,有的时候可能是就是是操作,操作一下这个服务器什么意思,就是说我们发起了一个某一个按钮对吧,比如点删除,那可能服务器它会删除某些东西,所以这个叫这个就操作数据库了,那么这样的话就是数据库里你还要再查一下你数据库里他会给你一点内容,就是这个内容什么有已经没有了,这可能就是就是服务器,它还会返回给你结果的,就是你操作了服务器,服务器有可能也会给你结果,所以前端不一定只是单向的啊,就是说啊服务器他服你给服务,你给服务器一个信号儿,服务器会给你,这就是数据的交互。

​ 3、JS这个东西它主要是在什么,他主要是在浏览器上运行,主要是在浏览器上运行,那么跟服务器交互的就是他发送这种url,就是他定位他的资源,这样子的发送一些请求发送我们的AJAX请求这些东西,是这样子的,所以说这个JS主要是在前端上,动态的这个语言在我们那个在浏览器上引擎做这个运转运行,它获取到一些数据之后,就在我们的浏览器这个引擎上来进行,怎么样来进行展示数据啊,它主要是这个样子。

通过发送表单来得到响应数据的是用post发请求

js交互的内容一般可以在XHR找到入口,XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequestAJAX 编程中被大量使用

在ALL可以查看所有交互得到的内容

用ctrl+F可以进行搜索页面交互得到的内容来进行查看哪个文件才是要找的,然后点进response可以查看到响应数据,这里看到的响应数据和用爬虫得到的响应是一样的,一般用来查看需要获取的内容的对应标签或者属性名,以至于可以用解析器来通过正则或键值对取值来给爬虫设置得到数据

formdata表单的js动态加密设置,原理是通过参数设置来让机器人准确的定位才能找到资源的位置,这种方式用来防止机器人的烂爬烂取。

4lvXJ9Wh/0YhafQyOb+L5YAA,base64的编码类型

052c278b1bc3dc1026cd14a, 16进制的编码类型

encSecKey:转码密文

js动态加载内容需要的关键参数通过动态生成, 以定位到URL为前提
1.先作对比,找出不同的参数
2.从之前的请求响应中找数据
(1)网页源代码中查找
(2)全局请求搜索
3.js加载调试,查找生成规律

一般找表单参数可以用到以上的这三种方法,最难的就是需要用到第三种方法,更难的非对称加密的第四种方法是用黑客的逆向分析。

js渗透的时候,要找到XHR中页面对应的那个js代码的发起程序,可以先确定自己要找哪些内容,然后在元素全局搜索上查找来确定发起的动态加载的网页,然后选择其中发起程序的第一个。目标url一般在XHR上找,但是XHR上没有url请求的话,也可以通过元素全局搜索去找,此时目标存在于ALL中,从ALL中也可以进入目标发起程序和找到url。

参数构造流程

以网易云为例

首先以定位到URL为前提

  1. 先作对比,找出不同的参数
  2. 从之前的请求响应中找数据
    (1)网页源代码中查找
    (2)全局请求搜索
  3. js加载调试,查找生成规律

参数对比与来源

params与encSecKey均是动态生成的

JS主函数及参数确定



现在知道了params和encSecKey是动态生成的了,接下来就是寻找生成动态参数的代码块,确定JS主函数和参数



搜索params,定位参数


这里可以很明显的看出来window.asrsea这个函数是生成这两个参数的关键,那么就转进这个函数看一下


定位生成参数的主函数


这里可以看到下面有一条赋值语句,把d这个函数赋值给window.asrsea,同时也就说明了d函数就是我们要找的主函数

主函数参数确定


既然确定了d函数是主函数,那么接下来就来依次分析它的参数


  • 参数d

  • 参数 e,g

  • 参数f

  • 参数构造总结

    影响参数d的i0x 可以通过构造实现,参数e,f,g均是固定值

JS代码及加密逻辑

主函数


现在主函数的全部参数都找齐了,接下来就继续分析这个函数的具体实现吧。


  • 代码逻辑

  • 主函数代码 h i 变量

h={} 声明一个对象;
i=a(16) 循环拼接生成一个16位的随机字符串 a-z,A-Z,0-9

加密代码逻辑

总体进行了两次AES加密,一次RSA加密

第一次 AES加密
传参

主函数的第一个参数(d)–>加密函数b的参数a
主函数的第四个参数(g)–>加密函数b的参数b

变量
  • 因为参数b是常量,所以c是固定值

  • 代码中明显变量d也是固定值

  • 变量e

    • 经过一些列函数调用及转换,得到一串数组,这个数组,是JS的独特数组,python难以模拟;

    • 但是我们可以通过变量e的最终结果,得出他们之间的转化规律

变量编码格式总结

JS代码中通过parse函数对这些代码进行处理,会得到一种独特的格式,如果要一步步分析处理代码再通过Python实现它会耗费巨大的精力,而且很难保证过程正确,所以我们可以对这个结果调用toString方法,然后对16进制的字符串进行分析


  1. 正向编码将自己的格式转换成独有格式
  2. 逆向转码toSring()方法转换成16进制字符串
  • 规律观察与证实

变量c

  1. 正向编码将自己的格式转换成独有格式

     2.  逆向转码toSring()方法转换成16进制字符串
    

3.验证 第二步得到的16进制转码回字符串

变量d

  1. 正向编码将自己的格式转换成独有格式

  2. 逆向转码toSring()方法转换成16进制字符串

  3. 验证 第二步得到的16进制转码回字符串

变量e

  1. 正向编码将自己的格式转换成独有格式

  2. 逆向转码toSring()方法转换成16进制字符串

  3. 验证 第二步得到的16进制转码回字符串

加密原理分析
  1. c,d变量是固定
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T o r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值