檢測到目標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.pswp.cn/news/534196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534196.shtml
英文地址,請注明出處:http://en.pswp.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系統做網站的時候,有時候在…