GreaseMonkey开发(二):开发一款自动化检测XSS插件

引用了black-hole的代码,封装成GreaseMonkey的插件。

  1 // ==UserScript==
  2 // @name        xss
  3 // @namespace   xss
  4 // @version     1
  5 // @grant       none
  6 // ==/UserScript==
  7
  8 var onlyString ="woainixss<script>alert(123)</script>"; //唯一标识符
  9 var protocol = window.location.protocol;  //网站使用的网络协议(http、https等)
 10 var host = window.location.host;   //网站的主域名(*.com、*.cn等,例:test.cn)
 11 var href = window.location.href;   //网站的完整URL(协议+域名+参数+锚)
 12 var hostPath; //用来存放网站除去参数的字符串(协议+域名+锚)
 13 var urlPath;  //用来存放网站URL路径的数组(例:test.cn/test/xss/123  urlPath = [‘test‘,‘xss’,‘123‘])
 14
 15 if(href.indexOf("?") != "-1"){  //如果url存在?字符串(存在?基本就存在参数了)
 16     hostPath = href.slice(0,href.indexOf("?"));      //去除参数,只留下“协议+域名+锚”
 17 }else{
 18     hostPath = href;  //不存在?则把完整的url赋值给hostPath。
 19 }
 20 urlPath = hostPath.split("/").splice(3);      //以“/”为分隔符,把路径分割成数组。
 21 //alert("hostPath:"+hostPath+"   "+"urlPath:"+urlPath);
 22
 23 if(location.search != ""){  //当参数不为空时,跳转到parameter_Xss函数里
 24     //alert("parameter_Xss");
 25     parameter_Xss();
 26 }
 27 if(href.split("/")[3] != ""){      //当完整的URL里第三个/后存在字符串,则跳转到pseudoStatic_Xss函数里
 28     //alert("pseudoStatic_Xss");
 29     pseudoStatic_Xss();
 30 }
 31 if($("form").length > 0){       //当页面存在form表单,就跳转到form_Xss函数里
 32     form_Xss();
 33 }
 34
 35
 36 function parameter_Xss(){
 37    // alert("parameter_Xss start");
 38     var i; //for循环里的i
 39     var parameter = location.search.substring(1).split("&");    //把URL字符以&分割成字符串
 40     var url = protocol + "//" + host + "/" + urlPath.join("/") + "?";     //拼接成新的URL字符。(例:http://test.cn/test/xss/123?)
 41     for(i = 0;i < parameter.length;i++){      //for循环,有多少个参数就循环多少次
 42         var parameterData = parameter[i];
 43         parameter[i] = parameter[i].split("=")[0] + "=" + parameter[i].split("=")[1] + onlyString;
 44         //alert(url+parameter.join("&"));
 45         $.ajax({
 46              url: url+parameter.join("&"),
 47              type: ‘get‘,
 48              dataType: ‘text‘,
 49              async:false,
 50              success:function(data){
 51                 // alert("+++++++++++++++++++++++++++");
 52                  if(data.indexOf(parameter[i].split("=")[1]) != "-1"){
 53                      alert(parameter[i]);
 54                      //   $("body").append("<img src=‘http://xss.cn/getXSS.html?host=$" + host + "&$xss=$" + parameter[i].split("=")[0] + "&$url=$" + window.location.href + "&$rand=$" + Date.parse(new Date()) + "‘ style=‘display:none;‘>");
 55                  }
 56              },
 57              error:function(){
 58                       alert("error");
 59                       }
 60        })
 61         parameter[i] = parameterData;
 62     }
 63    // alert("parameter_Xss over");
 64 }
 65
 66 function pseudoStatic_Xss(){    //伪静态检测XSS
 67    // alert("pseudoStatic_Xss start");
 68     var fileURL;
 69     var fileUrlXss;
 70     var url;
 71     var xss = "";
 72     if(urlPath[urlPath.length-1].indexOf(".") != "-1"){
 73         fileURL = urlPath.pop();
 74         fileUrlXss = fileURL.split(".")[0] + onlyString + "." + fileURL.split(".")[1]
 75         $.ajax({
 76             url: protocol + "//" + host + "/" + urlPath.join("/") + "/" + fileUrlXss,
 77             type: ‘get‘,
 78             dataType: ‘text‘,
 79             async:false,
 80             success:function(data){
 81                // alert("===================================");
 82                 if(data.indexOf(fileUrlXss) != "-1"){
 83                     xss += fileURL + "|";
 84                     //   $("body").append("<img src=‘http://xss.cn/getXSS.html?host=$" + host + "&$xss=$" + parameter[i].split("=")[0] + "&$url=$" + window.location.href + "&$rand=$" + Date.parse(new Date()) + "‘ style=‘display:none;‘>");
 85                 }
 86             },
 87              error:function(){
 88                      // alert("error");
 89                       }
 90         })
 91     }else{
 92         fileURL = "";
 93         console.log(urlPath)
 94         if(urlPath[urlPath.length-1] == ""){
 95             urlPath.pop();
 96         }
 97     }
 98     for(var i = 0;i < urlPath.length;i++){
 99         urlPath[i] += onlyString;
100         url = protocol + "//" + host + "/" + urlPath.join("/") + "/" + fileURL;
101         $.ajax({
102             url: url,
103             type: ‘post‘,
104             dataType: ‘text‘,
105             async:false,
106             success:function(data){
107                 // alert("===================================");
108                 if(data.indexOf(urlPath[i]) != "-1"){
109                     xss += urlPath[i].substring(0,urlPath[i].length-11) + "|";
110                     //   $("body").append("<img src=‘http://xss.cn/getXSS.html?host=$" + host + "&$xss=$" + parameter[i].split("=")[0] + "&$url=$" + window.location.href + "&$rand=$" + Date.parse(new Date()) + "‘ style=‘display:none;‘>");
111                 }
112             },
113             error:function(){
114                // alert("error");
115             }
116         })
117         urlPath[i] = urlPath[i].substring(0,urlPath[i].length-11);
118     }
119     if(xss == ""){
120         return false;
121     }else{
122         xss = xss.substring(0,xss.length-1);
123         alert("当前伪静态路径或者文件" + xss + "存在XSS漏洞");
124         //$("body").append("<img src=‘http://xss.cn/getXSS.html?host=$" + host + "&$xss=$" + xss + "&$url=$" + window.location.href + "&$rand=$" + Date.parse(new Date()) + "‘ style=‘display:none;‘>");
125     }
126    // alert("pseudoStatic_Xss over");
127 }
128
129 function form_Xss(){    //form表单检测XSS
130    // alert("form_Xss start");
131     var tureForm;
132     var tureInput;
133     var formImg;
134     var actionUrl;
135     var methodType;
136     var sendData = "";
137     var sendDataUrl;
138     var i;
139     var j;
140     tureForm = $("form").filter(function(item,index){
141         var imgArray = [];
142         $(index).find("img").map(function(number,imgSrc){
143             imgArray.push($(imgSrc).attr("src"));
144         });
145         if(imgArray.length > 0){
146             for(i = 0;i < imgArray.length;i++){
147                 if(imgArray[i].indexOf("?") != "-1"){
148                     imgArray[i] = imgArray[i].slice(0,imgArray[i].indexOf("?"));
149                 }
150                 imgArray[i] = imgArray[i].substr(imgArray[i].lastIndexOf("."),imgArray[i].length);
151                 if((imgArray[i] != ".png")&&(imgArray[i] != ".jpg")&&(imgArray[i] != ".jpeg")&&(imgArray[i] != ".gif")){
152                     return false;
153                 }else{
154                     return ($(index).find(":input:not(:submit)").length > 0);
155                 }
156             }
157         }else{
158             return ($(index).find(":input:not(:submit)").length > 0);
159         }
160     })
161     if(tureForm.length <= 0){
162         return false;
163     }
164     tureForm = $(tureForm).filter(function(item,index){
165         var inputName = $(index).find(":input:not(:submit)");
166         for(i = 0;i < inputName.length;i++){
167                 return (inputName[i].getAttribute("name"));
168         }
169     })
170     if(tureForm.length <= 0){
171         return false;
172     }
173     for(i = 0;i < tureForm.length;i++){
174         actionUrl = $(tureForm[i]).attr("action");
175         methodType = $(tureForm[i]).attr("method");
176         if(actionUrl == undefined || actionUrl == "#" || actionUrl == ""){
177             actionUrl = href;
178         }
179         if(methodType == undefined || methodType == "#"){
180             methodType = "get";
181         }
182         tureInput = $(tureForm[i]).find("input:not(:submit)").length
183         for(j = 0;j < tureInput;j++){
184             sendData += $(tureForm[i]).find("input:not(:submit)")[j].getAttribute("name") + "=" + onlyString + j + "&";
185         }
186         sendDataUrl = sendData.substring(0,sendData.length-1);
187         $.ajax({
188             url: actionUrl,
189             type: methodType,
190             dataType: ‘text‘,
191             data: sendDataUrl,
192             async:false,
193             success:function(data){
194                // alert("**************************************");
195                 var xss = "";
196                 for(j = 0;j < tureInput;j++){
197                     if(data.indexOf(onlyString + j) != "-1"){
198                         xss += j + 1 + "|";
199                     }
200                 }
201                 if(xss == ""){
202                     return false;
203                 }else{
204                     xss = xss.substring(0,xss.length-1);
205                     // alert("当前页面action为" + actionUrl + "的form表单第" + xss + "个input存在XSS漏洞");
206                     $(tureForm[i]).find("input").eq(xss - 1).css("border"," 3px solid red")
207                         .val("此输入框存在XSS    ");
208                     // $("body").append("<img src=‘http://xss.cn/formXSS.html?host=$" + href + "&$xss=$" + xss + "&$url=$" +actionUrl + "&$rand=$" + Date.parse(new Date()) + "‘ style=‘display:none;‘>");
209                 }
210             },
211             error:function(){
212               //  alert("error");
213             }
214         })
215     }
216    // alert("form_Xss over");
217 }
时间: 2024-10-14 16:21:22

