歡迎光臨
每天分享高質量文章

Dirmap:一款高階Web目錄檔案掃描工具

來自FreeBuf.COM,作者:H4ckForJob

https://www.freebuf.com/sectool/200890.html

前言

本人是一名立志安全開發的大學生,有一年安全測試經驗,有時在刷src的時候,需要檢查所有target的web業務系統是否洩露敏感目錄、檔案,工作量十分龐大,於是Dirmap誕生了~

 

知名的web目錄檔案掃描工具有很多,如:御劍1.5、DirBuster、Dirsearch、cansina。

 

其他開源的各種輪子,更是數不勝數。

 

這次我們不造輪子,我們需要造的是一輛車!open source的那種XD

需求分析

何為一個優秀的web目錄掃描工具?

 

經過大量調研,總結一個優秀的web目錄掃描工具至少具備以下功能:

併發引擎

能使用字典

能純爆破

能爬取頁面動態生成字典

能fuzz掃描

自定義請求

自定義響應結果處理…

功能特點

你愛的樣子,我都有,小鴿鴿瞭解下我吧:

支援n個target*n個payload併發

支援遞迴掃描

支援自定義需要遞迴掃描的狀態碼

支援(單|多)字典掃描

支援自定義字符集爆破

支援爬蟲動態字典掃描

支援自定義標簽fuzz標的url

自定義請求User-Agent

自定義請求隨機延時

自定義請求超時時間

自定義請求代理

自定義正則運算式匹配假性404頁面

自定義要處理的響應狀態碼

自定義跳過大小為x的頁面

自定義顯示content-type

自定義顯示頁面大小

按域名去重覆儲存結果

掃描效果

遞迴掃描

字典樣式

爆破樣式

爬蟲樣式

fuzz樣式

Q:這麼棒棒呀!那Dirmap該怎麼使用呢?

A:啊哈,你往下滑。

使用方法

環境準備

git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt

單個標的

python3 dirmap.py -iU https://target.com -lcf

多個標的

python3 dirmap.py -iF urls.txt -lcf

 

Q:哎呀,掃描結束了,我的結果呢qwq?

A:莫慌自動儲存的呀。

結果儲存

結果將自動儲存在專案根目錄下的output檔案夾中,每一個標的生成一個txt,命名格式為標的域名.txt。結果自動去重覆,不用擔心產生大量冗餘。

 

Q:矮油,不錯呦,但是我還想學習下高階用法呢。

A:好嘞,這就來,屏住呼吸,往下看。

高階使用

自定義dirmap配置,開始探索dirmap高階功能,暫時採用載入配置檔案的方式進行詳細配置,不支援使用命令列引數進行詳細配置!

 

編輯專案根目錄下的dirmap.conf,進行配置。

 

dirmap.conf配置詳解:

 

#遞迴掃描處理配置
[RecursiveScan]
#是否開啟遞迴掃描:關閉:0;開啟:1
conf.recursive_scan = 0
#遇到這些狀態碼,開啟遞迴掃描。預設配置[301,403]
conf.recursive_status_code = [301,403]
#設定排除掃描的目錄。預設配置空。其他配置:e.g:['/test1','/test2']
#conf.exclude_subdirs = ['/test1','/test2']
conf.exclude_subdirs = ""

#掃描樣式處理配置(4個樣式,1次只能選擇1個)
[ScanModeHandler]
#字典樣式:關閉:0;單字典:1;多字典:2
conf.dict_mode = 1
#單字典樣式的路徑
conf.dict_mode_load_single_dict = "dict_mode_dict.txt"
#多字典樣式的路徑,預設配置dictmult
conf.dict_mode_load_mult_dict = "dictmult"
#爆破樣式:關閉:0;開啟:1
conf.blast_mode = 0
#生成字典最小長度。預設配置3
conf.blast_mode_min = 3
#生成字典最大長度。預設配置3
conf.blast_mode_max = 3
#預設字符集:a-z。暫未使用。
conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"
#預設字符集:0-9。暫未使用。
conf.blast_mode_num = "0123456789"
#自定義字符集。預設配置"abc"。使用abc構造字典
conf.blast_mode_custom_charset = "abc"
#自定義繼續字符集。預設配置空。
conf.blast_mode_resume_charset = ""
#爬蟲樣式:關閉:0;開啟:1
conf.crawl_mode = 0
#解析robots.txt檔案。暫未實現。
conf.crawl_mode_parse_robots = 0
#解析html頁面的xpath運算式
conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"
#是否進行動態爬蟲字典生成:關閉:0;開啟:1
conf.crawl_mode_dynamic_fuzz = 0
#Fuzz樣式:關閉:0;單字典:1;多字典:2
conf.fuzz_mode = 0
#單字典樣式的路徑。
conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"
#多字典樣式的路徑。預設配置:fuzzmult
conf.fuzz_mode_load_mult_dict = "fuzzmult"
#設定fuzz標簽。預設配置{dir}。使用{dir}標簽當成字典插入點,將http://target.com/{dir}.php替換成http://target.com/字典中的每一行.php。其他配置:e.g:{dir};{ext}
#conf.fuzz_mode_label = "{ext}"
conf.fuzz_mode_label = "{dir}"

