來自FreeBuf.COM,作者:H4ckForJob https://www./sectool/200890.html
前言本人是一名立志安全開發(fā)的大學(xué)生,有一年安全測(cè)試經(jīng)驗(yàn),有時(shí)在刷src的時(shí)候,需要檢查所有target的web業(yè)務(wù)系統(tǒng)是否泄露敏感目錄、文件,工作量十分龐大,于是Dirmap誕生了~
知名的web目錄文件掃描工具有很多,如:御劍1.5、DirBuster、Dirsearch、cansina。 其他開源的各種輪子,更是數(shù)不勝數(shù)。 這次我們不造輪子,我們需要造的是一輛車!open source的那種XD 
需求分析何為一個(gè)優(yōu)秀的web目錄掃描工具?
經(jīng)過大量調(diào)研,總結(jié)一個(gè)優(yōu)秀的web目錄掃描工具至少具備以下功能: 并發(fā)引擎 能使用字典 能純爆破 能爬取頁面動(dòng)態(tài)生成字典 能fuzz掃描 自定義請(qǐng)求 自定義響應(yīng)結(jié)果處理...
功能特點(diǎn)你愛的樣子,我都有,小鴿鴿了解下我吧:
支持n個(gè)target*n個(gè)payload并發(fā) 支持遞歸掃描 支持自定義需要遞歸掃描的狀態(tài)碼 支持(單|多)字典掃描 支持自定義字符集爆破 支持爬蟲動(dòng)態(tài)字典掃描 支持自定義標(biāo)簽fuzz目標(biāo)url 自定義請(qǐng)求User-Agent 自定義請(qǐng)求隨機(jī)延時(shí) 自定義請(qǐng)求超時(shí)時(shí)間 自定義請(qǐng)求代理 自定義正則表達(dá)式匹配假性404頁面 自定義要處理的響應(yīng)狀態(tài)碼 自定義跳過大小為x的頁面 自定義顯示content-type 自定義顯示頁面大小 按域名去重復(fù)保存結(jié)果
掃描效果遞歸掃描

