一文看懂Rad基礎操作
00 前言
從有Rad開始就一直在使用,從開始使用便非常的驚喜,并在使用過程中產生了很多Rad的使用小技巧,一些官方描述不太清晰或者很少提及的地方我也在與開發者的請教中明了,所以希望借此文章將一些使用技巧分享給大家。
01 Rad是什么?
rad,全名 Radium,名字來源于放射性元素——鐳, 從一個URL開始,輻射到一整個站點空間。他是從企業版Xray中提取出的一款專為安全掃描而生的瀏覽器爬蟲。由Golang寫成,具有如下特點:
- 通過調用Chrome,可以智能爬取各種 Web2.0 網站,模擬人的行為進行點擊、輸入等,自動事件觸發和表單填充,助力漏洞掃描更快一步
- 支持Windows,Linux,MacOS(包括M1芯片版)
- 支持手動登錄網站后繼續爬取
- 支持在爬取過程中對相似度高的頁面進行去重,過濾靜態文件、重復請求減少資源消耗
- 支持自由配置代理,UA等設置
- 支持為指定域名配置headers
- 支持多種輸出,可選擇輸出域名,完整請求,JSON
- 支持自定義請求關鍵字/正則過濾,防止危險請求觸發、意外登出
- 支持自定義并發控制,合理調配資源占用
- 支持自定義行為控制,限制單個頁面中點擊深度,點擊次數、點擊時間間隔、超時時間
02 安裝Rad
下載地址
https://github.com/chaitin/rad/releases
自行下載對應版本的Rad即可
準備
安裝最新版本的Chrome
Rad是沒有圖形化界面的,所以需要通過Powershell,cmd,shell等通過命令行調用。配置文件需要隨意制定一個掃描目標后生成。
執行如下命令獲取配置文件:
rad.exe -t http://example.com 各自系統命令有所不同

執行完成后應如下圖

03 基礎使用
首先使用rad.exe -h查看Rad本身自帶的幫助信息

1.--target|-t|--url|-u
- 該參數都可以指定掃描目標,作用一樣
2.--config|-c
- 該參數可指定使用哪個配置文件,當未使用該參數時默認rad_config.yml
3.--text-output|--text
- 指定輸出模式為txt,且將導出基本結果,也就是只有請求類型與請求地址。
- 輸入結果如圖:

4.--full-text-output|--full
- 指定輸出模式為txt,且將導出完整請求,也就是包括了請求頭與請求體。
- 輸入結果如下圖:

5.--json-output|--json
- 指定輸出模式為json,且將導出完整請求,也就是包括了請求頭與請求體。
- 輸出結果如下圖:

6.--auto-index|--index
- 該參數需配合結果輸出參數一起使用,他會檢測到如果當前生成的結果文件已存在,便自動在結果文件的名稱后面添加編號,不需要自己再修改生成文件的名稱。
- 效果如圖:


7.--http-proxy
- 設置代理服務器,需要注意,此處的原理為:Rad為調用起的Chrome設置了代理,而不是Rad本身使用代理。
8.--disable-headless
- 無頭模式,又稱為無界面啟動,是指在調用Chrome做爬蟲時不打開瀏覽器,而是使用瀏覽器的內核進行爬蟲
- Rad在默認狀態下是啟用無頭模式的,使用此參數可禁用無頭模式,使其開啟瀏覽器運行,觀測爬取過程
- 無頭模式的默認狀態也可以在配置文件中修改
9.--log-level
- 指定輸出等級,默認輸出info,當級別高于info后,info將不被輸出。
- 級別分為:debug, info, warn, error, fatal
- 效果如下圖:

10.--no-banner
- 去掉banner信息
- 效果如圖:

11.--wait-login
- 使用該參數會自動禁用無頭瀏覽模式,開啟一個瀏覽器供手動登錄。在登錄完畢后在命令行界面點擊回車鍵繼續爬取。注意需要登陸時請在配置文件中開啟圖片顯示功能,否則會出現驗證碼不顯示的現象
- 以下為登陸全流程
- 首先會開啟一個空白界面,需要手動在地址欄輸入要登陸的地址

- 響應完成后輸入賬號密碼進行登錄

- 登陸完成后進入主界面

- 這個時候回到shell界面點擊回車即可繼續爬取

04 Rad聯動Xray等其他工具
Rad與其他工具聯動的原理基本一致,這里只選擇三個工具作為演示
Xray
社區版:設置上級代理為Xray監聽地址 首選運行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暫停住,可以修改包的內容再發送。
- 也可以將intercept置為off,在HTTP history中查看發送與返回的數據包

