WEB安全滲透測試基礎知識(三)

1.5. 代碼審計

1.5.1. 簡介

代碼審計是找到應用缺陷的過程。其通常有白盒、黑盒、灰盒等方式。白盒指通過對源代碼的分析找到應用缺陷,黑盒通常不涉及到源代碼,多使用模糊測試的方式,而灰盒則是黑白結合的方式。

WEB安全滲透測試基礎知識(三)

1.5.2. 常用概念

1.5.2.1. 輸入

應用的輸入,可以是請求的參數(GET、POST等)、上傳的文件、網絡、數據庫等用戶可控或者間接可控的地方。

1.5.2.2. 處理函數

處理數據的函數,可能是過濾,也可能是編解碼。

1.5.2.3. 危險函數

又常叫做Sink Call、漏洞點,是可能觸發危險行為如文件操作、命令執行、數據庫操作等行為的函數。

1.5.3. 自動化審計

一般認為一個漏洞的觸發過程是從輸入經過過濾到危險函數的過程,而審計就是尋找這個鏈條的過程。

1.5.3.1. 危險函數匹配

白盒審計最常見的方式是通過搜尋危險函數與危險參數定位漏洞,比較有代表性的工具是Seay開發的審計工具。這種方法誤報率相當高,這是因為這種方法沒有對程序的流程進行深入分析,另一方面,這種方式通常是孤立地分析每一個文件,忽略了文件之間複雜的調用關係。

具體的說,這種方式在一些環境下能做到幾乎無漏報,只要審計者有耐心,可以發現大部分的漏洞,但是在高度框架化的代碼中,能找到的漏洞相對有限。

1.5.3.2. 控制流分析

在後來的系統中,考慮到一定程度引入AST作為分析的依據,在一定程度上減少了誤報,但是仍存在很多缺陷。

而後,Dahse J等人設計了RIPS,該工具進行數據流與控制流分析,結合過程內與過程間的分析得到審計結果,相對危險函數匹配的方式來說誤報率少了很多,但是同樣的也增加了開銷。

1.5.3.3. 灰盒分析

國內安全研究員fate0提出了基於運行時的分析方式,解決了控制流分析實現複雜、計算路徑開銷大的問題。

1.5.4. 手工審計方式

  • 拿到代碼,確定版本,確定能否正常運行找歷史漏洞找應用該系統的實例
  • 簡單審計,運行審計工具看是否有漏洞
  • 大概看懂整個程序是如何運行的文件如何加載類庫依賴有沒有加載waf
  • 數據庫如何連接mysql/mysqli/pdo有沒有用預編譯
  • 視圖如何形成 能不能xss能不能模版注入
  • SESSION如何處理文件數據庫內存
  • Cache如何處理文件cache可能寫shell數據庫cache可能注入memcache
  • 看賬戶體系
  • 管理員賬戶的密碼加密方式洩漏數據後能不能爆破密碼重置漏洞
  • 修改密碼漏洞修改其他人密碼
  • 普通用戶的帳號能否拿到普通用戶權限普通用戶帳號能否盜號重點找沒有帳號的情況下可以訪問的頁面是不是OAuth
  • 攻擊SQLi看全局過濾能否bypass看是否有直接執行sql的地方
  • 看是用的什麼驅動,mysql/mysqli/pdo如果使用PDO,看是否是直接執行的地方
  • XSS全局bypass直接echo看視圖是怎麼加載的
  • FILE上傳下載覆蓋刪除
  • 包含LFIRFI全局找include, require
  • 正常上傳看上傳是如何確定能否上傳文件的
  • RCEcall_user_funcevalassertpreg_replace /eXXECSRFSSRF反序列化
  • 變量覆蓋extractparse_strarray_mapLDAPXPathCookie偽造
  • 過濾
  • 找WAF看waf怎麼過濾的,相應的如何繞過

1.6. WAF

1.6.1. 簡介

1.6.1.1. 概念

WAF(Web Application Firewall,Web應用防火牆)是通過執行一系列針對HTTP/HTTPS的安全策略來專門為Web應用提供加固的產品。 在市場上,有各種價格各種功能和選項的WAF。在一定程度上,WAF能為Web應用提供安全性,但是不能保證完全的安全。

