主要功能:浏览器插件自动点击网站,将流量导入代理扫描器进行扫描
# 用法
下载clicker插件源码,然后在chrome浏览器开发者模式下,以文件夹方式加载该插件
配置clicker,并开启插件爬虫。然后打开待测网站即可
配合代理扫描器来发现安全漏洞
源码:https://github.com/zzzzfeng/Clicker,
# 关键代码
HOOK_EVENT_LIST = [];
_addEventListener = Element.prototype.addEventListener;
Element.prototype.addEventListener = function(event, listener, useCapture) {
HOOK_EVENT_LIST.push({"type": event, "element": this});
console.log('event '+event);
_addEventListener.apply(this, arguments);
};
var documentAll = document.querySelectorAll('*');
var eventlist = [];
for(let i=0;i<documentAll.length;i++){
let v = documentAll[i];
if(v.tagName == 'A'){
if(v.href.length>12)
console.log('a '+v.href);
}else if(v.tagName == 'FORM'){
console.log('form '+v.action);
}else{
let h = v.getAttribute('data-src');
if(h)console.log('data-src '+h);
h = v.getAttribute('data-url');
if(h)console.log('data-url '+h);
try{
new URL(h);
}catch{
var attrs = v.attributes;
for (var j = 0; j < attrs.length; j++) {
attr_name = attrs[j].nodeName;
attr_value = attrs[j].nodeValue;
if (attr_name.substr(0, 2) == "on") {
console.log(attrs[j].nodeName + ' : ' + attr_value);
eventlist.push(attr_value);
//eval(attr_value);
}
}
}
}
}
console.log(eventlist);
for(var i in HOOK_EVENT_LIST){
var evt = new CustomEvent('CustomEvent');
evt.initCustomEvent(HOOK_EVENT_LIST[i]["type"], true, true, null);
console.log('dispatch event '+HOOK_EVENT_LIST[i]["type"]);
HOOK_EVENT_LIST[i]["element"].dispatchEvent(evt);
}
for(let i=0;i<eventlist.length;i++){
eval(eventlist[i]);
}
# 技术细节
- Clicker基于chrome浏览器插件开发
- Clicker所做的工作:
- 寻找当前tab页面(窗口)所有的a标签,在新的tab页面打开
- 寻找当前tab页面所有的form标签,自动填充后在新tab页面提交
- 寻找所有标签的data-src/data-url属性,在新的tab页面打开
- 寻找所有标签的on事件,依次触发事件执行
- hook拦截addEventListener事件,依次触发事件执行
- 所有tab页均会执行以上几步操作,并发执行;tab页执行完以上操作,会自动close窗口
- 此外Clicker还有
- tab数量监控功能,防止浏览器打开过多tab页面,而内存崩溃退出
- 全局数组去重功能,防止重复打开
- 白名单功能,防止打开不相干站点
- 黑名单功能,防止自动退出,登录cookie失效
# 局限性
- 对于事件造成的页面跳转,后续事件无法继续触发,暂时没有好的解决办法