《Kali滲透基礎》15. WEB 滲透

2023-08-29 18:04:49

@


本系列側重方法論,各工具只是實現目標的載體。
命令與工具只做簡單介紹,其使用另見《安全工具錄》。

本文以 kali-linux-2023.2-vmware-amd64 為例。

1:WEB 技術

靜態 WEB

  • 無互動

動態 WEB

  • 應用程式
  • 資料庫
  • 每人看到的內容不同
  • 根據使用者輸入返回不同結果

1.1:WEB 攻擊面

  • Network
  • OS
  • Web Server
  • App Server
  • web Application
  • Database
  • Browser

1.2:HTTP 協定基礎

明文傳輸

  • 無內建的機密性安全機制
  • 嗅探或代理截斷可檢視全部明文資訊
  • https 只能提高傳輸層安全

無狀態

  • 每一次使用者端和伺服器端的通訊都是獨立的過程
  • WEB應用需要跟蹤使用者端對談(多步通訊)
  • 若不使用 Cookie 技術,使用者端每次請求都要重新身份驗證
  • Session 用於跟蹤使用者行為軌跡
  • Session ID 本質上是 Cookie
  • Session 與 Cookie 提高使用者體驗,但增加了攻擊向量

重要的 Header

  • Set-Cookie
    伺服器發給使用者端的資訊(有被竊取的風險)
  • Content-Length
    響應 body 部分的位元組長度
  • Location
    重定向到另一個頁面(可識別身份認證後允許存取的頁面)
  • Cookie
    使用者端發回給伺服器證明使用者狀態的資訊
  • Referrer
    發起請求之前使用者位於的頁面(基於此頭的安全限制容易被繞過)

狀態碼

  • 伺服器端響應的狀態碼錶示響應的結果型別(5 大類,數十個具體響應碼)
  • 1xx:伺服器響應的資訊,通常表示伺服器還有後續處理,很少出現
  • 2xx:使用者端請求被伺服器成功接受並處理後返回的響應結果
  • 3xx:重定向,通常在身份認證成功後重定向到一個安全頁面
  • 4xx:表示使用者端請求錯誤
    • 401:需要身份驗證
    • 403:拒絕存取
    • 404:目標未發現
  • 5xx:伺服器內部錯誤

1.3:AJAX

AJAX(Asynchronous JavaScript and XML),用於在 Web 頁面中進行非同步資料交換。它允許在不重新整理整個頁面的情況下與伺服器進行資料互動,更新部分頁面內容。

  • 是一組技術的組合,而非一種新的程式語言
  • 通過使用者端指令碼動態更新頁面部分內容,而非整個頁面
  • 降低頻寬使用,提高速度
  • 後臺非同步存取

現在 Web 開發傾向使用更先進的技術,如 SPA(單頁面應用)框架(React、Vue 和 Angular)。

AJAX 的安全問題

  • 多種技術混合,增加了攻擊面,每個引數都可能形成獨立的攻擊過程
  • AJAX 引擎是個全功能的指令碼直譯器,存取惡意站點後果嚴重,雖然瀏覽器有沙箱和 SOP,但可被繞過
  • 暴露應用程式邏輯

AJAX 對滲透測試的挑戰

  • 非同步請求數量多且隱蔽
  • 觸發 AJAX 請求的條件無規律
  • 手動和截斷代理爬網可能產生大量遺漏

1.4:WEB Service

WEB Service,這裡指各種 API,面向服務的架構(service oriented architecture),便於不同系統整合共用資料和功能。

  • 適合不想暴露資料模型和程式邏輯而存取資料的場景
  • 無頁面

兩種型別的 WEB Service

  • SOAP(Simple Object Access Protocol)
    • 傳統的 Web service 開發方法,xml 是唯一的資料交換格式
    • 要求安全性的應用更多采用此型別
  • RESTful(Representational State Transfer architecture)
    • 目前更多采用的輕量 web service
    • JSON 是首選資料交換格式

WEB Service 安全考慮

  • 使用 APl key 或 session token 實現身份認證
  • 身份認證由伺服器完成,而非使用者端
  • API key、使用者名稱、Session token 永遠不要通過 URL 傳送
  • RESTful 預設不提供任何安全機制,需要使用 SSL/TLS 保護傳輸資料安全
  • SOAP 提供強於 HTTPS 的 wS-security 機制
  • RESTful 應只允許身份認證使用者使用 PUT、DELETE 方法
  • 使用隨機 token 防止 CSRF 攻擊
  • 對使用者提交引數進行過濾,建議佈署基於嚴格白名單的方法
  • 報錯資訊消毒

2:掃描工具

2.1:HTTrack

HTTrack(HTTrack Website Copier)用於將整個網站以及其內容下載到本地,以便在離線情況下瀏覽。

  • 某些情況下可以減少與目標系統的互動

可以直接使用命令 httrack 進行互動式操作。

2.2:Nikto

Nikto,Perl 語言開發的開源 web 安全掃描器。

  • 可互動
  • 掃描伺服器軟體版本
  • 搜尋存在安全隱患的檔案
  • 伺服器設定漏洞
  • WEB Application 層面的安全隱患
  • 避免 404 誤判(很多伺服器不遵守 RFC 標準,對於不存在的物件返回200響應碼)

部分命令:

檢視外掛
nikto -list-plugins

掃描網站
nikto -host <目標>

掃描主機埠
nikto -host <目標> -port <埠> [-ssl]

配合 nmap 使用
nmap -p <埠> <target> -oG - | nikto -host -

Nikto 支援互動。掃描過程中按相應按鍵可以顯示不同的資訊。

例如,按【v】可顯示掃描的詳細資訊。

2.3:Skipfish

Skipfish 是由谷歌建立的 Web 安全掃描程式。

  • 遞迴爬網
  • 基於字典的探針
  • 純 C 程式碼,高度優化的 HTTP 處理
  • 誤報較低

部分命令:

掃描網站
skipfish -o <專案名> <url>

掃描指定網站目錄
skipfish -o <專案名> -I <子目錄> <url>

skipfish -o test -I /dvwa/ http://192.168.8.104/dvwa/

2.4:Arachni

Arachni 是開源的 Web 安全測試工具。

  • 可在終端執行命令掃描
  • 可在終端開啟圖形化掃描(BS 架構)
  • 支援分散式掃描

Windows 端執行 Arachni:

kali 並沒有自帶 Arachni,可以到 github 下載。Arachni 支援 Windows。

官網:https://ecsypno.com/pages/arachni-web-application-security-scanner-framework
專案&下載:https://github.com/Arachni/arachni

根據官網資訊,Arachni 將被 Codename SCNR 取代。
「The Arachni Web Application Security Scanner Framework is passing its torch to Codename SCNR, so please be sure to try it and plan your migration soon.」

參考文章:arachni的安裝和使用

2.5:OWASP-ZAP

OWASP ZAP(OWASP Zed Attack Proxy),免費開源跨平臺的 web application 整合滲透測試和漏洞工具。

與 BurpSuite 相似,但功能與排版較複雜。

標準掃描工作流程:

  1. 設定代理
  2. 手動爬網
  3. 自動爬網
  4. 主動掃描

官網:https://www.zaproxy.org

參考文章:
網路安全工具篇之OWASP_ZAP
Web安全—Web漏掃工具OWASP-ZAP安裝與使用

2.6:BurpSuite

BurpSuite,統一的整合工具,可以發現並利用現代 Web 安全漏洞,Web 安全工具中的瑞士軍刀。

  • 所有模組共用能處理並顯示 HTTP 訊息的可延伸框架,模組之間無縫交換資訊。
  • 代理截斷。

官網:https://portswigger.net

參考文章:
BurpSuite安裝及常用功能介紹
BurpSuite全套使用教學(超實用超詳細介紹)

2.7:AWVS

AWVS(Acunetix Web Vulnerability Scanner),用於檢測和掃描 Web 應用程式中潛在的漏洞和安全風險。

  • 自動化掃描
  • 漏洞報告
  • 掃描策略
  • 驗證和確認

官網:https://www.acunetix.com

參考文章:
AWVS安裝與使用(最新版2022.12.27更新)

2.8:AppScan

AppScan(Watchfire AppScan),用於檢測和修復 Web 應用程式中的安全漏洞和風險。

  • 自動化掃描
  • 第一個掃描過程發現新的 URL 地址,自動開始下一個掃描過程
  • 漏洞報告
  • 客製化掃描策略

官網:https://www.hcl-software.com/appscan

參考文章:
漏掃工具Appscan使用簡介