字典模式
爆破模式
爬蟲模式
fuzz模式
Q:這么棒棒呀!那Dirmap該怎么使用呢? A:啊哈,你往下滑。 使用方法環(huán)境準(zhǔn)備git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt
單個(gè)目標(biāo)python3 dirmap.py -iU https:// -lcf
多個(gè)目標(biāo)python3 dirmap.py -iF urls.txt -lcf
Q:哎呀,掃描結(jié)束了,我的結(jié)果呢qwq? A:莫慌自動(dòng)保存的呀。 結(jié)果保存結(jié)果將自動(dòng)保存在項(xiàng)目根目錄下的output文件夾中,每一個(gè)目標(biāo)生成一個(gè)txt,命名格式為目標(biāo)域名.txt。結(jié)果自動(dòng)去重復(fù),不用擔(dān)心產(chǎn)生大量冗余。 Q:矮油,不錯(cuò)呦,但是我還想學(xué)習(xí)下高級(jí)用法呢。 A:好嘞,這就來,屏住呼吸,往下看。 高級(jí)使用自定義dirmap配置,開始探索dirmap高級(jí)功能,暫時(shí)采用加載配置文件的方式進(jìn)行詳細(xì)配置,不支持使用命令行參數(shù)進(jìn)行詳細(xì)配置!
編輯項(xiàng)目根目錄下的dirmap.conf,進(jìn)行配置。 dirmap.conf配置詳解: #遞歸掃描處理配置 [RecursiveScan] #是否開啟遞歸掃描:關(guān)閉:0;開啟:1 conf.recursive_scan = 0 #遇到這些狀態(tài)碼,開啟遞歸掃描。默認(rèn)配置[301,403] conf.recursive_status_code = [301,403] #設(shè)置排除掃描的目錄。默認(rèn)配置空。其他配置:e.g:['/test1','/test2'] #conf.exclude_subdirs = ['/test1','/test2'] conf.exclude_subdirs = ''
#掃描模式處理配置(4個(gè)模式,1次只能選擇1個(gè)) [ScanModeHandler] #字典模式:關(guān)閉:0;單字典:1;多字典:2 conf.dict_mode = 1 #單字典模式的路徑 conf.dict_mode_load_single_dict = 'dict_mode_dict.txt' #多字典模式的路徑,默認(rèn)配置dictmult conf.dict_mode_load_mult_dict = 'dictmult' #爆破模式:關(guān)閉:0;開啟:1 conf.blast_mode = 0 #生成字典最小長(zhǎng)度。默認(rèn)配置3 conf.blast_mode_min = 3 #生成字典最大長(zhǎng)度。默認(rèn)配置3 conf.blast_mode_max = 3 #默認(rèn)字符集:a-z。暫未使用。 conf.blast_mode_az = 'abcdefghijklmnopqrstuvwxyz' #默認(rèn)字符集:0-9。暫未使用。 conf.blast_mode_num = '0123456789' #自定義字符集。默認(rèn)配置'abc'。使用abc構(gòu)造字典 conf.blast_mode_custom_charset = 'abc' #自定義繼續(xù)字符集。默認(rèn)配置空。 conf.blast_mode_resume_charset = '' #爬蟲模式:關(guān)閉:0;開啟:1 conf.crawl_mode = 0 #解析robots.txt文件。暫未實(shí)現(xiàn)。 conf.crawl_mode_parse_robots = 0 #解析html頁面的xpath表達(dá)式 conf.crawl_mode_parse_html = '//*/@href | //*/@src | //form/@action' #是否進(jìn)行動(dòng)態(tài)爬蟲字典生成:關(guān)閉:0;開啟:1 conf.crawl_mode_dynamic_fuzz = 0 #Fuzz模式:關(guān)閉:0;單字典:1;多字典:2 conf.fuzz_mode = 0 #單字典模式的路徑。 conf.fuzz_mode_load_single_dict = 'fuzz_mode_dir.txt' #多字典模式的路徑。默認(rèn)配置:fuzzmult conf.fuzz_mode_load_mult_dict = 'fuzzmult' #設(shè)置fuzz標(biāo)簽。默認(rèn)配置{dir}。使用{dir}標(biāo)簽當(dāng)成字典插入點(diǎn),將http:///{dir}.php替換成http:///字典中的每一行.php。其他配置:e.g:{dir};{ext} #conf.fuzz_mode_label = '{ext}' conf.fuzz_mode_label = '{dir}'
#處理payload配置。暫未實(shí)現(xiàn)。 [PayloadHandler]
#處理請(qǐng)求配置 [RequestHandler] #自定義請(qǐng)求頭。默認(rèn)配置空。其他配置:e.g:test1=test1,test2=test2 #conf.request_headers = 'test1=test1,test2=test2' conf.request_headers = '' #自定義請(qǐng)求User-Agent。默認(rèn)配置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' #自定義請(qǐng)求cookie。默認(rèn)配置空,不設(shè)置cookie。其他配置e.g:cookie1=cookie1; cookie2=cookie2; #conf.request_header_cookie = 'cookie1=cookie1; cookie2=cookie2' conf.request_header_cookie = '' #自定義401認(rèn)證。暫未實(shí)現(xiàn)。因?yàn)樽远x請(qǐng)求頭功能可滿足該需求(懶XD) conf.request_header_401_auth = '' #自定義請(qǐng)求方法。默認(rèn)配置get方法。其他配置:e.g:get;head #conf.request_method = 'head' conf.request_method = 'get' #自定義每個(gè)請(qǐng)求超時(shí)時(shí)間。默認(rèn)配置3秒。 conf.request_timeout = 3 #隨機(jī)延遲(0-x)秒發(fā)送請(qǐng)求。參數(shù)必須是整數(shù)。默認(rèn)配置0秒,無延遲。 conf.request_delay = 0 #自定義單個(gè)目標(biāo),請(qǐng)求協(xié)程線程數(shù)。默認(rèn)配置30線程 conf.request_limit = 30 #自定義最大重試次數(shù)。暫未實(shí)現(xiàn)。 conf.request_max_retries = 1 #設(shè)置持久連接。是否使用session()。暫未實(shí)現(xiàn)。 conf.request_persistent_connect = 0 #302重定向。默認(rèn)False,不重定向。其他配置:e.g:True;False conf.redirection_302 = False #payload后添加后綴。默認(rèn)空,掃描時(shí),不添加后綴。其他配置:e.g:txt;php;asp;jsp #conf.file_extension = 'txt' conf.file_extension = ''
#處理響應(yīng)配置 [ResponseHandler] #設(shè)置要記錄的響應(yīng)狀態(tài)。默認(rèn)配置[200],記錄200狀態(tài)碼。其他配置:e.g:[200,403,301] #conf.response_status_code = [200,403,301] conf.response_status_code = [200] #是否記錄content-type響應(yīng)頭。默認(rèn)配置1記錄 #conf.response_header_content_type = 0 conf.response_header_content_type = 1 #是否記錄頁面大小。默認(rèn)配置1記錄 #conf.response_size = 0 conf.response_size = 1 #自定義匹配404頁面正則 #conf.custom_404_page = 'fake 404' conf.custom_404_page = '' #自定義匹配503頁面正則。暫未實(shí)現(xiàn)。感覺用不著,可能要廢棄。 #conf.custom_503_page = 'page 503' conf.custom_503_page = '' #自定義正則表達(dá)式,匹配頁面內(nèi)容 #conf.custom_response_page = '([0-9]){3}([a-z]){3}test' conf.custom_response_page = '' #跳過顯示頁面大小為x的頁面,若不設(shè)置,請(qǐng)配置成'None',默認(rèn)配置“None”。其他大小配置參考e.g:None;0b;1k;1m #conf.skip_size = '0b' conf.skip_size = 'None'
#代理選項(xiàng) [ProxyHandler] #代理配置。默認(rèn)設(shè)置“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選項(xiàng) [DebugMode] #打印payloads并退出 conf.debug = 0
#update選項(xiàng) [CheckUpdate] #github獲取更新。暫未實(shí)現(xiàn)。 conf.update = 0
Q:我倒,配置文件這么多,終于看完了,可是我還想了解下默認(rèn)的字典,還有怎么添加自己的字典? A:哦呼,這里有默認(rèn)字典文件介紹。還有添加自定義字典,需要將你的字典放入data文件夾,并修改dirmap.conf就可以使用了。 默認(rèn)字典文件字典文件存放在項(xiàng)目根目錄中的data文件夾中:
dictmodedict.txt “字典模式”字典,使用dirsearch默認(rèn)字典; crawlmodesuffix.txt “爬蟲模式”字典,使用FileSensor默認(rèn)字典; fuzzmodedir.txt “fuzz模式”字典,使用DirBuster默認(rèn)字典; fuzzmodeext.txt “fuzz模式”字典,使用常見后綴制作的字典; dictmult該目錄為“字典模式”默認(rèn)多字典文件夾,包含:BAK.min.txt(備份文件小字典),BAK.txt(備份文件大字典),LEAKS.txt(信息泄露文件字典); fuzzmult該目錄為“fuzz模式”默認(rèn)多字典文件夾,包含:fuzzmodedir.txt(默認(rèn)目錄字典),fuzzmodeext.txt(默認(rèn)后綴字典)。
Q:哇哦~ A:hhh,怎么啦?還有其他問題嗎? Q:嘻嘻,Dirmap看來是有點(diǎn)像小車車?yán)?,話說完成這個(gè)項(xiàng)目,你參考了多少個(gè)輪子呀? A:有很多很多,大多數(shù)都是gayhub上找到的項(xiàng)目,這里對(duì)這些項(xiàng)目貢獻(xiàn)者表示感謝~! 致謝聲明dirmap在編寫過程中,借鑒了大量的優(yōu)秀開源項(xiàng)目的模式與思想,特此說明并表示感謝。
Sqlmap(架構(gòu)參考) POC-T(架構(gòu)參考) Saucerframe(架構(gòu)參考) gwhatweb(并發(fā)參考) dirsearch(遞歸掃描實(shí)現(xiàn)參考) cansina(解析header參考) weakfilescan(爬蟲動(dòng)態(tài)字典模式參考) FileSensor(爬蟲動(dòng)態(tài)字典模式參考) BBscan(并發(fā)參考) werdy(純爆破模式參考) 還有很多開源的小腳本(字典模式參考) 還有很多的互聯(lián)網(wǎng)文獻(xiàn)資料(debug參考)
|