#處理payload配置。暫未實現。
[PayloadHandler]

#處理請求配置
[RequestHandler]
#自定義請求頭。預設配置空。其他配置:e.g:test1=test1,test2=test2
#conf.request_essay-headers = "test1=test1,test2=test2"
conf.request_essay-headers = ""
#自定義請求User-Agent。預設配置chrome的ua。
conf.request_essay-header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
#自定義請求cookie。預設配置空,不設定cookie。其他配置e.g:cookie1=cookie1; cookie2=cookie2;
#conf.request_essay-header_cookie = "cookie1=cookie1; cookie2=cookie2"
conf.request_essay-header_cookie = ""
#自定義401認證。暫未實現。因為自定義請求頭功能可滿足該需求(懶XD)
conf.request_essay-header_401_auth = ""
#自定義請求方法。預設配置get方法。其他配置:e.g:get;head
#conf.request_method = "head"
conf.request_method = "get"
#自定義每個請求超時時間。預設配置3秒。
conf.request_timeout = 3
#隨機延遲(0-x)秒傳送請求。引數必須是整數。預設配置0秒,無延遲。
conf.request_delay = 0
#自定義單個標的,請求協程執行緒數。預設配置30執行緒
conf.request_limit = 30
#自定義最大重試次數。暫未實現。
conf.request_max_retries = 1
#設定持久連線。是否使用session()。暫未實現。
conf.request_persistent_connect = 0
#302重定向。預設False,不重定向。其他配置:e.g:True;False
conf.redirection_302 = False
#payload後新增字尾。預設空,掃描時,不新增字尾。其他配置:e.g:txt;php;asp;jsp
#conf.file_extension = "txt"
conf.file_extension = ""

#處理響應配置
[ResponseHandler]
#設定要記錄的響應狀態。預設配置[200],記錄200狀態碼。其他配置:e.g:[200,403,301]
#conf.response_status_code = [200,403,301]
conf.response_status_code = [200]
#是否記錄content-type響應頭。預設配置1記錄
#conf.response_essay-header_content_type = 0
conf.response_essay-header_content_type = 1
#是否記錄頁面大小。預設配置1記錄
#conf.response_size = 0
conf.response_size = 1
#自定義匹配404頁面正則
#conf.custom_404_page = "fake 404"
conf.custom_404_page = ""
#自定義匹配503頁面正則。暫未實現。感覺用不著,可能要廢棄。
#conf.custom_503_page = "page 503"
conf.custom_503_page = ""
#自定義正則運算式,匹配頁面內容
#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"
conf.custom_response_page = ""
#跳過顯示頁面大小為x的頁面,若不設定,請配置成"None",預設配置“None”。其他大小配置參考e.g:None;0b;1k;1m
#conf.skip_size = "0b"
conf.skip_size = "None"

#代理選項
[ProxyHandler]
#代理配置。預設設定“None”,不開啟代理。其他配置e.g:{"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
conf.proxy_server = None

#Debug選項
[DebugMode]
#列印payloads並退出
conf.debug = 0

#update選項
[CheckUpdate]
#github獲取更新。暫未實現。
conf.update = 0

 

Q:我倒,配置檔案這麼多,終於看完了,可是我還想瞭解下預設的字典,還有怎麼新增自己的字典?

A:哦呼,這裡有預設字典檔案介紹。還有新增自定義字典,需要將你的字典放入data檔案夾,並修改dirmap.conf就可以使用了。

預設字典檔案

字典檔案存放在專案根目錄中的data檔案夾中:

dictmodedict.txt “字典樣式”字典,使用dirsearch預設字典;

crawlmodesuffix.txt “爬蟲樣式”字典,使用FileSensor預設字典;

fuzzmodedir.txt “fuzz樣式”字典,使用DirBuster預設字典;

fuzzmodeext.txt “fuzz樣式”字典,使用常見字尾製作的字典;

dictmult該目錄為“字典樣式”預設多字典檔案夾,包含:BAK.min.txt(備份檔案小字典),BAK.txt(備份檔案大字典),LEAKS.txt(資訊洩露檔案字典);

fuzzmult該目錄為“fuzz樣式”預設多字典檔案夾,包含:fuzzmodedir.txt(預設目錄字典),fuzzmodeext.txt(預設字尾字典)。

Q:哇哦~

A:hhh,怎麼啦?還有其他問題嗎?

Q:嘻嘻,Dirmap看來是有點像小車車啦,話說完成這個專案,你參考了多少個輪子呀?

A:有很多很多,大多數都是gayhub上找到的專案,這裡對這些專案貢獻者表示感謝~!

致謝宣告

dirmap在編寫過程中,借鑒了大量的優秀開源專案的樣式與思想,特此說明並表示感謝。

Sqlmap(架構參考)

POC-T(架構參考)

Saucerframe(架構參考)

gwhatweb(併發參考)

dirsearch(遞迴掃描實現參考)

cansina(解析essay-header參考)

weakfilescan(爬蟲動態字典樣式參考)

FileSensor(爬蟲動態字典樣式參考)

BBscan(併發參考)

werdy(純爆破樣式參考)

還有很多開源的小指令碼(字典樣式參考)

還有很多的網際網路文獻資料(debug參考)

贊(0)

分享創造快樂