3:其他工具

3.1:SQLmap

SQLmap(SQL Injection and Database Takeover Tool),開源的自動化 SQL 注入工具,用於檢測和利用 SQL 注入漏洞。

  • 資料榨取
  • 檔案系統存取
  • 作業系統命令執行
  • 引擎強大、特性豐富
  • 支援多種資料庫注入

五種漏洞檢測技術:

  • 基於布林的盲注檢測
  • 基於時間的盲注檢測
  • 基於聯合查詢的檢測
  • 基於堆疊查詢的檢測
  • 基於錯誤回顯的檢測

參考文章:
sqlmap使用教學大全命令大全(圖文)
【工具使用】SqlMap

3.2:XSSer

XSSer,用於測試和利用跨站指令碼(XSS)漏洞的工具。

  • 自動化檢測
  • 多種攻擊向量(反射型、儲存型、DOM 型)
  • Payload 生成
  • 漏洞利用

參考文章:
XSS滲透與防禦——(三)XSSER語法

3.3:BeEF

BeEF(Browser Exploitation Framework),用於探測、利用 Web 瀏覽器中的漏洞和弱點。

  • 利用 XSS 漏洞進行攻擊
  • Ruby 語言編寫

官網:https://beefproject.com

參考文章:
XSS滲透測試工具beef如何安裝使用?
BEEF的簡介與使用

3.4:Weevely

Weevely,基於 python 編寫的 webshell 管理利用工具。

  • 跨平臺
  • 多個模組擴充套件
  • 隱蔽性不錯
  • 引數隨機生成並加密
  • 只支援 PHP shell

參考文章:
weevely工具使用

3.5:OpenSSL

OpenSSL,用於實現 SSL(安全通訊協定)和 TLS(傳輸層安全)協定,以及進行加解密、數位憑證管理和其他加密相關的操作。

  • 加密和解密
  • 數位憑證管理
  • SSL/TLS 協定支援
  • 雜湊和摘要演演算法
  • 公鑰和私鑰操作
  • 密碼學工具

範例:

識別目標伺服器支援的 cipher suite

openssl s_client -connect www.baidu.com:443

參考文章:
openssl安裝與使用

3.6:SSLscan

SSLscan,用於評估和測試 SSL/TLS 設定,自動識別設定錯誤、過期協定、過時 cipher suite 等。

範例:

識別目標伺服器支援的 cipher suite

sslscan --tlsall www.taobao.com

參考文章:
sslscan工具在密評中的使用

3.7:SSLyze

SSLyze ,用於分析和評估伺服器端的 SSL/TLS 設定和安全性。

  • Python 語言編寫
  • 檢查 SSL / TLS 過時版本
  • 檢查存在弱點的 cipher suite
  • 檢查是否支援對談恢復

官方檔案:
https://nabla-c0d3.github.io/sslyze/documentation/index.html

3.8:SSLsplit

SSLsplit,用於中間人攻擊(Man-in-the-Middle,MitM)和分析 SSL/TLS 通訊。

  • 透明 SSL/TLS 中間人攻擊工具
  • 對使用者端偽裝成伺服器,對伺服器偽裝成普通使用者端
  • 偽裝伺服器需要偽造證書
  • 支援 SSL/TLS 加密的 SMTP、POP3、FTP 等通訊中間人攻擊

官網:https://www.roe.ch/SSLsplit

3.9:MitMproxy

MitMproxy(Man-in-the-Middle Proxy),開源的中間人代理工具,用於擷取、檢查、修改和記錄網路通訊流量。

參考文章:
Kali Linux 基於HTTPS的中間人攻擊

3.10:IPtables

IPtables,是一個 Linux 上的工具,它是 Linux 核心提供的防火牆功能的使用者空間介面,用於保護計算機。可用於設定、管理和控制網路封包的過濾和轉發規則。

參考文章:
iptables基礎知識詳解

4:WEB 攻擊

技術型漏洞的本質

  • 資料與指令的混淆
  • 對使用者輸入資訊過濾不嚴,判斷失誤

漏洞挖掘原則

  • 所有變數
  • 所有 http 頭
  • 逐個變數測試

4.1:漏洞簡述

這一部分與 WEB 安全相關。詳情參見《WEB安全基礎》。

