快放假了,比較閑,寫(xiě)了個(gè)svn信息泄漏的探測(cè)工具,嚴(yán)格意義上說(shuō)和wwwscan功能差不多,判斷是否存在/.svn/等目錄,貼上代碼:
#coding:utf-8 import sys import httplib2 if len(sys.argv)<2: print 'Usag:'+"svnscan.py"+" host" sys.exit() #判斷輸入url是否是http開(kāi)頭 if sys.argv[1].startswith('http://'): host=sys.argv[1] else: host="http://"+sys.argv[1] #訪問(wèn)一個(gè)不存在的目錄,將返回的status和content-length做為特征 status='' contentLen='' http=httplib2.Http() dirconurl=host+'/nodirinthiswebanx4dm1n/' dirresponse=http.request(dirconurl,'GET') status=dirresponse[0].status contentLen=dirresponse[0].get('content-length') #字典中保存svn的常見(jiàn)目錄,逐個(gè)訪問(wèn)和特征status、content-length進(jìn)行比對(duì) f=open(r'e:\svnpath.txt','r') pathlist=f.readlines() def svnscan(subpath): for svnpath in pathlist: svnurl=host+svnpath.strip('\r\n') response=http.request(svnurl,'GET') if response[0].status!=status and response[0].get('content-length')!=contentLen: print "vuln:"+svnurl if __name__=='__main__': svnscan(host) f.close() |
svnpath.txt文件中保存的常見(jiàn)的svn版本控制的目錄路徑等,借鑒了某大嬸的思路,根據(jù)返回的狀態(tài)碼、content-length跟一個(gè)不存在的目錄返回的狀態(tài)碼、content-length進(jìn)行比對(duì),主要目的是確保判斷的準(zhǔn)確性,因?yàn)橛行┱军c(diǎn)可能會(huì)有404提示頁(yè)等等。
目前只能想到的是存在svn目錄,且權(quán)限設(shè)置不嚴(yán)格的,所以這個(gè)程序應(yīng)該是不能準(zhǔn)確判斷是否存在漏洞,只能探測(cè)是否存在svn的目錄。
不知道還有其它的辦法來(lái)確認(rèn)一個(gè)站點(diǎn)是否存在svn目錄?目錄瀏覽返回的狀態(tài)應(yīng)該也是200?還是有另外的狀態(tài)碼?
English » | | | | | | | | |
Text-to-speech function is limited to 100 characters