源代碼掃描
通過檢查程序中不符合安全規則的文件結構、命名規則、函數、堆棧指針等,進而發現程序中可能隱含的安全缺陷。
優缺點:
這種漏洞分析技術需要熟練掌握編程語言,並預先定義出不安全代碼的審查規則,通過表達式匹配的方法檢查源程序代碼。
由於程序運行時是動態變化的,如果不考慮函數調用的參數和調用環境,不對源代碼進行詞法分析和語法分析,就沒有辦法准確地把握程序的語義,因此這種方法不能發現程序動態運行過程中的安全漏洞。
反匯編掃描
反匯編掃描對於不公開源代碼的程序來說往往是最有效的發現安全漏洞的辦法。分析反匯編代碼需要有豐富的經驗,也可以使用輔助工具來幫助簡化這個過程,但不可能有一種完全自動的工具來完成這個過程。
優缺點:
通過反匯編來尋找系統漏洞的好處是,從理論上講,不論多麼復雜的問題總是可以通過反匯編來解決。它的缺點也是顯然的,這種方法費時費力,對人員的技術水平要求很高,同樣不能檢測到程序動態運行過程中產生的安全漏洞。
環境錯誤注入
由程序執行是一個動態過程這個特點,不難看出靜態的代碼掃描是不完備的。
優缺點:
環境錯誤注入是一種比較成熟的軟體測試方法,這種方法在協議安全測試等領域中都已經得到了廣泛的應用。軟體環境錯誤注入分析還依賴於操作系統中已知的安全缺陷,也就是說,對一個軟體進行錯誤注入分析時,要充分考慮到操作系統本身所存在的漏洞,這些操作系統中的安全缺陷可能會影響到軟體本身的安全。
② 滲透測試應該怎麼做呢
01、信息收集
1、域名、IP、埠
域名信息查詢:信息可用於後續滲透
IP信息查詢:確認域名對應IP,確認IP是否真實,確認通信是否正常
埠信息查詢:NMap掃描,確認開放埠
發現:一共開放兩個埠,80為web訪問埠,3389為windows遠程登陸埠,嘿嘿嘿,試一下
發現:是Windows Server 2003系統,OK,到此為止。
2、指紋識別
其實就是網站的信息。比如通過可以訪問的資源,如網站首頁,查看源代碼:
看看是否存在文件遍歷的漏洞(如圖片路徑,再通過…/遍歷文件)
是否使用了存在漏洞的框架(如果沒有現成的就自己挖)
02、漏洞掃描
1、主機掃描
Nessus
經典主機漏掃工具,看看有沒有CVE漏洞:
2、Web掃描
AWVS(Acunetix | Website Security Scanner)掃描器
PS:掃描器可能會對網站構成傷害,小心謹慎使用。
03、滲透測試
1、弱口令漏洞
漏洞描述
目標網站管理入口(或資料庫等組件的外部連接)使用了容易被猜測的簡單字元口令、或者是默認系統賬號口令。
滲透測試
① 如果不存在驗證碼,則直接使用相對應的弱口令字典使用burpsuite 進行爆破
② 如果存在驗證碼,則看驗證碼是否存在繞過、以及看驗證碼是否容易識別
風險評級:高風險
安全建議
① 默認口令以及修改口令都應保證復雜度,比如:大小寫字母與數字或特殊字元的組合,口令長度不小於8位等
② 定期檢查和更換網站管理口令
2、文件下載(目錄瀏覽)漏洞
漏洞描述
一些網站由於業務需求,可能提供文件查看或下載的功能,如果對用戶查看或下載的文件不做限制,則惡意用戶就能夠查看或下載任意的文件,可以是源代碼文件、敏感文件等。
滲透測試
① 查找可能存在文件包含的漏洞點,比如js,css等頁面代碼路徑
② 看看有沒有文件上傳訪問的功能
③ 採用…/來測試能否誇目錄訪問文件
風險評級:高風險
安全建議
① 採用白名單機制限制伺服器目錄的訪問,以及可以訪問的文件類型(小心被繞過)
② 過濾【./】等特殊字元
③ 採用文件流的訪問返回上傳文件(如用戶頭像),不要通過真實的網站路徑。
示例:tomcat,默認關閉路徑瀏覽的功能:
<param-name>listings</param-name>
<param-value>false</param-value>
3、任意文件上傳漏洞
漏洞描述
目標網站允許用戶向網站直接上傳文件,但未對所上傳文件的類型和內容進行嚴格的過濾。
滲透測試
① 收集網站信息,判斷使用的語言(PHP,ASP,JSP)
② 過濾規則繞過方法:文件上傳繞過技巧
風險評級:高風險
安全建議
① 對上傳文件做有效文件類型判斷,採用白名單控制的方法,開放只允許上傳的文件型式;
② 文件類型判斷,應對上傳文件的後綴、文件頭、圖片類的預覽圖等做檢測來判斷文件類型,同時注意重命名(Md5加密)上傳文件的文件名避免攻擊者利用WEB服務的缺陷構造畸形文件名實現攻擊目的;
③ 禁止上傳目錄有執行許可權;
④ 使用隨機數改寫文件名和文件路徑,使得用戶不能輕易訪問自己上傳的文件。
4、命令注入漏洞
漏洞描述
目標網站未對用戶輸入的字元進行特殊字元過濾或合法性校驗,允許用戶輸入特殊語句,導致各種調用系統命令的web應用,會被攻擊者通過命令拼接、繞過黑名單等方式,在服務端運行惡意的系統命令。
滲透測試
風險評級:高風險
安全建議
① 拒絕使用拼接語句的方式進行參數傳遞;
② 盡量使用白名單的方式(首選方式);
③ 過濾危險方法、特殊字元,如:【|】【&】【;】【』】【"】等
5、SQL注入漏洞
漏洞描述
目標網站未對用戶輸入的字元進行特殊字元過濾或合法性校驗,允許用戶輸入特殊語句查詢後台資料庫相關信息
滲透測試
① 手動測試:判斷是否存在SQL注入,判斷是字元型還是數字型,是否需要盲注
② 工具測試:使用sqlmap等工具進行輔助測試
風險評級:高風險
安全建議
① 防範SQL注入攻擊的最佳方式就是將查詢的邏輯與其數據分隔,如Java的預處理,PHP的PDO
② 拒絕使用拼接SQL的方式
6、跨站腳本漏洞
漏洞描述
當應用程序的網頁中包含不受信任的、未經恰當驗證或轉義的數據時,或者使用可以創建 HTML或JavaScript 的瀏覽器 API 更新現有的網頁時,就會出現 XSS 缺陷。XSS 讓攻擊者能夠在受害者的瀏覽器中執行腳本,並劫持用戶會話、破壞網站或將用戶重定向到惡意站點。
三種XSS漏洞:
① 存儲型:用戶輸入的信息被持久化,並能夠在頁面顯示的功能,都可能存在存儲型XSS,例如用戶留言、個人信息修改等。
② 反射型:URL參數需要在頁面顯示的功能都可能存在反射型跨站腳本攻擊,例如站內搜索、查詢功能。
③ DOM型:涉及DOM對象的頁面程序,包括:document.URL、document.location、document.referrer、window.location等
滲透測試
存儲型,反射型,DOM型
風險評級:高風險
安全建議
① 不信任用戶提交的任何內容,對用戶輸入的內容,在後台都需要進行長度檢查,並且對【<】【>】【"】【』】【&】等字元做過濾
② 任何內容返回到頁面顯示之前都必須加以html編碼,即將【<】【>】【"】【』】【&】進行轉義。
7、跨站請求偽造漏洞
漏洞描述
CSRF,全稱為Cross-Site Request Forgery,跨站請求偽造,是一種網路攻擊方式,它可以在用戶毫不知情的情況下,以用戶的名義偽造請求發送給被攻擊站點,從而在未授權的情況下進行許可權保護內的操作,如修改密碼,轉賬等。
滲透測試
風險評級:中風險(如果相關業務極其重要,則為高風險)
安全建議
① 使用一次性令牌:用戶登錄後產生隨機token並賦值給頁面中的某個Hidden標簽,提交表單時候,同時提交這個Hidden標簽並驗證,驗證後重新產生新的token,並賦值給hidden標簽;
② 適當場景添加驗證碼輸入:每次的用戶提交都需要用戶在表單中填寫一個圖片上的隨機字元串;
③ 請求頭Referer效驗,url請求是否前部匹配Http(s)😕/ServerHost
④ 關鍵信息輸入確認提交信息的用戶身份是否合法,比如修改密碼一定要提供原密碼輸入
⑤ 用戶自身可以通過在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie;
8、內部後台地址暴露
漏洞描述
一些僅被內部訪問的地址,對外部暴露了,如:管理員登陸頁面;系統監控頁面;API介面描述頁面等,這些會導致信息泄露,後台登陸等地址還可能被爆破。
滲透測試
① 通過常用的地址進行探測,如login.html,manager.html,api.html等;
② 可以借用burpsuite和常規頁面地址字典,進行掃描探測
風險評級:中風險
安全建議
① 禁止外網訪問後台地址
② 使用非常規路徑(如對md5加密)
9、信息泄露漏洞
漏洞描述
① 備份信息泄露:目標網站未及時刪除編輯器或者人員在編輯文件時,產生的臨時文件,或者相關備份信息未及時刪除導致信息泄露。
② 測試頁面信息泄露:測試界面未及時刪除,導致測試界面暴露,被他人訪問。
③ 源碼信息泄露:目標網站文件訪問控制設置不當,WEB伺服器開啟源碼下載功能,允許用戶訪問網站源碼。
④ 錯誤信息泄露:目標網站WEB程序和伺服器未屏蔽錯誤信息回顯,頁面含有CGI處理錯誤的代碼級別的詳細信息,例如SQL語句執行錯誤原因,PHP的錯誤行數等。
⑤ 介面信息泄露:目標網站介面訪問控制不嚴,導致網站內部敏感信息泄露。
滲透測試
① 備份信息泄露、測試頁面信息泄露、源碼信息泄露,測試方法:使用字典,爆破相關目錄,看是否存在相關敏感文件
② 錯誤信息泄露,測試方法:發送畸形的數據報文、非正常的報文進行探測,看是否對錯誤參數處理妥當。
③ 介面信息泄露漏洞,測試方法:使用爬蟲或者掃描器爬取獲取介面相關信息,看目標網站對介面許可權是否合理
風險評級:一般為中風險,如果源碼大量泄漏或大量客戶敏感信息泄露。
安全建議
① 備份信息泄露漏洞:刪除相關備份信息,做好許可權控制
② 測試頁面信息泄露漏洞:刪除相關測試界面,做好許可權控制
③ 源碼信息泄露漏洞:做好許可權控制
④ 錯誤信息泄露漏洞:將錯誤信息對用戶透明化,在CGI處理錯誤後可以返回友好的提示語以及返回碼。但是不可以提示用戶出錯的代碼級別的詳細原因
⑤ 介面信息泄露漏洞:對介面訪問許可權嚴格控制
10、失效的身份認證
漏洞描述
通常,通過錯誤使用應用程序的身份認證和會話管理功能,攻擊者能夠破譯密碼、密鑰或會話令牌, 或者利用其它開發缺陷來暫時性或永久性冒充其他用戶的身份。
滲透測試
① 在登陸前後觀察,前端提交信息中,隨機變化的數據,總有與當前已登陸用戶進行綁定的會話唯一標識,常見如cookie
② 一般現在網站沒有那種簡單可破解的標識,但是如果是跨站認證,單點登錄場景中,可能為了開發方便而簡化了身份認證
風險評級:高風險
安全建議
① 使用強身份識別,不使用簡單弱加密方式進行身份識別;
② 伺服器端使用安全的會話管理器,在登錄後生成高度復雜的新隨機會話ID。會話ID不能在URL中,可以安全地存儲,在登出、閑置超時後使其失效。
11、失效的訪問控制
漏洞描述
未對通過身份驗證的用戶實施恰當的訪問控制。攻擊者可以利用這些缺陷訪問未經授權的功能或數據,例如:訪問其他用戶的帳戶、查看敏感文件、修改其他用戶的數據、更改訪問許可權等。
滲透測試
① 登入後,通過burpsuite 抓取相關url 鏈接,獲取到url 鏈接之後,在另一個瀏覽器打開相關鏈接,看能夠通過另一個未登入的瀏覽器直接訪問該功能點。
② 使用A用戶登陸,然後在另一個瀏覽器使用B用戶登陸,使用B訪問A獨有的功能,看能否訪問。
風險評級:高風險
安全建議
① 除公有資源外,默認情況下拒絕訪問非本人所有的私有資源;
② 對API和控制器的訪問進行速率限制,以最大限度地降低自動化攻擊工具的危害;
③ 當用戶注銷後,伺服器上的Cookie,JWT等令牌應失效;
④ 對每一個業務請求,都進行許可權校驗。
12、安全配置錯誤
漏洞描述
應用程序缺少適當的安全加固,或者雲服務的許可權配置錯誤。
① 應用程序啟用或安裝了不必要的功能(例如:不必要的埠、服務、網頁、帳戶或許可權)。
② 默認帳戶的密碼仍然可用且沒有更改。
③ 錯誤處理機制向用戶披露堆棧跟蹤或其他大量錯誤信息。
④ 對於更新的系統,禁用或不安全地配置最新的安全功能。
⑤ 應用程序伺服器、應用程序框架(如:Struts、Spring、ASP.NET)、庫文件、資料庫等沒有進行相關安全配置。
滲透測試
先對應用指紋等進行信息搜集,然後針對搜集的信息,看相關應用默認配置是否有更改,是否有加固過;埠開放情況,是否開放了多餘的埠;
風險評級:中風險
安全建議
搭建最小化平台,該平台不包含任何不必要的功能、組件、文檔和示例。移除或不安裝不適用的功能和框架。在所有環境中按照標準的加固流程進行正確安全配置。
13、使用含有已知漏洞的組件
漏洞描述
使用了不再支持或者過時的組件。這包括:OS、Web伺服器、應用程序伺服器、資料庫管理系統(DBMS)、應用程序、API和所有的組件、運行環境和庫。
滲透測試
① 根據前期信息搜集的信息,查看相關組件的版本,看是否使用了不在支持或者過時的組件。一般來說,信息搜集,可通過http返回頭、相關錯誤信息、應用指紋、埠探測(Nmap)等手段搜集。
② Nmap等工具也可以用於獲取操作系統版本信息
③ 通過CVE,CNVD等平台可以獲取當前組件版本是否存在漏洞
風險評級:按照存在漏洞的組件的安全風險值判定當前風險。
安全建議
① 移除不使用的依賴、不需要的功能、組件、文件和文檔;
② 僅從官方渠道安全的獲取組件(盡量保證是最新版本),並使用簽名機制來降低組件被篡改或加入惡意漏洞的風險;
③ 監控那些不再維護或者不發布安全補丁的庫和組件。如果不能打補丁,可以考慮部署虛擬補丁來監控、檢測或保護。
詳細學習可參考: