滲透測試工具方法基礎程式碼審計篇

網站安全發表於2019-09-25

這幾天整理了下網站滲透測試中基礎部分的第三節,我們SINE安全滲透工程師對程式碼安全審計,手工滲透測試檢查程式碼的危險漏洞方法,找出安全問題重點,配合工具掃描來達到測試漏洞的目的,本測試重點僅限於客戶授權才能操作,切記忽非法嘗試入侵!以下方法只是提供網站安全檢測的具體參考意見。

滲透測試工具方法基礎程式碼審計篇

1.5. 程式碼審計

1.5.1. 簡介

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

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
  • 看賬戶體系
  • 管理員賬戶的密碼
  • 加密方式
  • 洩漏資料後能不能bao 密碼
  • 重置漏洞
  • 修改密碼漏洞
  • 修改其他人密碼
  • 普通使用者的帳號
  • 能否拿到普通使用者許可權
  • 普通使用者帳號能否盜號
  • 重點找沒有帳號的情況下可以訪問的頁面
  • 是不是OAuth
  • 攻擊
  • SQLi
  • 看全域性過濾能否bypass
  • 看是否有直接執行sql的地方
  • 看是用的什麼驅動,mysql/mysqli/pdo
  • 如果使用PDO,看是否是直接執行的地方
  • XSS
  • 全域性bypass
  • 直接echo
  • 看檢視是怎麼載入的
  • FILE
  • 上傳下載覆蓋刪除
  • 包含
  • LFI
  • RFI
  • 全域性找include, require
  • 正常上傳
  • 看上傳是如何確定能否上傳檔案的
  • RCE
  • call_user_func
  • eval
  • assert
  • preg_replace /e
  • XXE
  • CSRF
  • SSRF
  • 反序列化
  • 變數覆蓋
  • extract
  • parse_str
  • array_map
  • LDAP
  • XPath
  • Cookie偽造
  • 過濾
  • 找WAF
  • 看waf怎麼過濾的,相應的如何繞過
  • 點選新增圖片描述(最多60個字)

滲透測試工具方法基礎程式碼審計篇

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-Protection
  • X-Frame-Options
  • 機制檢測
  • CSRF token
  • HSTS

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
  • <>alert(1)</>
  • 字元編碼
  • URL編碼
  • 十六進位制編碼
  • Unicode解析
  • HTML
  • JSFuck
  • 其他編碼格式
  • 字元干擾
  • 註釋
  • 空字元
  • NULL (x00)
  • 空格
  • 回車 (x0d)
  • 換行 (x0a)
  • 垂直製表 (x0b)
  • 水平製表 (x09)
  • 換頁 (x0c)
  • 特殊符號
  • 註釋符
  • 引號(反引號、單引號、雙引號)
  • 利用服務本身特點
  • 替換可疑關鍵字為空
  • selselectect => select
  • 少見特性未在規則列表中

2.1. 域名資訊

滲透測試工具方法基礎程式碼審計篇

2.1.1. Whois

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

2.1.2. 搜尋引擎搜尋

搜尋引擎通常會記錄域名資訊,可以透過 site:域名的語法來查詢。

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.xxx.net -- '-i origin AS111111' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq

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

2.1.5. 域名相關性

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

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

2.1.6. 網站資訊利用

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

網站本身的互動通常不囿於單個域名,會和其他子域互動。對於這種情況,可以透過爬取網站,收集站點中的其他子域資訊。這些資訊通常出現在Java檔案、資原始檔連結等位置。

網站的安全策略如跨域策略、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 等。

2.1.11.2. 域名查詢

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

2.1.11.3. 歷史記錄查詢

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

2.1.12. 子域掃描

在內網等不易用到以上技巧的環境,或者想監測新域名上線時,可以透過批次嘗試的方式,找到有效的域名,以上等內容基礎全面性比較覆蓋網站安全方便的滲透測試方法,如果對此有需求可以聯絡專業的網站安全公司來處理解決,防止被入侵被攻擊之類的安全問題。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542418/viewspace-2658151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章