預設設定漏洞

  • 中介軟體、Windows、Linux 預設設定造成的漏洞

身份認證漏洞

  • 弱口令
  • Session / Cookie

命令執行漏洞

API 介面漏洞

越權漏洞

目錄遍歷漏洞(Directory traversal)

檔案包含漏洞(File include)

  • LFI(Local File Inclusion),本地檔案包含
  • RFI(Remote File Inclusion),遠端檔案包含

檔案上傳漏洞

SQL 注入

XSS 漏洞(Cross-Site Scripting)

  • 通過 web 站點漏洞,向用戶端交付惡意程式碼,實現對使用者端的攻擊
  • 根源:
    • 伺服器對使用者提交資料過濾不嚴
    • 提交給伺服器的惡意指令碼被直接返回給其他使用者端執行
    • 指令碼在使用者端執行惡意操作
  • 型別:
    • 反射型(非持久)
    • DOM 型
    • 儲存型(持久型)

CSRF 漏洞(Cross-Site Request Forgery)

  • 可以認為是邏輯漏洞。
  • 在使用者已登入的情況下,攻擊者誘使使用者存取連結,從而利用其身份向目標網站傳送惡意請求。
  • 漏洞利用條件:
    • 被害使用者已經完成身份認證
    • 新請求的提交不需要重新身份認證或確認
    • 誘使使用者觸發攻擊(社工)

從信任的角度區分 XSS 與 CSRF:

  • XSS:利用使用者對站點的信任
  • CSRF:利用站點對已經身份認證使用者的信任

4.2:SSL/TLS 攻擊

SSL(Secure Socket Layer)和 TLS(Transport Layer Security)用於在網路通訊中提供加密和資料完整性。

SSL/TLS 被用於很多場景的傳輸通道加密。

4.2.1:HTTPS 攻擊

HTTPS 攻擊方法:

  • 降級攻擊
    攻擊者迫使本應使用安全的通訊方式(如 HTTPS),轉而使用不安全的通訊方式(如 HTTP)
  • 解密攻擊(證書偽造)
  • 漏洞(協定漏洞、實現方法的漏洞、設定不嚴格)

TLS/SSL、HTTPS、HTTP over SSL 通俗上表示同意含義。

工具使用:

除了 OpenSSL、SSLscan、SSLyze 幾個工具,Nmap 也有相應指令碼用來攻擊。

nmap --script=ssl-enum-ciphers.nse www.baidu.com

4.2.2:中間人攻擊

中間人攻擊(Man-in-the-Middle Attack,MitM),攻擊者在通訊的兩端之間插入自己的惡意節點來竊取、篡改或監聽傳輸的資料。

中間人攻擊的前提(滿足其中一個即可):

  • 使用者端已經信任偽造證書
  • 攻擊者控制了證書頒發機構
  • 使用者端程式禁止了顯示證書錯誤告警資訊
  • 攻擊者已經控制使用者端,並強制其信任偽造證書

參考文章:
HTTPS攻擊原理與防禦

4.2.3:拒絕服務攻擊

拒絕服務攻擊有很多種,這裡只介紹 SSL/TLS 拒絕服務攻擊。

SSL/TLS 拒絕服務攻擊,主要原理是利用 SSL/TLS 握手過程中的資源消耗來耗盡伺服器的資源,導致伺服器無法響應其他合法使用者的請求。

常見的攻擊方式:

  • SSL/TLS 握手暴力攻擊
    攻擊者通過大量的惡意 SSL/TLS 握手請求消耗伺服器的計算和記憶體資源。

  • SSL/TLS 版本協商攻擊
    攻擊者通過傳送惡意的 SSL/TLS 版本協商請求來混淆伺服器,迫使其進行大量額外的計算和資源分配。

  • SSL/TLS 握手放大攻擊
    攻擊者偽造大量的虛假握手請求,使伺服器產生大量響應資料。

  • SSL/TLS 對談重放攻擊
    攻擊者截獲合法使用者的 SSL/TLS 通訊,然後將通訊內容重新傳送給伺服器。

減輕攻擊影響的措施:

  • 資源限制
    限制單個 IP 地址或對談的握手頻率。
  • 負載均衡和快取
  • 更新協定和設定

參考文章:
SSL_TLS 攻擊原理解析


別後相思人似月,雲間水上到層城。

——《明月夜留別》(唐)李冶