
- Python滲透測試教程
- Python滲透測試 - 首頁
- 介紹
- 評估方法
- 網路通訊入門
- 套接字及其方法
- Python網路掃描器
- 網路資料包嗅探
- ARP欺騙
- 無線網路滲透測試
- 應用層
- 客戶端驗證
- DoS & DDoS攻擊
- SQL注入Web攻擊
- XSS Web攻擊
- 有用資源
- 快速指南
- 有用資源
- 討論
應用層
Web應用程式和Web伺服器對於我們的線上存在至關重要,針對它們的攻擊佔網際網路上所有攻擊嘗試的70%以上。這些攻擊試圖將可信網站轉換為惡意網站。由於這個原因,Web伺服器和Web應用程式滲透測試發揮著重要的作用。
Web伺服器的足跡收集
為什麼我們需要考慮Web伺服器的安全?這是因為隨著電子商務行業的快速發展,攻擊者的主要目標是Web伺服器。對於Web伺服器滲透測試,我們必須瞭解Web伺服器、其託管軟體和作業系統以及在其上執行的應用程式。收集關於Web伺服器的此類資訊稱為Web伺服器的足跡收集。
在接下來的章節中,我們將討論Web伺服器足跡收集的不同方法。
Web伺服器足跡收集的方法
Web伺服器是專門用於處理請求和提供響應的伺服器軟體或硬體。在進行Web伺服器滲透測試時,這是滲透測試人員需要關注的關鍵領域。
現在讓我們討論一些在Python中實現的方法,這些方法可以用於執行Web伺服器的足跡收集 -
測試HTTP方法的可用性
滲透測試人員的一個非常好的實踐是從列出各種可用的HTTP方法開始。下面是一個Python指令碼,藉助它我們可以連線到目標Web伺服器並列舉可用的HTTP方法 -
首先,我們需要匯入requests庫 -
import requests
匯入requests庫後,建立一個我們將要傳送的HTTP方法陣列。我們將使用一些標準方法,如'GET'、'POST'、'PUT'、'DELETE'、'OPTIONS',以及一個非標準方法'TEST'來檢查Web伺服器如何處理意外輸入。
method_list = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE','TEST']
以下程式碼行是指令碼的主迴圈,它將HTTP資料包傳送到Web伺服器並列印方法和狀態程式碼。
for method in method_list: req = requests.request(method, 'Enter the URL’) print (method, req.status_code, req.reason)
下一行將透過傳送TRACE方法來測試跨站點跟蹤(XST)的可能性。
if method == 'TRACE' and 'TRACE / HTTP/1.1' in req.text: print ('Cross Site Tracing(XST) is possible')
對於特定的Web伺服器執行上述指令碼後,我們將獲得Web伺服器接受的特定方法的200 OK響應。如果Web伺服器明確拒絕該方法,我們將獲得403 Forbidden響應。一旦我們傳送TRACE方法來測試跨站點跟蹤(XST),我們將從Web伺服器獲得405 Not Allowed響應,否則我們將獲得訊息'跨站點跟蹤(XST)是可能的'。
透過檢查HTTP標頭進行足跡收集
HTTP標頭存在於Web伺服器的請求和響應中。它們還承載關於伺服器的非常重要的資訊。這就是為什麼滲透測試人員總是對透過HTTP標頭解析資訊感興趣。以下是一個用於獲取Web伺服器標頭資訊的Python指令碼 -
首先,讓我們匯入requests庫 -
import requests
我們需要向Web伺服器傳送一個GET請求。以下程式碼行透過requests庫發出一個簡單的GET請求。
request = requests.get('enter the URL')
接下來,我們將生成一個關於您需要資訊的標頭列表。
header_list = [ 'Server', 'Date', 'Via', 'X-Powered-By', 'X-Country-Code', ‘Connection’, ‘Content-Length’]
接下來是一個try和except塊。
for header in header_list: try: result = request.header_list[header] print ('%s: %s' % (header, result)) except Exception as err: print ('%s: No Details Found' % header)
對於特定的Web伺服器執行上述指令碼後,我們將獲得標頭列表中提供的標頭資訊。如果某個標頭沒有資訊,則會顯示訊息'未找到詳細資訊'。您還可以從以下連結中瞭解更多關於HTTP_header欄位的資訊 — https://tutorialspoint.tw/http/http_header_fields.htm。
測試不安全的Web伺服器配置
我們可以使用HTTP標頭資訊來測試不安全的Web伺服器配置。在下面的Python指令碼中,我們將使用try/except塊來測試儲存在名為websites.txt的文字檔案中的多個URL的不安全的Web伺服器標頭 -
import requests urls = open("websites.txt", "r") for url in urls: url = url.strip() req = requests.get(url) print (url, 'report:') try: protection_xss = req.headers['X-XSS-Protection'] if protection_xss != '1; mode = block': print ('X-XSS-Protection not set properly, it may be possible:', protection_xss) except: print ('X-XSS-Protection not set, it may be possible') try: options_content_type = req.headers['X-Content-Type-Options'] if options_content_type != 'nosniff': print ('X-Content-Type-Options not set properly:', options_content_type) except: print ('X-Content-Type-Options not set') try: transport_security = req.headers['Strict-Transport-Security'] except: print ('HSTS header not set properly, Man in the middle attacks is possible') try: content_security = req.headers['Content-Security-Policy'] print ('Content-Security-Policy set:', content_security) except: print ('Content-Security-Policy missing')
Web應用程式的足跡收集
在上一節中,我們討論了Web伺服器的足跡收集。類似地,從滲透測試的角度來看,Web應用程式的足跡收集也很重要。
在接下來的章節中,我們將瞭解Web應用程式足跡收集的不同方法。
Web應用程式足跡收集的方法
Web應用程式是一個客戶端-伺服器程式,由客戶端在Web伺服器上執行。在進行Web應用程式滲透測試時,這是滲透測試人員需要關注的另一個關鍵領域。
現在讓我們討論在Python中實現的不同方法,這些方法可用於Web應用程式的足跡收集 -
使用BeautifulSoup解析器收集資訊
假設我們想要從網頁中收集所有超連結;我們可以使用一個名為BeautifulSoup的解析器。該解析器是一個Python庫,用於從HTML和XML檔案中提取資料。它可以與urlib一起使用,因為它需要一個輸入(文件或URL)來建立soup物件,並且它本身無法獲取網頁。
首先,讓我們匯入必要的包。我們將匯入urlib和BeautifulSoup。請記住,在匯入BeautifulSoup之前,我們需要安裝它。
import urllib from bs4 import BeautifulSoup
下面給出的Python指令碼將收集網頁的標題和超連結 -
現在,我們需要一個變數來儲存網站的URL。這裡,我們將使用一個名為'url'的變數。我們還將使用page.read()函式,該函式可以儲存網頁並將網頁分配給變數html_page。
url = raw_input("Enter the URL ") page = urllib.urlopen(url) html_page = page.read()
html_page將作為輸入分配給建立soup物件。
soup_object = BeautifulSoup(html_page)
以下兩行將分別列印帶標籤和不帶標籤的標題名稱。
print soup_object.title print soup_object.title.text
下面顯示的程式碼行將儲存所有超連結。
for link in soup_object.find_all('a'): print(link.get('href'))
橫幅抓取
橫幅就像一條包含伺服器資訊的訊息,而橫幅抓取是獲取橫幅本身提供的資訊的過程。現在,我們需要知道這個橫幅是如何生成的。它是透過傳送的資料包的頭部生成的。當客戶端嘗試連線到埠時,伺服器會做出響應,因為頭部包含伺服器的資訊。
以下Python指令碼使用套接字程式設計來幫助抓取橫幅 -
import socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800)) targethost = str(raw_input("Enter the host name: ")) targetport = int(raw_input("Enter Port: ")) s.connect((targethost,targetport)) def garb(s:) try: s.send('GET HTTP/1.1 \r\n') ret = sock.recv(1024) print ('[+]' + str(ret)) return except Exception as error: print ('[-]' Not information grabbed:' + str(error)) return
執行上述指令碼後,我們將獲得與上一節中Web伺服器HTTP標頭足跡收集的Python指令碼獲得的標頭資訊類似的資訊。