Cendertron,动态爬虫与敏感信息泄露检测

Cendertron = Crawler + Rendertron

Cendertron https://url.wx-coder.cn/HinPM 是基于 Puppeteer 的 Web 2.0 动态爬虫与敏感信息泄露检测工具。其依托于 xe-crawler 的通用爬虫、调度与缓存模型,新增了 Monkey Test 以及 Request Intercept 等特性,以期尽可能多地挖掘页面与请求。同时针对渗透测试的场景,Cendertron 内置了目录扫描、敏感文件扫描的能力,能够模拟用户实际在浏览器登录状态下的自定义字典爆破。Cendertron 在大量实践的基础上设置了自身的去重策略,能够尽可能地避免重复爬取,加快扫描速度。Cendertron 同时也是正在闭源开发的 Chaos-Scanner 模块化安全扫描解决方案的一部分,为基础扫描与智能扫描提供前置输入。

Usage | 使用

Locally Development | 本地开发

在本地开发中,我们只需要如正常的 Node 项目一样启动,其会使用 Puppeteer 内置的 Headless Chrome 来执行界面渲染操作:

$ git clone https://github.com/wx-chevalier/Chaos-Scanner
$ cd cendertron
$ yarn install
$ npm run dev

启动之后可以按提示打开浏览器界面:

这里我们可以以 DVWA 作为测试目标,在输入框内输入 http://localhost:8082/ 然后执行爬取,即可得到如下结果:

