Dirmap:一款高级Web目录文件扫描工具
前言
本人是一名立志安全開發的大學生,有一年安全測試經驗,有時在刷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 -lcfQ:哎呀,掃描結束了,我的結果呢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_headers = "test1=test1,test2=test2" conf.request_headers = "" #自定義請求User-Agent。默認配置chrome的ua。 conf.request_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_header_cookie = "cookie1=cookie1; cookie2=cookie2" conf.request_header_cookie = "" #自定義401認證。暫未實現。因為自定義請求頭功能可滿足該需求(懶XD) conf.request_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_header_content_type = 0 conf.response_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 = 0Q:我倒,配置文件這么多,終于看完了,可是我還想了解下默認的字典,還有怎么添加自己的字典?中國菜刀
A:哦呼,這里有默認字典文件介紹。還有添加自定義字典,需要將你的字典放入data文件夾,并修改dirmap.conf就可以使用了。
默認字典文件
字典文件存放在項目根目錄中的data文件夾中:
?
dict_mode_dict.txt “字典模式”字典,使用dirsearch默認字典;
?
crawl_mode_suffix.txt “爬蟲模式”字典,使用FileSensor默認字典;
?
fuzz_mode_dir.txt “fuzz模式”字典,使用DirBuster默認字典;
?
fuzz_mode_ext.txt “fuzz模式”字典,使用常見后綴制作的字典;
?
dictmult該目錄為“字典模式”默認多字典文件夾,包含:BAK.min.txt(備份文件小字典),BAK.txt(備份文件大字典),LEAKS.txt(信息泄露文件字典);
?
fuzzmult該目錄為“fuzz模式”默認多字典文件夾,包含:fuzz_mode_dir.txt(默認目錄字典),fuzz_mode_ext.txt(默認后綴字典)。
Q:哇哦~
A:hhh,怎么啦?還有其他問題嗎?
Q:嘻嘻,Dirmap看來是有點像小車車啦,話說完成這個項目,你參考了多少個輪子呀?
A:有很多很多,大多數都是gayhub上找到的項目,這里對這些項目貢獻者表示感謝~!
致謝聲明
dirmap在編寫過程中,借鑒了大量的優秀開源項目的模式與思想,特此說明并表示感謝。
?
Sqlmap(架構參考)
?
POC-T(架構參考)
?
Saucerframe(架構參考)
?
gwhatweb(并發參考)
?
dirsearch(遞歸掃描實現參考)
?
cansina(解析header參考)
?
weakfilescan(爬蟲動態字典模式參考)
?
FileSensor(爬蟲動態字典模式參考)
?
BBscan(并發參考)
?
werdy(純爆破模式參考)
?
還有很多開源的小腳本(字典模式參考)
?
還有很多的互聯網文獻資料(debug參考)
總結
以上是生活随笔為你收集整理的Dirmap:一款高级Web目录文件扫描工具的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Monkey框架(测试方法篇) - mo
- 下一篇: 让win7笔记本变成热点
