備份檔案、git、svn等漏洞批量掃描指令碼
題記
因為前些日子我一直看到檔案洩露的漏洞,什麼.git什麼的,於是一直想自己整一個檢測的批量指令碼,嘗試自己寫了一個,效果卻不太符合心意。今天偶然看到一個推薦git等漏洞利用的工具,我以為是批量掃的工具,後來發現是掃到漏洞後利用漏洞下載原始碼的工具。工具地址:https://github.com/0xHJK/dumpall。於是我覺得還是一勞永逸吧,終於百度大法看到一個大哥的指令碼。
批量掃描網站備份檔案的指令碼
此指令碼思路:把要檢測的網站放到tar.txt裡面,通過在url後拼接敏感檔名字進行訪問,通過響應包判斷漏洞是否存在,存在的話把漏洞路徑儲存在bfvul.txt中。
import requests import re import multiprocessing list= ['wwwroot.rar','wwwroot.zip','新建資料夾.rar','新建資料夾.zip','www.rar','www.zip','web.rar','web.zip'] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'} content_type = ['application/x-rar','application/x-gzip','application/zip','application/octet-stream','application/x-7z-compressed'] def main(i): url1 = i.strip('\n') c = re.findall(r'https?://(?:[-\w.]|(?:%[\da-fA-F]{6}))+',url1) url2 = (',').join(str(x) for x in c) for i in list: try: b = url2 +'/'+ i r = requests.head(url = b ,headers = headers) if r.headers['Content-Type'] in content_type: with open (r'bfvul.txt','a', encoding ='utf-8' ) as f: a = f.write('存在備份檔案'+ ':' + b + '\n') else: print('不存在'+b) except: print('無法連線') if __name__ == '__main__': p = multiprocessing.Pool(50)#執行緒數 with open(r'tar.txt','r',encoding = 'utf-8') as f: a = f.readlines() for i in a: p.apply_async(main,(i,)) p.close() p.join()
經過測試成功跑出來一些網站的備份檔案,次指令碼還是很好用的,如果想新增路徑可在陣列內新增。
批量掃描git、svn等指令碼
經過思考,我嘗試改造一下嘗試跑git、svn這種漏洞,但是我並沒有遇到過svn洩露不太清楚返回包的內容,因此這裡的判斷行為是,響應200後進行下一輪判斷,如果包含git響應內容存到git.txt中,不存在就放到qita.txt中,以後遇到在優化吧,還是挺好用的。
import requests import re import multiprocessing list = ['.git','.svn','.DS_Store','robots.txt'] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'} def main(i): url1 = i.strip('\n') c = re.findall(r'https?://(?:[-\w.]|(?:%[\da-fA-F]{6}))+',url1) url2 = (',').join(str(x) for x in c) for i in list: try: b = url2 +'/'+ i r = requests.get(url = b ,headers = headers) m = r.status_code if m==200: r.encoding = r.apparent_encoding HtmlText = r.text if 'logs' in HtmlText: with open (r'git.txt','a', encoding ='utf-8' ) as f: a = f.write('存在洩露情況'+ ':' + b + '\n') else: with open (r'qita.txt','a', encoding ='utf-8' ) as w: c = w.write('可能存在洩露情況'+ ':' + b + '\n') else: print('不存在'+b) except: print('無法連線') if __name__ == '__main__': p = multiprocessing.Pool(50)#執行緒數 with open(r'tar.txt','r',encoding = 'utf-8') as f: a = f.readlines() for i in a: p.apply_async(main,(i,)) p.close() p.join()
指令碼執行:
執行結果:
Python指令碼踩坑記錄
第一種報錯:IndentationError: expected an indented block
這個錯誤因為if語句後我沒在下一行多搞個tab鍵位,導致上下級關係不明確。
第二種報錯:IndentationError: unindent does not match any outer indentation level
這個錯誤是因為python指令碼對空格和tab鍵不能共存。需要統一。Notepad++顯示出來空格與製表符,改成一樣的。
參考文章
python 多程序批量掃描網站備份檔案:http://blog.csdn.net/qq_39650046/article/details/110429544
IndentationError: unindent does not match any outer indentation level筆記:http://cnblogs.com/kerrycode/p/11183963.html