{"isFinished": true,"metrics": {"executionDuration": 116177,"spiderCount": 51,"depth": 4},"spiderMap": {"http://localhost:8082/vulnerabilities/csrf/": [{"url": "http://localhost:8082/vulnerabilities/view_source.php?id=csrf&security=low","parsedUrl": {"host": "localhost:8082","pathname": "/vulnerabilities/view_source.php","query": {"id": "csrf","security": "low"}},"hash": "localhost:8082#/vulnerabilities/view_source.php#idsecurity","resourceType": "document"}// ...]}
}

需要说明的是,因为 DVWA 是需要登录后爬取,因此如果想进行完整的测试请参考下文的 POST 方式创建任务。

Deploy in Docker | 部署在 Docker 中

# build image
$ docker build -t cendertron .# run as contaner
$ docker run -it --rm -p 3033:3000 --name cendertron-instance cendertron# run as container, fix with Jessie Frazelle seccomp profile for Chrome.
$ wget https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json -O ~/chrome.json
$ docker run -it -p 3033:3000 --security-opt seccomp=$HOME/chrome.json --name cendertron-instance cendertron# or
$ docker run -it -p 3033:3000 --cap-add=SYS_ADMIN --name cendertron-instance cendertron# use network and mapping logs
$ docker run -d -p 3033:3000 --cap-add=SYS_ADMIN --name cendertron-instance --network wsat-network cendertron

Deploy as FC | 以函数式计算方式部署

Install cendertron from NPM:

# set not downloading chromium
$ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true$ yarn add cendertron
# or
$ npm install cendertron -S

Import Crawler and use in your code:

const crawler = new Crawler(browser, {onFinish: () => {callback(crawler.spidersRequestMap);}
});let pageUrl =evtStr.length !== 0 && evtStr.indexOf('{') !== 0? evtStr: 'https://www.aliyun.com';crawler.start(pageUrl);

If you want to use it in Alibaba Function Computing Service, cendertron-fc provides simple template.

Strategy | 策略

Cendertron 的内部架构如下所示:

Crawler Scheduler 会负责定期重启 Headless Chrome 以控制缓存,并且针对待爬取的请求返回已缓存的内容。Crawler Scheduler 会为每个无缓存的目标创建 Crawler,Crawler 会根据策略创建不同的 Spider,每个 Spider 依次执行并且将结果推送到 Crawler 中;Crawler 在全部 Spider 执行完毕后会将结果推送到缓存并且通知 Crawler Scheduler:

export interface CrawlerOption {// 爬取深度,如果设置为 1 就是单页面爬虫depth: number;// 爬虫的唯一编号uuid?: string;// 爬虫缓存crawlerCache?: CrawlerCache;// 单页面爬取出的最多的子节点数maxPageCount: number;// 总站点的总延时timeout: number;// 单页面的延时pageTimeout: number;// 是否仅爬取同站内容isSameOrigin: boolean;// 是否忽略媒体资源isIgnoreAssets: boolean;// 是否设置为移动模式isMobile: boolean;// 是否开启缓存useCache: boolean;// 是否使用弱口令扫描useWeakfile: boolean;// 页面 Cookiecookie: string;// 页面的 localStoragelocalStorage: object;
}

模拟操作

Cendertron 内置了 Click Monkey, Gremlins 等多种随机执行器,会点击按钮并且执行一些随机操作:

function initGermlins() {gremlins.createHorde().gremlin(gremlins.species.formFiller()).gremlin(gremlins.species.clicker().clickTypes(['click'])).gremlin(gremlins.species.toucher()).gremlin(gremlins.species.scroller()).gremlin(function() {if ('$' in window) {window.$ = function() {};}}).unleash();
}

请求监听与提取

Cendertron 会监听打开的页面与所有的 Ajax 请求:

await page.setRequestInterception(true);// 设置目标监听
const targetCreatedListener = (target: puppeteer.Target) => {const opener = target.opener();if (!opener) {return;}// 记录所有新打开的界面opener.page().then(_page => {if (_page === page) {target.page().then(_p => {if (!_p.isClosed()) {openedUrls.push(target.url());_p.close();}});}});
};// 监听所有当前打开的页面
browser.on('targetcreated', targetCreatedListener);page.on('request', interceptedRequest => {// 屏蔽所有的图片if (isMedia(interceptedRequest.url())) {interceptedRequest.abort();} else if (interceptedRequest.isNavigationRequest() &&interceptedRequest.redirectChain().length !== 0) {interceptedRequest.continue();} else {interceptedRequest.continue();}requests.push(transformInterceptedRequestToRequest(interceptedRequest));// 每次调用时候都会回调函数cb(requests, openedUrls, [targetCreatedListener]);
});

URL 归一化与过滤

所谓的 URL 归一化,就是将同一资源下被随机串处理的 Path 们泛化成同一个 Pattern,从而减少重复爬取的数目;当然,在安全扫描的场景下我们需要进行尽可能地去重,而在数据爬取的场景下,则往往不需要进行过多的过滤。目前 Cendertron 只是采取了简单的 UTL 归一化算法,并且使用 Set 进行过滤,如果你想了解更复杂的 URL 归一化与聚类算法,可以参考自然语言处理 https://url.wx-coder.cn/JcINy 或者哈希表实战 https://url.wx-coder.cn/WfdWP 中的关联章节。

export function hashUrl(url: string): string {// 将 URL 进行格式化提取const _parsedUrl = parse(url, url, true);let urlHash = '';if (!_parsedUrl) {return urlHash;}// 提取出 URL 中的各个部分const { host, pathname, query, hash } = _parsedUrl;// 判断是否存在查询参数const queryKeys = Object.keys(query).sort((k1, k2) => (k1 > k2 ? 1 : -1));if (queryKeys.length > 0) {// 如果存在查询参数,则默认全路径加查询参数进行解析urlHash = `${host}#${pathname}#${queryKeys.join('')}`;} else {// 如果不存在查询参数,则去除 pathname 的最后一位,并且添加进来const pathFragments = pathname.split('/');// 判断路径是否包含多个项目,如果包含,则将所有疑似 UUID 的替换为 IDif (pathFragments.length > 1) {urlHash = `${host}#${pathFragments.filter(frag => frag.length > 0).map(frag => (maybeUUID(frag) ? 'id' : frag)).join('')}`;} else {urlHash = `${host}#${pathname}`;}}if (hash) {const hashQueryString = hash.replace('#', '');const queryObj = parseQuery(hashQueryString);Object.keys(queryObj).forEach(n => {if (n) {urlHash += n;}});}return urlHash;
}

权限认证

以 DVWA 为例,可以用 Docker 快速开启测试环境:docker run --rm -it -p 8082:80 vulnerables/web-dvwa,然后向 /scrape 提交 POST 请求:

{"url": "http://localhost:8082/vulnerabilities/csrf/","cookies": "tid=xx; PHPSESSID=xx; security=low"
}

在 Cendertron 中,其会使用如下方式设置 Cookie:

const puppeteer = require('puppeteer');let rockIt = async () => {const browser = await puppeteer.launch({ headless: false });const page = await browser.newPage();var cookie = [// cookie exported by google chrome plugin editthiscookie{domain: 'httpbin.org',expirationDate: 1597288045,hostOnly: false,httpOnly: false,name: 'key',path: '/',sameSite: 'no_restriction',secure: false,session: false,storeId: '0',value: 'value!',id: 1}];await page.setCookie(...cookie);await page.goto('https://httpbin.org/headers');console.log(await page.content());await page.close();await browser.close();
};
rockIt();

未来也会支持 localStorage 等存储方式:

await page.evaluate(() => {localStorage.setItem('token', 'example-token');
});

检测到目标url存在内部ip地址泄露_Cendertron,动态爬虫与敏感信息泄露检测相关推荐

  1. 检测到目标URL存在http host头攻击漏洞

    一.前言 漏洞描述:为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST"].但是这个header是不 ...

  2. 检测到目标URL存在http host头攻击漏洞,修复方案:在Web服务器防止Host头攻击

    一.前言 漏洞描述:为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST"].但是这个header是不 ...

  3. IP 地址冲突检测程序源码(解决某种情况下检测无效的问题)

    1. 参考代码 先上一个 arp 参考代码,但是这个参考代码不能全面的检测 IP 地址冲突. http://blog.csdn.net/wanxiao009/article/details/56222 ...

  4. java host头攻击漏洞_Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法...

    检测到目标URL存在http host头攻击漏洞 详细描述 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST ...

  5. 检测到目标URL启用了 Microsoft ASP.NET 调试

      检测到目标URL启用了 Microsoft ASP.NET 调试 1 详细描述 Microsoft ASP.NET 很容易受到信息泄露***.***者可以发送一个通知是否支持调试支持的恶意请求.  ...

  6. js获取内网/局域网ip地址,操作系统,浏览器版本等信息

    这次呢,说一下使用js获取用户电脑的ip信息,刚开始只是想获取用户ip,后来就顺带着获取了操作系统和浏览器信息. 先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器 ...

  7. el-form 动态校验规则_动态多线程敏感信息泄露检测工具

    weakfilescan 基于爬虫,动态收集扫描目标相关信息后进行二次整理形成字典规则,利用动态规则的多线程敏感信息泄露检测工具,支持多种个性化定制选项 包括: 规则字典多样化定义(支持正则.整数.字 ...

  8. 致远OA敏感信息泄露漏洞合集(含批量检测POC)

    文章目录 前言 敏感信息泄露 A6 status.jsp 信息泄露漏洞 漏洞描述 漏洞影响 网络测绘 漏洞复现 POC 批量检测 getSessionList.jsp Session泄漏漏洞 漏洞描述 ...

  9. 检测到目标url存在框架注入漏洞_HOST注入攻击剖析

    关于网站的渗透测试可能师傅们都有自己一套思路,有个共同点就是目标网站基本属于全静态页面,几乎很少存在动态参数这时意味着客户端无法通过提交参数形式进行测试,理论上也规避掉了许多风险.既然无法从参数层面进 ...

最新文章

  1. iOS开发之UIWebView
  2. python代码基础题-Python初学者福利 完整试题附答案 干货(收藏篇)
  3. fedora18装一些软件及配置
  4. java中的最终变量_在lambda表达式中使用的变量应该是最终变量或有效的最终变量。...
  5. Windows Phone 7“芒果”更新带来浏览器重大升级:IE Mobile 9
  6. 玩转mini2440开发板之【编译烧录rootfs根文件系统全过程记录】
  7. HALCON示例程序resistor.hdev通过不同焦距图像提取深度信息
  8. 拦截器及 Spring MVC 整合
  9. CSS3技巧 —— 渐变
  10. 删除android电视软件下载,安卓智能电视必装工具没有之一,进程管理备份清理全靠它!...
  11. 关于鸿蒙DevEco Studio学习
  12. iOS和js交互三部曲,很不错的文章和demo
  13. 小米2s安卓10刷机包_小米10刷机包
  14. ks 曲线_Ks密度曲线分布图绘图
  15. 授人以鱼:教你找电影
  16. MongoDB学习记录10-分片-副本集(mongodb3.2版本以前)
  17. 流行手机谜语大解密 (爱情诗)
  18. vue的生命周期(详细)
  19. Probability and Stochastic Models(1) —— 研一新课学习笔记
  20. 顾险峰:当深度学习遇到3D

热门文章

  1. eclipse项目导入idea部署到tomcat
  2. 计算机网络的ip分配,IP地址分配_网络设备技术应用_太平洋电脑网PConline
  3. c语言 异或_编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)
  4. c++检测输入是否为数字_Go64 for Mac(检测应用是否为64位)
  5. 光动能表怎么维护_男士手表什么牌子好,男士手表品牌推荐, 天梭、阿玛尼、西铁城、天王表、罗西尼、卡西欧男手表推荐...
  6. 如何使用dll ip转换_如何使用多功能转换插座更安全
  7. linux用户权限简介,Linux用户及权限管理
  8. CTF-Crypto密码学
  9. java 官网下载jdk源码_openJDK之如何下载各个版本的openJDK源码
  10. 动态度量 linux,动态可信度量.ppt