- 如果需要再掛一層代理改變出網ip,只需要在Burp的User options中的Upstream Proxy Servers設置上層代理即可

W13scan
原理與xray一樣,使用W13scan的被動掃描作為上級代理完成聯動
- 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
05 多目標掃描
由于Rad目前不支持多目標掃描,所以可以選擇使用命令行的多命令執行完成多目標掃描的目的。
1.多條命令之間推薦使用;來執行,第一時因為linux的命令行與powershell都支持該符號分割,第二也是可以在上一條命令執行失敗的情況下繼續執行下一條命令,從而達到出現了問題也不影響后續的效果。
- 效果如下圖:

2.目標少的時候還可以使用這種方式,但如果目標多了,使用腳本來生成命令會更為合適
- 如果需要Xray+Rad的批量主動掃描,可以使用timwhitez師傅寫的腳本來實現。獲取地址:Xray-Rad
- 如果只是生成一段命令,可以參考以下腳本,使用方式:python 1.py -r a.txt -o b.txt
import argparseimport timeparser = 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
- 禁用無頭模式,也就是禁用無界面啟動。默認為禁用狀態,修改為false后運行程序即可看到瀏覽器
- force_sandbox: false
- 強制開啟sandbox;為 false 時默認開啟沙箱,但在容器中會關閉沙箱。為true時強制啟用沙箱,可能導致在docker中無法使用。
- 沙盒利用操作系統提供的安全性,允許不能對計算機做出持久性改變或者訪問持續變化的信息的代碼的執行。沙箱提供的架構和具體保證依賴于操作系統。
- proxy: ""
- 代理配置,如果不想在命令行中每次都添加,可直接在此處添加
?domain_headers: # 請求頭配置:[]{domain,map[headerKey]HeaderValue}- domain: '*' # 為哪些域名設置header,glob語法 headers: {} # 請求頭,map[key]value
- 該參數可以實現高度的自定義,并且可以設置多個domain,為每個不同的domain設置不同的headers
- 拿space.bilibili.com來舉例,當沒有登陸的時候,訪問該url會跳轉至登陸界面。而當登陸后,該url會跳轉至登陸用戶的空間。所以如果想要爬取相關內容,又不想使用wait-login,就可以先登錄,抓取cookie,然后此處設置cookie,會直接跳轉到登錄用戶的空間
- 還類似與這個漏洞,CVE-2021-29441,將UA設定成指定的內容,即可未授權訪問admin的內容
- 還有像一些webVPN,通過特定的cookie允許訪問內網的內容,正常在沒有cookie時無法訪問。這個時候就可以對該域名添加指定cookie,從而實現讓rad爬取內網資產的目的。
- element_filter_strength: 0
- 過濾同站點相似元素強度,1-7取值,強度逐步增大,為0時不進行跨頁面元素過濾
- 在爬取過程中對相似度高的頁面進行去重,過濾靜態文件、重復請求減少資源消耗,可有效減少無用請求的輸出。
- new_task_filter_config|request_send_filter_config|request_output_filter_config
- 檢查某個鏈接是否應該被加入爬取隊列、某個請求是否應該被發送、輸出
- path_disallowed: [] # 不允許訪問的路徑, 支持的格式如: test、*test*
- 拿這個參數舉例子:
- 未修改時所爬取到的鏈接:

- 添加不想被爬的路徑:

- 修改后的爬取結果:

輸出文件的使用
Rad有三種輸出模式,簡易輸出,全輸出和Json輸出,此處大概提一下一些簡單的使用,也歡迎師傅們有更多更好的想法。
1.當使用--text 1.txt也就是簡易輸出的時候,可以選擇將輸出的文件中的GET與POST去掉,然后直接將該文件交給sqlmap來跑
- 當生成的txt比較大,或者是批量目標生成的txt合起來,就可以使用這樣的命令進行批量檢測python sqlmap.py -m 1.txt --smart --batch --random-agent --level 5
2.上述的使用容易出現POST請求不會被檢測到的情況,所以可以使用Json格式進行輸出,然后通過腳本實現對GET請求與POST請求的分離,使用多命令執行來實現精準匹配。
import argparseimport timeimport jsonimport base64parser = 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: continuef = open(args.o,"w")f.write(a)f.close()
- 該腳本只是實例,可根據自己需求自行修改。
- 效果如下,為方便展示,將分號替換為回車:
