当前位置: 首页 > news >正文

广东茶叶网站建设宜春市网站建设

广东茶叶网站建设,宜春市网站建设,一键修改wordpress密码,郑州区块链数字钱包网站开发过程声明#xff1a; 该文章为学习使用#xff0c;严禁用于商业用途和非法用途#xff0c;违者后果自负#xff0c;由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate#xff08;机器人防火墙#xff09;以“动态安全”技术为核心#xff0c;通过动态封装…声明 该文章为学习使用严禁用于商业用途和非法用途违者后果自负由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate机器人防火墙以“动态安全”技术为核心通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换增加服务器行为的“不可预测性”实现了从用户端到服务器端的全方位“主动防护”为各类 Web、HTML5 提供强大的安全保护。 二、瑞数特点 会有多层debugger可以点击Never pause here过掉debugger会有多次请求 瑞数4、瑞数5有两次相同的请求瑞数4第一个请求状态码202瑞数5第一个请求状态412第一次请求响应的html会有个script标签外链js加载 t s w i n d o w [ ′ _ts window[ t​swindow[′_ts’]外链js代码可以固定也可以通过对外链js发送请求获取js代码瑞数5.5有两次相同的请求第一次请求状态码412响应的html有外链js此外链js代码可以固定也可以通过对外链js发送请求获取js代码瑞数6和瑞数5.5编译过程差不多 第一次响应的html都会包含动态加载的meta标签包含content、两个script标签 瑞数4、瑞数5用第一个script加载包含_ts window[‘$_ts’]的js文件第二个script加载一段自执行的js用于把之前加载的代码处理成可用的js代码处理后的js字符串通过call执行并生成cookie瑞数5.5用第一个script加载包含_ts window[‘$_ts’]代码第二个script加载自执行js文件用于把之前加载的代码处理成可用的js代码处理后的js字符串通过call执行并生成cookie 都会有特有的cookie标识 瑞数4FSSBBIl1UgzbN7N80T生成值的第一个字符就是代数瑞数5IdlEqTWW2ERnT生成值的第一个字符就是代数瑞数5.51EzPGwRUoQaWT生成值的第一个字符就是代数 瑞数会检测当前执行的文件是哪一个可以使用delete __filename、delete __dirname 三、瑞数5.5特点 两层debugger可以点击Never pause here过掉debugger会有两个相同请求第一次请求状态码412和第二次请求状态码200是相同的第一次请求失败状态码是412 首先会加载第响应html文件中的js t s w i n d o w [ ′ _ts window[ t​swindow[′_ts’]返回响应html文件里面会有动态加载的meta标签包含content、一个script标签包含 t s w i n d o w [ ′ _ts window[ t​swindow[′_ts’]、一个script标签加载js文件外链js会把之前的js代码转换成可用的js代码并通过call方法执行eval函数生成vm文件在vm文件生成1EzPGwRUoQaWT赋值给document.cookie响应的cookie名字是1EzPGwRUoQaWS 第三次请求成功可以正确拿到数据 四、找出需要加密的参数 js运行atob(‘aHR0cDovL3d3dy5jaGluYXN0b2NrLmNvbS5jbi9uZXdzaXRlL2Nncy1zZXJ2aWNlcy9zdG9ja0ZpbmFuY2UvYnVzaW5lc3NBbm5jLmh0bWw’) 拿到网址F12打开调试工具打开F12会遇到无限debugger这是个eval执行的debugger右击左侧代码行点击Never pause here过掉即可刷新页面找到 stockFinance/businessAnnc.html 请求状态200鼠标右击请求找到CopyCopy as cUrl(cmd) 打开网站https://spidertools.cn/#/curl2Request把拷贝好的curl转成python代码新建 zj.py把代码复制到该文件 多运行几次zj.py会发现请求失败状态码是412仔细分析cookie会发现1EzPGwRUoQaWS、1EzPGwRUoQaWT而1EzPGwRUoQaWT值得第一个字符是5这是瑞数特点之一字符5代表是瑞数5代 新建zj.js用于放扣下的代码 五、瑞数5 cookie 分析 使用hook定位1EzPGwRUoQaWT参数生成位置这里我使用的是油猴 编辑好油猴脚本启动该脚本切换到Application清除浏览器的cookie一定要清除cookie 清除cookie后刷新页面后会进入油猴脚本里的debugger一直点击跳过当前函数执行就会找到1EzPGwRUoQaWT赋值的地方 分析右侧的堆栈找到不属于该虚拟文件的栈分别点击查看会发现一个call方法该方法就是生成虚拟文件的地方这个文件是第一次请求的响应结果 使用无痕窗口打开网站点击sources找到事件监听勾选script 切换到Application清除浏览器的cookie一定要先清除cookie清除cookie后刷新页面会看到一个html中的js代码这是第一次请求响应的把这个文件代码全部拷贝到zj.js 点击跳过断点会进入一个js文件这个js文件就是刚才找到call方法的文件在该行打上断点 点击跳过断点鼠标悬浮到call方法参数上上会发现很多js字符串这就是经过该自执行方法转换后的js就是之前油猴分析的虚拟文件执行的js 这里要注意虚拟文件是动态生成的每次获取到的都是不一样的为了方便调试把js文件替换成本地文件这样每次生成的虚拟文件就是一样的右击该js文件名称点击Override content如果替换成功后代码都在一行可以在本地找到该文件用编辑器打开格式化一下并在call的位置打上断点 清除cookie刷新页面点击跳过断点执行会进入之前的替换后的js文件断点再点击跳过断点执行会看到一个html文件里面会有动态加载的meta标签包含content、一个script标签包含刚才的js、一个script标签加载js文件这个文件也需要本地替换下再点击跳过断点会到两层debugger 清除cookie刷新页面点击跳过断点执行找到之前的call断点把该文件的的js拷贝到zj.js运行zj.js会发现报window的错误window是浏览器环境的node环境不存在接下来开始补环境 六、补环境 首选在代码顶部补上window环境并用代理自动把需要补的环境吐出来新建jsProxy.js把下面代码拷贝过去 // 代理器封装 function getEnv(proxy_array) {for(var i0; iproxy_array.length; i){handler {\nget: function(target, property, receiver) {\nconsole.log(方法get, 对象${proxy_array[i]}, 属性,property, 属性类型,typeof property, 属性值类型,typeof target[property]);return target[property];},set: function(target, property, value, receiver){\nconsole.log(方法set, 对象${proxy_array[i]}, 属性,property, 属性类型,typeof property, 属性值类型,typeof target[property]);return Reflect.set(...arguments);}};eval(try{\n${proxy_array[i]};\n${proxy_array[i]} new Proxy(${proxy_array[i]},${handler});}catch(e){\n${proxy_array[i]}{};\n${proxy_array[i]} new Proxy(${proxy_array[i]},${handler});} )} }// proxy_array [window, document, location, navigator, history,screen,target ] // getEnv(proxy_array)module.exports getEnv运行zj.js会发现在获取window.top时报错了在控制台输出window.top得知 window.top window在代码顶部补上window.top 运行zj.js会发现程序卡window.clearInterval在方法该方法是清除定时器把window.clearInterval、setTimeout、setInterval方法置空后再运行还是卡在window.clearInterval这时候就要分析控制台打印出的值先把常见的值为undefined的补上 运行zj.js会发现在获取document.createElement时报错了document.createElement是用来创建标签的且标签值是div在代码顶部补上document.createElement 运行zj.js会发现在获取document.createElement时又报错了找到打印信息最后的位置会看到报错代码 在浏览器call断点处点击进入该方法内部会找到虚拟文件在虚拟文件内搜索 d d d[_$$i[85]]会找到该方法的位置在该行打上断点点击跳过断点会进入刚才的断点把代码信息在控制输出会发现是获取div下的i标签获取出的结果是 length:0在代码顶部补上该代码 运行zj.jsdocument.getElementsByTagName报错找到打印信息最后的位置会看到报错代码在虚拟文件内搜索KaTeX parse error: Expected group after _ at position 4: av[_̲cL]会发现很多KaTeX parse error: Expected group after _ at position 4: av[_̲cL]全部打上断点点击跳过断点会进入其中的断点在控制台打印出KaTeX parse error: Expected group after _ at position 4: av[_̲cL]的值如果不是getElementsByTagName就点击跳过断点如果是就停下找到后悬浮到参数上会发现是script标签 在document中补上getElementsByTagName点击运行会发现确实是script标签把返回的值打印在控制台会发现是两个script和一个length1在代码顶部补上该代码具体script要补什么代码还有根据实际代码往下分析点击跳过断点会再次进入该断点打印出该断点的信息会发现是第二个script标签中getAttribute传了个r参数返回了mgetAttribute是获取该标签上的属性在代码顶部补上该代码再点击断点同样会进入该断点打印出该断点的信息输出和刚才的是获取了第一个script标签上的r属性并返回了m在代码顶部补上该代码 运行zj.js到scrtpt-1中获取r属性时报错了找到打印信息最后的位置发现是缺少removeChild清除cookie刷新页面找到刚才KaTeX parse error: Expected group after _ at position 4: av[_̲cL]断点位置点击跳过断点因为刚才的报错是在script获取属性之后所以断点到获取属性的时候停下在循环顶部打上断点可以看作用域上的_$ay来确定断点是否到获取script属性 点击跳过断点观察作用域会看到 script、parentElement这是获取script的父级head再继续点击跳过断点就会看到head、removeChild继续点击跳过断点会看到script、removeChild说明刚才的removeChild报错是由script[1].parentElement.removeChild引起的在代码顶部补上该代码在调试这个removeChild错误的时候会发现很难下断点当遇见这种清况看作用域就能看到代码的执行清空后面会遇到script[0]报removeChild会采用另一种方法 运行zj.js到scrtpt-1中获取r属性时报错了找到打印信息最后的位置发现是缺少removeChild修改代理数组在后面加上script[0]再运行zj.js就可以看到script[0].parentElement是undefined在顶部补上代码 运行zj.js获取window.attachEvent属性时报错这里需要注意上面的打印信息window.addEventListener一般这里会环境监测如果window.addEventListener存在执行window.addEventListener不存在执行window.attachEventnode环境不存在addEventListener所以会报window.attachEven的错误但是window.addEventListener下是存在的所以只要补window.addEventListene就行找到打印信息最后的位置搜索KaTeX parse error: Expected group after _ at position 4: h3[_̲il[4]]在判断出打上断点会进入window.addEventListener在代码顶部补上代码 运行zj.js会发现document .getElementsByTagName失败在浏览器控制台打印document .getElementsByTagName(‘meta’)会发现是两个meta对象和length在代码顶部补上代码 运行zj.js会发现获取meta标签时又报错了找到打印信息最后的位置在虚拟文件内搜索KaTeX parse error: Expected group after _ at position 4: do[_̲$i[19]]并在搜索到的位置打上断点打印断点的信息会发现获取的是第二个meta的r属性在顶部补上代码 运行zj.js会发现获取meta-1中的的r属性是报错找到打印信息最后的位置发现是缺少removeChild修改代理数组增加meta[1]再运行zj.js就可以看到meta[1].parentNode是undefined在顶部补上代码 运行zj.js会发现不再报meta错误不过这里meta[1]标签中的content是一定要补上的 重复运行zj.js按照上面的方法补全环境补完环境修改zj.js再运行会发现已经拿到1EzPGwRUoQaWT 七、python代码验证结果 修改zj.js因为meta中的content、还有js代码都是动态生成的所以要用字符暂时占位分别注释掉之前content的值、 t s w i n d o w [ ′ _ts window[ t​swindow[′_ts’]、js用meta_content、ts_code、js_code代替 修改zj.py 点击运行zj.py会发现第二个请求报400那是因为瑞数会检测当前执行的文件是哪一个 修改zj.js再运行fdc.py会发现还是没获取成功但是之前的cookie确实已经拿到这就要考虑还有其他环境没补上 修改zj.js打开之前注释的meta[1]下的content、js等代码把补环境中有if、else判断的console放在else中 运行zj.js先找出getElementsByTagName、createElement未补的环境搜索getElementsByTagName发现base是需要补的搜索createElement发现form、input是需要补的而且input创建了三次本文就不讲base和input怎么补的只需补form就可以在代码顶部补上代码 修改代理数组加上form运行zj.js会发现设置form时需要id、action 找到之前补meta的时候的断点KaTeX parse error: Expected group after _ at position 4: av[_̲cL]点击跳过断点直到在作用域中看到createElement、form在虚拟文件内搜索KaTeX parse error: Expected group after _ at position 4: av[_̲cL](搜索到的都打上断点点击跳过断点仔细观察作用域中的信息直到看到appendChild、body、form关键字说明要把创建好的form标签插入到body中查看form信息会找到id、action在顶部补上form如果想补input可以继续点击跳过断点就会看到向form中插入input至于input插入三次id分别是username、password、innerText 注释掉之前content的值、 t s w i n d o w [ ′ _ts window[ t​swindow[′_ts’]、js在运行zj.py会发现数据获取成功 八、瑞数其他接口加密 如果cookie生成之后有其他接口参数加密直接使用明文参数一样可以调用成功因为参数加密是瑞数加密所以这里解密也是瑞数自己解密的 测试请求/doc/queryDocList通过XHR请求拦截找到明文信息修改zj.py请求/doc/queryDocList会发现即使是明文数据也可以获取成功 九、最终代码 zj.js delete __filename delete __dirnamevar getEnv require(./jsProxy)//补window window global window.top window window.clearInterval function () { }window.addEventListener function (event) {console.log(window中addEventListener接受的值是, event) }//补document div {getElementsByTagName: function (tag) {if (tag i) {return {length: 0}} else {console.log(div中getElementsByTagName接受的值是, tag)return {}}} }script {0: {getAttribute: function (attr) {console.log(script-0中getAttribute接受的值是, attr)if (attr r) {return m}},parentElement: {removeChild: function (tag) {console.log(script-1中的removeChild接受的值:, tag)}}},1: {getAttribute: function (attr) {console.log(script-1中getAttribute接受的值是, attr)if (attr r) {return m}},parentElement: {removeChild: function (tag) {console.log(script-1中的removeChild接受的值:, tag)}}},length: 2 }meta {0: {},1: {getAttribute: function (attr) {if (attr r) {return m} else {console.log(meta-1中getAttribute接受的值是, attr)return {}}},parentNode: {removeChild: function (tag) {console.log(meta-1中removeChild接受的值是, tag)}},content: meta_content},length: 2 }form {action: https://ucenter.miit.gov.cn/login.jsp,id: __Zm9ybS5pZAo__, }document {createElement: function (tag) {if (tag div) {return div} else if (tag form) {return form}},appendChild: function (tag) {console.log(document中appendChild接受的值是, tag)return tag || {};},removeChild: function (tag) {console.log(document中removeChild接受的值是, tag)return {}},getElementsByTagName: function (tag) {if (tag script) {return script} else if (tag meta) {return meta} else {console.log(document中getElementsByTagName接受的值是, tag)return {}}},getElementById: function (id) {console.log(document中的getElementById接受的值是, id)if (id root-hammerhead-shadow-ui) {return null}} }//补locationlocation {href: http://www.chinastock.com.cn/newsite/cgs-services/stockFinance/businessAnnc.html,origin: http://www.chinastock.com.cn,protocol: http:,host: www.chinastock.com.cn,hostname: www.chinastock.com.cn,pathname: /newsite/cgs-services/stockFinance/businessAnnc.html }setTimeout function () { } setInterval function () { }proxy_array [window, document, location, navigator, history, screen, target, script[0], meta[1], form] getEnv(proxy_array)ts_code js_codefunction get_cookie() {var EzPGwRUoQaWT document.cookie.split(1EzPGwRUoQaWT)[1].split(;)[0]return EzPGwRUoQaWT }console.log(get_cookie())zj.py import requests from lxml import etree import execjsheaders {Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7,Accept-Language: en,zh-CN;q0.9,zh;q0.8,Cache-Control: no-cache,Pragma: no-cache,Proxy-Connection: keep-alive,Referer: http://www.chinastock.com.cn/newsite/cgs-services/stockFinance/businessAnnc.html,Upgrade-Insecure-Requests: 1,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 } cookies {# aliyungf_tc: d0a79762e3a5a1d8fae1f5815c7c8dfee488fd8bb3fe2e271ca7f6b32c4891e4,# acw_tc: ac11000117016103207903338ebe3da6d7f7013a812d4181d1c81f244b0c5e,# 1EzPGwRUoQaWS: 5Sd_7hNDdsibBtUr2KtaorX.oMnUzRBCHryQ5jRWd5MgFf4243PnXoAZTfhrUTSeItypKYhnttDwtt.8PaZXHhA,# 1EzPGwRUoQaWT: .sHyUJtIBQzbbxLniztzoQdA3t20ZaSihfzHSypZM.4g_l7L7FR9B9dAic0hpBh2LoAoyddu75D2fGnxHgxjxvjwzNBjeXFFjmZ9KqNVuffkH3LGfYGIpCKE1zqsINGThR9wd2mY9o87Pu.89nXVRA_j2d.6nedwflKSAAkPCuL6TwVemW_lu.1lelL3uAUjcr2bpV2EQ2pdu6txVpYO1MieHfUtzKoxl2b6pSJgnPA }url http://www.chinastock.com.cn/newsite/cgs-services/stockFinance/businessAnnc.htmlrequest_session requests.session() request_session.headers.update(headers) request_session.cookies.update(cookies)def get_ts():response request_session.get(url)cookies[acw_tc] response.cookies[acw_tc]cookies[aliyungf_tc] response.cookies[aliyungf_tc]cookies[1EzPGwRUoQaWS] response.cookies[1EzPGwRUoQaWS]request_session.cookies.update(cookies)html etree.HTML(response.text)ts_code html.xpath(//script[1]/text())[0]js_src html.xpath(//script[2]/src)[0]meta_content html.xpath(//meta[2]/content)[0]return ts_code, js_src, meta_contentts_code, js_src, meta_content get_ts()def get_js():js_url fhttp://www.chinastock.com.cn{js_src}response request_session.get(js_url)request_session.cookies.update(cookies)return response.textjs_code get_js()with open(zj.js, r, encodingutf-8) as js_file:js_text js_file.read()js_text js_text.replace(meta_content, meta_content)js_text js_text.replace(ts_code, ts_code)js_text js_text.replace(js_code, js_code)js execjs.compile(js_text)cookies[1EzPGwRUoQaWT] js.call(get_cookie)request_session.cookies.update(cookies)response request_session.get(url)response.encoding utf-8# print(response.text)# print(response)get_data_par {catName: yhgg_融资融券公告,dayLimit: 9000,pageNo: 2,pageSize: 50, } get_data_url http://www.chinastock.com.cn/website2020/doc/queryDocList response request_session.get(get_data_url, paramsget_data_par)print(response.text) print(response)
http://www.zqtcl.cn/news/34415/