1.6.1.2. 常見功能

  • 檢測異常協議,拒絕不符合HTTP標準的請求
  • 對狀態管理進行會話保護
  • Cookies保護
  • 信息洩露保護
  • DDoS防護
  • 禁止某些IP訪問
  • 可疑IP檢查
  • 安全HTTP頭管理X-XSS-ProtectionX-Frame-Options
  • 機制檢測CSRF tokenHSTS

1.6.1.3. 佈置位置

按佈置位置,WAF可以分為雲WAF、主機防護軟件和硬件防護。雲WAF佈置在雲上,請求先經過雲服務器而後流向主機。主機防護軟件需要主機預先安裝對應軟件,如mod_security、ngx-lua-waf等,對主機進行防護。硬件防護指流量流向主機時,先經過設備的清洗和攔截。

1.6.2. 防護方式

WAF常用的方法有關鍵字檢測、正則表達式檢測、語法分析、行為分析、聲譽分析、機器學習等。

基於正則的保護是最常見的保護方式。開發者用一些設定好的正則規則來檢測載荷是否存在攻擊性。基於正則的防護較為簡單,因此存在一些缺點。例如只能應用於單次請求,而且正則很難應用到一些複雜的協議上。

基於語法的分析相對正則來說更快而且更準確,這種分析會把載荷按照語法解析成的符號組,然後在符號組中尋找危險的關鍵字。這種方式對一些載荷的變式有較好的效果,但是同樣的,對解析器要求較高。

基於行為的分析著眼的範圍更廣一些,例如攻擊者的端口掃描行為、目錄爆破、參數測試或者一些其他自動化或者攻擊的模式都會被納入考慮之中。

基於聲譽的分析可以比較好的過濾掉一些可疑的來源,例如常用的VPN、匿名代理、Tor節點、殭屍網絡節點的IP等。

基於機器學習的WAF涉及到的範圍非常廣,效果也因具體實現和場景而較為多樣化。

除了按具體的方法分,也可以根據白名單和黑名單的使用來分類。基於白名單的WAF適用於穩定的Web應用,而基於黑名單則適合處理已知問題。

1.6.3. 掃描器防禦

  • 基於User-Agent識別
  • 基於攻擊載荷識別
  • 驗證碼

1.6.4. WAF指紋

  • 額外的Cookie
  • 額外的Header
  • 被拒絕請求時的返回內容
  • 被拒絕請求時的返回響應碼
  • IP

1.6.5. 繞過方式

1.6.5.1. 基於架構的繞過

  • 站點在WAF後,但是站點可直連
  • 站點在雲服務器中,對同網段服務器無WAF

1.6.5.2. 基於資源的繞過

  • 使用消耗大的載荷,耗盡WAF的計算資源

1.6.5.3. 基於解析的繞過

  • 字符集解析不同
  • 協議覆蓋不全
  • 協議解析不正確
  • 站點和WAF對https有部分不一致
  • WAF解析與Web服務解析不一致
  • 同一個參數多次出現,取的位置不一樣
  • HTTP Parameter Pollution (HPP)
  • HTTP Parameter Fragmentation (HPF)

1.6.5.4. 基於規則的繞過

  • 等價替換等價函數等價變量關鍵字拆分字符串操作
  • 大小寫變換 select => sEleCt
  • 字符編碼URL編碼十六進制編碼Unicode解析Base64 HTMLJSFuck其他編碼格式
  • 字符干擾註釋
  • 空字符NULL (x00)空格回車 (x0d)換行 (x0a)垂直製表 (x0b)水平製表 (x09)換頁 (x0c)
  • 特殊符號註釋符引號(反引號、單引號、雙引號)
  • 利用服務本身特點
  • 替換可疑關鍵字為空selselectect => select
  • 少見特性未在規則列表中

2.1. 域名信息

2.1.1. Whois

Whois 可以查詢域名是否被註冊,以及註冊域名的詳細信息的數據庫,其中可能會存在一些有用的信息,例如域名所有人、域名註冊商、郵箱等。

2.1.2. 搜索引擎搜索

搜索引擎通常會記錄域名信息,可以通過 site:agesec.com 的語法來查詢。

2.1.3. 第三方查詢

網絡中有相當多的第三方應用提供了子域的查詢功能,下面有一些例子,更多的網站可以在 8.1 工具列表 中查找。

  • DNSDumpster
  • Virustotal
  • CrtSearch
  • threatminer
  • Censys