GreaseMonkey开发(二):开发一款自动化检测XSS插件的相关文章

个人分享:平时开发中感觉几款不错 IDE 、插件、工具

本人主业 C# 开发,由于是做 Web 开发,所以像 SQL.JavaScript 这些肯定经常要接触到.当然,平时本人也写过 Node.js.Java.Python之类,不过,这些只能讲简单了解而已. 接下来,分享本人平时经常到的一些 IDE.插件.软件. A  JavaScript( Node.js ).Python .Java 开发利器: WebStorm.PyCharm .IntelliJ IDEA. 业界知名 IDE 公司出品,重点这几款 IDE 功能强大,设计也漂亮.(相比 Ecli

JMeter学习(二十九)自动化badboy脚本开发技术

一般人用badboy都是使用它的录制功能,其它badboy还是一款自动化的工具,它可以实现检查点.参数化.迭代.并发.报告.断点等功能.本文就这些功能简单介绍下. 环境准备: 下载地址:http://www.badboy.com.au/,下载后安装即可. 工具:BadboyInstaller-2.2.exe 一.检查点 1.打开badboy,默认是录制状态,在地址栏中输入:http://http://www.sogou.com/,点击,如下图: 2.在文本框中输入yangxia-test,点击搜

平安科技移动开发二队技术周报(第十四期)

平安科技移动开发二队技术周报(第十四期) @author ASCE1885的 Github 简书 微博 CSDN 业界新闻 1)Android Studio 1.3 正式发布 Android Studio 1.3 正式进入稳定版,求稳的同学该升级了.作为今年改进最大的一个版本,Studio 1.3 包括新的 memory profiler ,改进的测试支持,并且包含了完整的 C++ 编辑和调试功能. Android开发 1)使用O-LLVM和NDK对Android应用进行混淆 Android开发

平安科技移动开发二队技术周报(第三期)

平安科技移动开发二队技术周报(第三期) 业界新闻 1)关于AFNetworking 安全bug的回复 AFNetworking代码维护者对文章 utm_source=tuicool">流行iOS网络通信库AFNetworking曝SSL漏洞 中存在的不对的误导性描写叙述的回应. 2)跨平台移动端开发框架NativeScript 公布正式版本号 NativeScript就是一款由Telerik公司提出的跨平台原生移动应用的开发框架.该项目的目的是利用单一代码库构建面向多平台的原生移动应用程序

平安科技移动开发二队技术周报(第四期)

平安科技移动开发二队技术周报(第四期) 业界新闻 1)Java 9将于2016年正式公布 Oracle已经宣布了Java 9的时间表.其目标是在2016年9年正式公布该版本号.该时间表遵循Oracle每两年公布一个新的主版本号的计划,尽管与先前的版本号相比,眼下提出的最后期限可能存在一定的延期风险. 2)谷歌I/O 2015大会前瞻:Android M.Chromecast 2以及很多其它 谷歌I/O大会再有几天就将与广大关注者见面.这意味着我们又该对这一年一度且总能引发业界高度关注的技术事件进

Qt计算器开发(二):信号槽实现数学表达式合法性检查

表达式的合法性 因为我们的计算器不是单步计算的,所以我们可以一次性输入一个长表达式.然而如果用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比如,在输入了左括号以后那么接下来,不能输入运算符.此时运算符要是不可用的状态.在输入了右括号以后不能直接输入数字,此时数字键应该是不可用状态.等等此类的. 在这里我使用了信号与槽的方式来实现.点击不同的按钮,会发展出不同的信号.在这之后的事,点击按钮本身无需考虑,这也是信号槽的良好的设计理念造成的效果,

平安科技移动开发二队技术周报(第七期)

平安科技移动开发二队技术周报(第七期) 业界新闻 1)从数据来看,Android 还是挺安全的 Google 近日公布了一份白皮书,详细记载了 Android 安全小组去年一整年的工作内容. 2)Mac中国市场报告 腾讯ISUX用户研究中心出品的一份Mac中国市场使用报告. 3)GitHub账户被黑:旧漏洞导致弱密钥大量留存 Cartwright-Cox在GitHub上发现了大约94个包括Debian衍生缺陷的密钥.3月份他向GitHub官方报告之后,才发现实际用户数量要高得多.GitHub于上

平安科技移动开发二队技术周报(第六期)

平安科技移动开发二队技术周报(第六期) 业界新闻 1)WWDC 15 发布会 在一段迥异过往风格的搞笑彩排视频之后,今年 WWDC 2015 拉开了帷幕,库克表示这是最国际化的一次发布会,有来自 70 个国家的不同开发者,在场有 80% 的人是首次参加 WWDC. 尽管传闻中的 Apple TV 和互联网电视台服务没有出现,但产品软件层面上的更新仍然令人欣喜. 2)Swift 2.0发布:即将开源,支持Linux 在6月9日凌晨举行的WWDC 2015全球开发者大会上,苹果发布了Swift 2.

平安科技移动开发二队技术周报(第十三期)

平安科技移动开发二队技术周报(第十三期) @author ASCE1885的 Github 简书 微博 CSDN 业界新闻 1)Android曝严重安全漏洞 95%设备受影响 网络安全公司Zimperium研究人员日前表示,他们在Android设备中发现了一处安全漏洞,允许黑客在用户全然不知的情况下远程访问Android设备. 2)2015年第一季度移动安全报告-阿里聚安全 2015年第一季度,安卓平台受病毒感染设备呈上升趋势,感染总量高达2406.6万,平均每7.6台设备就有1台设备染毒. 3