前言
最近在學習滲透測試知識幻林,自從開始使用Rad便非常的驚喜瑞你,但在使用過程中產(chǎn)生了很多小疑問和小障礙烛愧,經(jīng)過一段時間的學習使用油宜,形成了一些拙見,與大家共享怜姿,希望大家能站在我的肩膀上慎冤,繼續(xù)前進。
一沧卢、Rad是什么蚁堤?
rad,全名 Radium但狭,名字來源于放射性元素——鐳, 從一個URL開始披诗,輻射到一整個站點空間。他是從企業(yè)版Xray中提取出的一款專為安全掃描而生的瀏覽器爬蟲熟空。由Golang寫成,具有如下特點:
通過調用Chrome搞莺,可以智能爬取各種 Web2.0 網(wǎng)站息罗,模擬人的行為進行點擊、輸入等才沧,自動事件觸發(fā)和表單填充迈喉,助力漏洞掃描更快一步
支持Windows绍刮,Linux,MacOS(包括M1芯片版)
支持手動登錄網(wǎng)站后繼續(xù)爬取
支持在爬取過程中對相似度高的頁面進行去重挨摸,過濾靜態(tài)文件孩革、重復請求減少資源消耗
支持自由配置代理,UA等設置
支持為指定域名配置headers
支持多種輸出得运,可選擇輸出域名膝蜈,完整請求,JSON
支持自定義請求關鍵字/正則過濾熔掺,防止危險請求觸發(fā)饱搏、意外登出
支持自定義并發(fā)控制,合理調配資源占用
支持自定義行為控制置逻,限制單個頁面中點擊深度推沸,點擊次數(shù)、點擊時間間隔券坞、超時時間
二鬓催、安裝Rad
下載地址
https://github.com/chaitin/rad/releases
自行下載對應版本的Rad即可
準備
安裝最新版本的Chrome
Rad是沒有圖形化界面的,所以需要通過Powershell恨锚,cmd宇驾,shell等通過命令行調用。配置文件需要隨意制定一個掃描目標后生成眠冈。
執(zhí)行如下命令獲取配置文件:
rad.exe -t http://example.com 各自系統(tǒng)命令有所不同
執(zhí)行完成后應如下圖
三飞苇、基礎使用
首先使用rad.exe -h查看Rad本身自帶的幫助信息
1.--target|-t|--url|-u
該參數(shù)都可以指定掃描目標,作用一樣
2.--config|-c
該參數(shù)可指定使用哪個配置文件蜗顽,當未使用該參數(shù)時默認rad_config.yml
3.--text-output|--text
指定輸出模式為txt布卡,且將導出基本結果,也就是只有請求類型與請求地址雇盖。
輸入結果如圖:
4.--full-text-output|--full
指定輸出模式為txt忿等,且將導出完整請求,也就是包括了請求頭與請求體崔挖。
輸入結果如下圖:
5.--json-output|--json
指定輸出模式為json贸街,且將導出完整請求,也就是包括了請求頭與請求體狸相。
輸出結果如下圖:
6.--auto-index|--index
該參數(shù)需配合結果輸出參數(shù)一起使用薛匪,他會檢測到如果當前生成的結果文件已存在,便自動在結果文件的名稱后面添加編號脓鹃,不需要自己再修改生成文件的名稱逸尖。
效果如圖:
7.--http-proxy
設置代理服務器,需要注意,此處的原理為:Rad為調用起的Chrome設置了代理娇跟,而不是Rad本身使用代理岩齿。
8.--disable-headless
無頭模式,又稱為無界面啟動苞俘,是指在調用Chrome做爬蟲時不打開瀏覽器盹沈,而是使用瀏覽器的內核進行爬蟲
Rad在默認狀態(tài)下是啟用無頭模式的,使用此參數(shù)可禁用無頭模式吃谣,使其開啟瀏覽器運行乞封,觀測爬取過程
無頭模式的默認狀態(tài)也可以在配置文件中修改
9.--log-level
指定輸出等級,默認輸出info基协,當級別高于info后歌亲,info將不被輸出。
級別分為:debug, info, warn, error, fatal
效果如下圖:
10.--no-banner
去掉banner信息
效果如圖:
11.--wait-login
使用該參數(shù)會自動禁用無頭瀏覽模式澜驮,開啟一個瀏覽器供手動登錄陷揪。在登錄完畢后在命令行界面點擊回車鍵繼續(xù)爬取。注意需要登陸時請在配置文件中開啟圖片顯示功能杂穷,否則會出現(xiàn)驗證碼不顯示的現(xiàn)象
以下為登陸全流程
首先會開啟一個空白界面悍缠,需要手動在地址欄輸入要登陸的地址
響應完成后輸入賬號密碼進行登錄
登陸完成后進入主界面
這個時候回到shell界面點擊回車即可繼續(xù)爬取
四、Rad聯(lián)動Xray等其他工具
Rad與其他工具聯(lián)動的原理基本一致耐量,這里只選擇三個工具作為演示
Xray
社區(qū)版:設置上級代理為Xray監(jiān)聽地址 首選運行xray:
? ? — xray webscan --listen 127.0.0.1:7777 --html-output proxy.html
? ? — 運行rad:rad -t http://example.com -http-proxy 127.0.0.1:7777
高級版:對 Rad 進行了深度融合飞蚓,下載后可以一鍵使用:
? ? — xray webscan --browser-crawler http://example.com --html-output vuln.html
? ? — 注意將Xray與Rad放于同一目錄下
Burp Suite
使用burp作為上級代理,只需要將bp打開廊蜒,然后將Rad的http-proxy設置為burp的代理端口即可
burp的抓包打開后趴拧,就可以直接使rad暫停住,可以修改包的內容再發(fā)送山叮。
也可以將intercept置為off著榴,在HTTP history中查看發(fā)送與返回的數(shù)據(jù)包
如果需要再掛一層代理改變出網(wǎng)ip,只需要在Burp的User options中的Upstream Proxy Servers設置上層代理即可
W13scan
原理與xray一樣屁倔,使用W13scan的被動掃描作為上級代理完成聯(lián)動
python3 w13scan.py -s 127.0.0.1:7778 --html? # 端口可省略脑又,默認為7778,開啟--html即實時生成html報告
rad -t http://example.com -http-proxy 127.0.0.1:7778
五、多目標掃描
由于Rad目前不支持多目標掃描锐借,所以可以選擇使用命令行的多命令執(zhí)行完成多目標掃描的目的问麸。
1.多條命令之間推薦使用;來執(zhí)行,第一時因為linux的命令行與powershell都支持該符號分割钞翔,第二也是可以在上一條命令執(zhí)行失敗的情況下繼續(xù)執(zhí)行下一條命令严卖,從而達到出現(xiàn)了問題也不影響后續(xù)的效果。
效果如下圖:
2.目標少的時候還可以使用這種方式布轿,但如果目標多了哮笆,使用腳本來生成命令會更為合適
如果需要Xray+Rad的批量主動掃描俺亮,可以使用timwhitez師傅寫的腳本來實現(xiàn)。獲取地址:Xray-Rad
如果只是生成一段命令疟呐,可以參考以下腳本,使用方式:python 1.py -r a.txt -o b.txt
import argparse
import time
parser = argparse.ArgumentParser()
txtName = str(int(time.time())) + ".txt"
parser.add_argument('-r',help='Enter the file you want to generate')
parser.add_argument('-o', type=str, default=txtName, help='Please enter the name of the file you want to output. Default is '+txtName)
args = parser.parse_args()
f = open(args.r,'r')
data = f.readlines()
a = ""
for i in data:
a += "; .\\rad.exe -t {} --json abs.json --index".format(i.strip())
f.close()
f = open(args.o,"w")
f.write(a)
f.close()
這是目標文件:
這是生成結果:
具體想要生成出什么樣的命令都可以再修改
配置文件解析
此處只對配置文件中描述的比較模糊的地方做一下詳細說明东且,故不粘貼配置文件的全部內容
exec_path: ""
? ? ? — 啟動chrome的路徑启具,正常安裝了Chrome的就一般不需要填寫
disable_headless: true
? ? ? — 無頭模式,也就是無界面啟動珊泳。默認為無界面啟動狀態(tài)鲁冯,修改為false后運行程序即可看到瀏覽器
force_sandbox: false
? ? ? — 強制開啟sandbox;為 false 時默認開啟沙箱色查,但在容器中會關閉沙箱薯演。為true時強制啟用沙箱,可能導致在docker中無法使用秧了。
? ? ? — 沙盒利用操作系統(tǒng)提供的安全性跨扮,允許不能對計算機做出持久性改變或者訪問持續(xù)變化的信息的代碼的執(zhí)行。沙箱提供的架構和具體保證依賴于操作系統(tǒng)验毡。
proxy: ""
? ? ? ? — 代理配置衡创,如果不想在命令行中每次都添加,可直接在此處添加
domain_headers:? ? ? ? ? ? ? ? ? # 請求頭配置:[]{domain,map[headerKey]HeaderValue}
- domain: '*'? ? ? ? ? ? ? ? ? ? # 為哪些域名設置header晶通,glob語法
? headers: {}? ? ? ? ? ? ? ? ? ? # 請求頭璃氢,map[key]value
? ? ? — 該參數(shù)可以實現(xiàn)高度的自定義,并且可以設置多個domain狮辽,為每個不同的domain設置不同的headers
— 拿http://space.bilibili.com來舉例一也,當沒有登陸的時候,訪問該url會跳轉至登陸界面喉脖。而當?shù)顷懞笠叮搖rl會跳轉至登陸用戶的空間。所以如果想要爬取相關內容动看,又不想使用wait-login尊剔,就可以先登錄,抓取cookie菱皆,然后此處設置cookie须误,會直接跳轉到登錄用戶的空間
? ? ? — 還類似與這個漏洞,CVE-2021-29441仇轻,將UA設定成指定的內容京痢,即可未授權訪問admin的內容
? ? ? — 還有像一些webVPN,通過特定的cookie允許訪問內網(wǎng)的內容篷店,正常在沒有cookie時無法訪問祭椰。這個時候就可以對該域名添加指定cookie臭家,從而實現(xiàn)讓rad爬取內網(wǎng)資產(chǎn)的目的。
element_filter_strength: 0
? ? ? — 過濾同站點相似元素強度方淤,1-7取值钉赁,強度逐步增大,為0時不進行跨頁面元素過濾
? ? ? — 在爬取過程中對相似度高的頁面進行去重携茂,過濾靜態(tài)文件你踩、重復請求減少資源消耗,可有效減少無用請求的輸出讳苦。
new_task_filter_config|request_send_filter_config|request_output_filter_config
? ? ? — 檢查某個鏈接是否應該被加入爬取隊列带膜、某個請求是否應該被發(fā)送、輸出
? ? ? — path_disallowed: [] # 不允許訪問的路徑, 支持的格式如: test鸳谜、*test*
拿這個參數(shù)舉例子:
? ? ? — 未修改時所爬取到的鏈接:
添加不想被爬的路徑:
修改后的爬取結果:
輸出文件的使用
Rad有三種輸出模式膝藕,簡易輸出,全輸出和Json輸出咐扭,此處大概提一下一些簡單的使用芭挽,也歡迎師傅們有更多更好的想法。
1.當使用--text 1.txt也就是簡易輸出的時候蝗肪,可以選擇將輸出的文件中的GET與POST去掉览绿,然后直接將該文件交給sqlmap來跑
當生成的txt比較大,或者是批量目標生成的txt合起來穗慕,就可以使用這樣的命令進行批量檢測python sqlmap.py -m 1.txt --smart --batch --random-agent --level 5
2.上述的使用容易出現(xiàn)POST請求不會被檢測到的情況饿敲,所以可以使用Json格式進行輸出,然后通過腳本實現(xiàn)對GET請求與POST請求的分離逛绵,使用多命令執(zhí)行來實現(xiàn)精準匹配怀各。
import argparse
import time
import json
import base64
parser = argparse.ArgumentParser()
txtName = str(int(time.time())) + ".txt"
parser.add_argument('-r',help='Enter the file you want to generate')
parser.add_argument('-o', type=str, default=txtName, help='Please enter the name of the file you want to output. Default is '+txtName)
args = parser.parse_args()
f = open(args.r,'r')
load_dict = json.load(f)
f.close()
a = ""
for i in range(len(load_dict)):
if load_dict[i]["Method"] == "GET":
a += "; python sqlmap.py -u \"{}\" --smart --batch --random-agent --level 5".format(load_dict[i]["URL"])
else:
if "b64_body" in load_dict[i]:
a += "; python sqlmap.py -u \"{}\" --data \"{}\" --smart --batch --random-agent --level 5".format(load_dict[i]["URL"],base64.b64decode(load_dict[i]["b64_body"]).decode("utf-8"))
else:
continue
f = open(args.o,"w")
f.write(a)
f.close()
該腳本只是實例,可根據(jù)自己需求自行修改术浪。
效果如下瓢对,為方便展示,將分號替換為回車:
你學會了嗎胰苏?
沒有吧硕蛹!
再去看一遍!
快點K恫ⅰ7ㄑ妗!