相关文章:

  • 浅谈博星卓越网站建设竞价托管哪家公司好
  • 重庆黔江做防溺水的网站外贸seo网站搭建
  • 网站开发实验报告wordpress科技企业主题
  • 网站建设模板购买注册公司该怎么注册
  • 新建的网站怎么做seo优化wordpress远程图片本地换
  • 网站访客抓取系统怎样使用wordpress
  • 云主机做网站永久保留网站毕业设计做一个网站怎么做
  • 做网站怎么选云主机网站开发目标开题报告
  • 网站如何在百度做排名常州网站建设案例
  • nas建站新绛做网站
  • 保定建设网站及推广网站建设服务器主板1150针
  • 网站排名关键词广州市网站建设价格
  • 东莞网站设计公司排名科技强国形势与政策论文
  • 佛山建网站费用百度seo优化推广公司
  • wordpress整站下载网站空间是什么
  • 沈阳网站推广公司排名网站开发管理招聘
  • 写作网站可保存wordpress 获取文章的分类id
  • asp个人网站源码wordpress远程图片不能
  • 西安网站建设公司云网网站建设商务通什么意思
  • 新手做自己的网站团队拓展口号
  • 注册网站名字福建泉州网站建设公司哪家好
  • 专业房地产网站建设led行业网站源码
  • 做英文网站的公司网站点击换图片的效果怎么做
  • 深圳建设执业注册中心网站顺营销官方网站
  • 长沙企业建站系统wordpress阿里云oss
  • 一个网站的建设需要什么手续中国建设银行网站怎么解绑设备
  • 如何做跨境购物网站wordpress的vieu主题破解版
  • 银川品牌网站建设公司西安seo优化推广
  • 如何判断网站seo做的好坏嵌入式对学历要求高吗
  • 网站上传到空间广东深圳天气预报