2.1.4. ASN信息關聯

在網絡中一個自治系統(Autonomous System, AS)是一個有權自主地決定在本系統中應採用何種路由協議的小型單位。這個網絡單位可以是一個簡單的網絡也可以是一個由一個或多個普通的網絡管理員來控制的網絡群體,它是一個單獨的可管理的網絡單元(例如一所大學,一個企業或者一個公司個體)。

一個自治系統有時也被稱為是一個路由選擇域(routing domain)。一個自治系統將會分配一個全局的唯一的16位號碼,這個號碼被稱為自治系統號(ASN)。因此可以通過ASN號來查找可能相關的IP,例如:

whois -h whois.radb.net -- '-i origin AS111111' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq

nmap --script targets-asn --script-args targets-asn.asn=15169

2.1.5. 域名相關性

同一個企業/個人註冊的多個域名通常具有一定的相關性,例如使用了同一個郵箱來註冊、使用了同一個備案、同一個負責人來註冊等,可以使用這種方式來查找關聯的域名。一種操作步驟如下:

  • 查詢域名註冊郵箱
  • 通過域名查詢備案號
  • 通過備案號查詢域名
  • 反查註冊郵箱
  • 反查註冊人
  • 通過註冊人查詢到的域名在查詢郵箱
  • 通過上一步郵箱去查詢域名
  • 查詢以上獲取出的域名的子域名

2.1.6. 網站信息利用

網站中有相當多的信息,網站本身、各項安全策略、設置等都可能暴露出一些信息。

網站本身的交互通常不囿於單個域名,會和其他子域交互。對於這種情況,可以通過爬取網站,收集站點中的其他子域信息。這些信息通常出現在JavaScript文件、資源文件鏈接等位置。

網站的安全策略如跨域策略、CSP規則等通常也包含相關域名的信息。有時候多個域名為了方便會使用同一個SSL/TLS證書,因此有時可通過證書來獲取相關域名信息。

2.1.7. 證書透明度

為了保證HTTPS證書不會被誤發或偽造,CA會將證書記錄到可公開驗證、不可篡改且只能附加內容的日誌中,任何感興趣的相關方都可以查看由授權中心簽發的所有證書。因此可以通過查詢已授權證書的方式來獲得相關域名。

2.1.8. 域傳送漏洞

DNS域傳送(zone transfer)指的是冗餘備份服務器使用來自主服務器的數據刷新自己的域(zone)數據庫。這是為了防止主服務器因意外不可用時影響到整個域名的解析。

一般來說,域傳送操作應該只允許可信的備用DNS服務器發起,但是如果錯誤配置了授權,那麼任意用戶都可以獲得整個DNS服務器的域名信息。這種錯誤授權被稱作是DNS域傳送漏洞。

2.1.9. Passive DNS

Passive DNS被動的從遞歸域名服務器記錄來自不同域名服務器的響應,形成數據庫。利用Passive DNS數據庫可以知道域名曾綁定過哪些IP,IP曾關聯到哪些域名,域名最早/最近出現的時間,為測試提供較大的幫助。Virustotal、passivetotal、CIRCL等網站都提供了Passive DNS數據庫的查詢。

2.1.10. SPF記錄

SPF(Sender Policy Framework)是為了防止垃圾郵件而提出來的一種DNS記錄類型,是一種TXT類型的記錄,用於登記某個域名擁有的用來外發郵件的所有IP地址。通過SPF記錄可以獲取相關的IP信息。

2.1.11. CDN

2.1.11.1. CDN驗證

可通過多地ping的方式確定目標是否使用了CDN,常用的網站有
http://ping.chinaz.com/https://asm.ca.com/en/ping.php 等。

2.1.11.2. 域名查找

使用了CDN的域名的父域或者子域名不一定使用了CDN,可以通過這種方式去查找對應的IP。

2.1.11.3. 歷史記錄查找

CDN可能是在網站上線一段時間後才上線的,可以通過查找域名解析記錄的方式去查找真實IP。

2.1.12. 子域爆破

在內網等不易用到以上技巧的環境,或者想監測新域名上線時,可以通過批量嘗試的方式,找到有效的域名。

本文轉載自 安全時代

WEB安全滲透測試基礎知識(三)


分享到:


相關文章: