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

21a64af0e217ff96b8a8c130f65e0011.png

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 模块化安全扫描解决方案的一部分,为基础扫描与智能扫描提供前置输入。

32c5bf57c1d051385420c3cfc6fab6af.png

Usage | 使用

Locally Development | 本地开发

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

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

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

9b3e254c700fc2f074bd0c2308e025de.png

这里我们可以以 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 的内部架构如下所示:

411c83621b2308c6038167d880baf937.png

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;
}

模拟操作

14acd06f3bca97cc65f2f3f10ea9abd6.png

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');
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wamp2 php配置,wamp安装后自定义配置的方法

WampServer是目前应用非常广泛的PHP集成开发环境,本文就来讲述Wamp安装后自定义配置的方法。供大家参考借鉴。具体如下:wamp2.5安装完毕后,自己手动重新设置了apache的默认根目录。但是发现本机可以访问,别人不能访问。提示信息为…

屏幕坏点检测图片_iPhone新机如何检测质量 iPhone新机检测质量步骤【详解】

iPhone新机怎么检测好坏_iPhone新机检测质量方法 说实话,苹果对于iPhone的品控把握确实一代不如一代,特别是去年发布的iPhone7系列,很多用户都反映自己新买的手机存在划痕、屏幕发黄、掉漆等问题。那么当我们购买一部全新的iPhone7时&#xf…

php 安全mysql,关于php:我从mysql注入安全吗?

本问题已经有最佳答案,请猛点这里访问。这是否足以避免SQL注入?这里只需要mysql_real_escape_string()方法。在将数据插入数据库之前,不应该执行htmlentities()或urlencode()。这些方法通常是在呈现您提供给用户的视图期间编写的代码。避免SQ…

excel单元格斜线_怎么在excel中画斜线?怎么在excel表格中画斜线?

在excel表格中画斜线的技巧教程:1.在Excel中打开一个空白工作簿。 2.您可以在任何大小的单元格中执行此操作,但是如果先将其增大则更容易理解。为此,我们只需单击并按住第1行和第2行之间的线,然后将其拖动到所需的高度即可。然后对…

php报表数据打印机,通过打印机打印带打印功能的php表

我有以下php表,我如何只在php表中添加打印功能?点击一个按钮,下面的表格通过打印机打印,我试过’CTRL P’,我只得到页面的html部分示例页眉,页脚,导航栏,而不是结果php结果echo "FILEIDFirstnameLastnameIssue DateInterest RateTermsBalance OutstandingBalan…

xbox one s驱动_理想照进现实 理想ONE开始接受预定

2016年4月22日,车和家创始人&CEO李想在源码资本第二届码会年会首谈车和家,改造城市出行。车和家 创始人&CEO 李 想2016年码会年会演讲2019年4月10日,增程式智能电动车「理想ONE」正式公布售价并开始接受预订,并将于2019年…

two+few+arguments+php,PHP5.5 ~ PHP7.2 新特性整理

PHP5.5 ~ PHP7.2 新特性整理一、从PHP 5.5.x 移植到 PHP 5.6.x使用表达式定义常量在之前的 PHP 版本中, 必须使用静态值来定义常量,声明属性以及指定函数参数默认值。 现在你可以使用包括数值、字符串字面量以及其他常量在内的数值表达式来 定义常量、声…

date设置时间_解决 IDEA 无法找到 java.util.Date 的问题

原文首发于 https://studyidea.cn/问题最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date。可以看到,智能提示的结果没有 java.util.Date。没办法,只能暂时手动导入该包。最近闲下…

mysql插入语句例句,一句简单的MySql插入语句怎么写 ?

守候你守候我insert into 表名 values(default,"名字","2011-04-15 12:22:25"); //default可以换成null------------------------------insert into 表名 (name,datetime) values("名字","2011-04-15 12:22:25");使用SQL语法大写&…

vue key重复_【第2112期】 import { reactive } from #39;vue#39;

前言今日早读文章由Anthony Fu授权分享。Anthony Fu,是 Vue 的 Core Team 的一员,在 Vue主要负责 vue/composition-api 这个项目的维护。这是一个面向 Vue 2 的插件,它在 Vue 2 中增加了 Vue 3 的 Composition API 的支持。最近也加入了 Vite…

matlab系统稳定性分析,控制系统稳定性分析的MATLAB实现

收稿日期 :200706220 基金项目 :周口师范学院青年基金资助项目(No. ZKNUQN200621) 作者简介 :刘  伟(1976 - ) ,女 ,河南太康人 ,助教 ,硕士 ,主要从事电力系统及其自动化仿真研究. 第 25 卷 第 2 期 周口师范学院学报 2008 年 3 月 Vol. 25 No. 2 Journal of Zhoukou Normal …

路由器下一跳地址怎么判断_网络基本功三:细说路由器

介绍以太网交换机工作在第二层即数据链路层,用于在同一网络内部转发以太网帧。但是,当源和目的IP地址位于不同网络时,以太网帧必须发送给路由器。路由器负责在不同网络间传输报文,通过路由表来决定最佳转发路径。当主机将报文发送…

HTML多选mysql,html多选下拉框 | 学步园

一个jquery ui,实现html的多选下拉框,在下拉里面加checkbox,不改变页面的提交特性,只是动态的改变select选中的多选数据。jsp页面例子:pageEncoding"UTF-8" import"java.util.*,java.text.*"%>String path…

利用逆矩阵解线性方程组_经典Jacobi方法用于求解矩阵特征值

1、引言求解线性方程组在许多领域中都有重要应用,写成矩阵的形式: 。求解 可以写成: ,这里需要求解矩阵 的逆。《线性代数》中给出的方法主要有两类:1、设置增广矩阵,利用高斯消元法,通过初等行…

filename: core/loader.php,使用第三方包后出现的这个错误,你们都遇到过吗?

使用了一些第三方包,经常会发现,引入某些第三方包后(比如在laravel5.6中引入viacreative/sudo-su),使用命令行工具会遇到这样的错误提示,卸载了第三方包后重新安装vendor目录问题立马解决。真是把人头发都愁白了:PHP F…

python函数的作用域_python学习第五篇 函数 变量作用域

原博文 2019-07-18 23:40 − 函数 函数是组合好的,可以重复使用的,用来实现单一或相关联功能的代码片段作用 能提高应用的模块性和代码的重复利用率函数的创建 第一函数的规则 1.函数代码块一def关键字开头,后接函数标识符名称和圆括号‘&…

js post中文乱码 php,AJAX之POST数据中文乱码如何解决

本文主要和大家分享AJAX之POST数据中文乱码如何解决,前端使用encodeURI进行编码,希望能帮助到大家。var param encodeURI(param);$.ajax({url: url,methodtype: "POST",async: false,timeout: 60000,contentType: "application/json&quo…

python递归 数字全排列_利用递归实现全排列(python)

利用递归实现全排列(python) """ 利用递归实现全排列 第一个位置可能有n种可能,第二个位置可能 有n-1种可能...... 代码思路就是第一个位置可以和n个元素交换, 第二个元素可以和n-1个元素进行交换,到最 后一个输出这次排列&am…

python pip使用_Python——pip的安装与使用

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。Python 2.7.9 或 Python 3.4 以上版本都自带 pip 工具。pip 官网:https://pypi.o…

php文章列表样式,PHPCMS V9 文章列表循环样式自定义方法

在此,再次分享Whidy的文章"phpcms文章列表循环不同样式制作方法",下面CMSYOU来与大家具体分享,原地址为http://whidy.net/phpcms-list-with-different-style.html,在这里感谢。大家在用PHPCMS系统做网站的时候,有时候在…