owasptop10 學習筆記


本文是owasptop10 的學習筆記。文中將感悟點記錄下來。記錄順序是根據文檔的閱讀順序。

首先感興趣的點是文中提出來的風險評級,因為實際工作中也會遇到此類問題,並不知如何定級。我覺得可以按照文中給定的方式來進行風險評級及描述

例如:本業務系統為xxxxxxxxxxx(應用描述),通過(攻擊向量:易、平均、難;漏洞普遍性:廣泛、常見、少見;漏洞可檢測性:易、平均、難;技術影響:嚴重、中等、小)綜合評估本次風險等級為高、中、低危:可對業務造成xxxxxxxxx(業務描述)

但文中給出的  OWASP風險等級排序方法鏈接  (https://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology)更為復雜,適合一些精細的評估作為參考。(  google全文翻譯查看后發現有更精細的一套風險評估指標與方法。本文重點不在這里故此不再深究。)

 

接下來就到了top10了,top1就是大名鼎鼎的注入。但是沒想到注入原來分這么多,自己平常只知道sqli。先看一下文檔對注入的定義:

 將不受信任的數據作為命令或查詢的一部分發送給解析器時,會差生注入。sql注入,nosql注入,os注入和LDAP注入的注入缺陷。攻擊者的惡意數據可以誘使解析器在沒有授權的情況下執行非預期命令或訪問數據。

談談搜到的不熟悉注入吧:os注入,搜了之后才發現也是非常熟悉的但平時將他歸到了命令執行。沒想到這里划在了注入。

網絡解釋:OS指令執行是為了通過網絡接口在web服務器執行OS命令的一種技術。如果應用程序使用外部輸入的字符串或受外部影響的字符串組裝命令,並且沒有經過正確的過濾,就可能導致OS命令的注入攻擊。

類型網上分為了兩類:

1.應用程序執行一個自己控制的固定程序,通過用戶輸入的參數來執行命令。這時,可以通過參數的分隔符,在參數中注入命令,來執行攻擊者想要運行的命令。

2.應用程序將輸入的整個字符串作為一個命令,應用程序只是做個中轉,將命令傳給操作系統執行,例如,通過exec來執行命令,這時可以通過命令分隔符注入命令。

第一個感覺就像linux 命令里的| 或者& 這類的連接符注入。突然想到緩存區溢出算不算注入。還是有區別的,定義中的注入是指對解析器而言達到非預期命令或訪問數據。而緩存區溢出這類直接是操作二進制程序。所以不能算注入。

第二個很便於理解,例如php提供的三個外部執行命令的函數,system()、shell_exec()、passthru()tips:還有一種直接使用反引號  ·ipconfig·  也可以達到命令執行。exec也可以但需要在命令駐增加參數,輸出會傳遞給這個新增參數。例如<?php $cmd=$_GET['cmd']; exec($cmd,$ls); var_dump($ls);?>

ldap注入:LDAP(Lightweight Directory Access Protocol):輕量級目錄訪問協議,是一種在線目錄訪問協議。LDAP主要用於目錄中資源的搜索和查詢。利用LDAP注入技術的關鍵在於控制用於目錄搜索服務的過濾器。常見的LDAP有微軟的ADAM(Active Directory Application Mode)和OpenLDAP。出於對問題的研究態度想研究一下這個方面,但考慮到自己目前水平,以及此類攻擊很少用到。暫時先記錄下來。有機會再搞。

除了上述兩種注入,我再google的時候還給我提到了另一個owasp沒有提到的注入類型:xpath注入。其實也是對解析器進行注入和sql注入除了語法之外感覺區別不大。網上有找了一個php的解析器並簡單測試了一下。

 

 

top2:失效的身份認證

 

 一般應用程序身份驗證的脆弱性可能存在以下幾個方面:

1.允許憑證填充,這使得攻擊者獲得有效用戶名和密碼的列表。(憑證填充:憑據填充是自動注入違反的用戶名/密碼對,以便以欺詐手段獲取對用戶帳戶的訪問權限。這是暴力攻擊類別的一個子集:大量的溢出憑據會自動輸入到網站中,直到它們可能與現有帳戶匹配,然后攻擊者可以為自己的目的劫持。

2.允許暴力破解或其他自動攻擊。

3.允許默認的、弱的或眾所周知的密碼,例如“Password1”或“admin/admin”。

4.使用弱的或失效的驗證憑證,忘記密碼程序,例如“基於知識的答案”,這是不安全的。

5.使用明文、加密或弱散列密碼

6.缺少或失效的多因素身份驗證。

7.暴露URL中的會話ID(例如URL重寫)。

8.在成功登錄后不會更新會話ID。?

9.不正確地使會話ID失效。當用戶不活躍的時候,用戶會話或認證令牌(特別是單點登錄(SSO)令牌)沒有正確注銷或失效。

如何防止其實也就是針對上面提到的弱點進行加強。我就不再贅述。記錄以下文中提到的特別的幾點:

1.確認注冊、憑據恢復和API路徑,通過對所有輸出結果使用相同的消息,用以抵御賬戶枚舉攻擊。

2.限制或逐漸延遲失敗的登錄嘗試。記錄所有失敗信息並在憑據填充、暴力破解或其他攻擊被檢測時提醒管理員。

3.使用服務器端安全的內置會話管理器,在登錄后生成高度復雜的新隨機會話ID。會話ID不能在URL中,可以安全地存儲和當登出、閑置、絕對超時后使其失效。

 

top3:敏感信息泄露

此類漏洞在平常的工作中接觸最多。陳列以下文檔中提出來可能存在漏洞的幾個點:

1.在數據傳輸過程中是否使用明文傳輸?這和傳輸協議相關,如:HTTP、SMTP和FTP。外部網絡流量非常危險。驗證所有的內部通信,如:負載平衡器、Web服務器或后端系統之間的通信。

2.當數據被長期存儲時,無論存儲在哪里,它們是否都被加密,包含備份數據?

3.無論默認條件還是源代碼中,是否還在使用任何舊的或脆弱的加密算法?

4.是否使用默認加密密鑰,生成或重復使用脆弱的加密密鑰,或者缺少恰當的密鑰管理或密鑰回轉?

5.是否強制加密敏感數據,例如:用戶代理(如:瀏覽器)指令和傳輸協議是否被加密?

6.用戶代理(如:應用程序、郵件客戶端)是否未驗證服務器端證書的有效性?

 

top4:XML 外部實體(XXE)

如果攻擊者可以上傳XML文檔或者在 XML文檔中添加惡意內容,通過易受 攻擊的代碼、依賴項或集成,他們就 能夠攻擊含有缺陷的XML處理器。

XXE缺陷可用於提取數據、執行遠程 服務器請求、掃描內部系統、執行拒 絕服務攻擊和其他攻擊。 業務影響取決於所有受影響的應用程 序和數據保護需求。

 

 

top5:失效的訪問控制

對訪問控制的利用是滲透測試人員的 一項核心技能。SAST 工具和 DAST 工具可以檢測到訪問控制的缺失,但 不能驗證其功能是否正常。訪問控制 可通過手動方式檢測,或在某些特定 框架下通過自動化檢測訪問控制缺失。

由於缺乏自動化的檢測和應用程序開發人員缺乏有效 的功能測試,因而訪問控制缺陷很常見。 訪問控制檢測通常不適用於自動化的靜態或動態測試。 手動測試是檢測訪問控制缺失或失效的最佳方法,包 括:HTTP方法(如:GET和PUT)、控制器、直接對 象引用等。

技術影響是攻擊者可以冒充用戶、管 理員或擁有特權的用戶,或者創建、 訪問、更新或刪除任何記錄。 業務影響取決於應用程序和數據的保 護需求。

 

 

 

top6:安全配置錯誤

通常,攻擊者能夠通過未修復的漏洞、 訪問默認賬戶、不再使用的頁面、未 受保護的文件和目錄等來取得對系統 的未授權的訪問或了解。安全配置錯誤可以發生在一個應用程序堆棧的任何層 面,包括網絡服務、平台、Web服務器、應用服務器、 數據庫、框架、自定義代碼和預安裝的虛擬機、容器 和存儲。自動掃描器可用於檢測錯誤的安全配置、默 認帳戶的使用或配置、不必要的服務、遺留選項等。這些漏洞使攻擊者能經常訪問一些未 授權的系統數據或功能。有時,這些 漏洞導致系統的完全攻破。

 

top7:跨站腳本(XSS)

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意制造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容

存在三種XSS類型,通常針對用戶的瀏覽器: 反射式XSS:應用程序或API包括未經驗證和未經轉義的用戶輸入, 作為HTML輸出的一部分。一個成功的攻擊可以讓攻擊者在受害者 的瀏覽器中執行任意的HTML和JavaScript。 通常,用戶將需要與指 向攻擊者控制頁面的某些惡意鏈接進行交互,例如惡意漏洞網站, 廣告或類似內容。 存儲式XSS:你的應用或者API將未凈化的用戶輸入存儲下來了, 並在后期在其他用戶或者管理員的頁面展示出來。 存儲型XSS一 般被認為是高危或嚴重的風險。 基於DOM的XSS:會動態的將攻擊者可控的內容加入頁面的 JavaScript框架、單頁面程序或API存在這種類型的漏洞。理想的 來說,你應該避免將攻擊者可控的數據發送給不安全的JavaScript API。 典型的XSS攻擊可導致盜取session、賬戶、繞過MFA、DIV替換、 對用戶瀏覽器的攻擊(例如:惡意軟件下載、鍵盤記錄)以及其 他用戶側的攻擊。

 xss學習可以參考網上著名的xss過濾表(https://www.freebuf.com/articles/web/153055.html

 

top8:不安全的反序列化

 

 

 

這里舉一個php反序列化執行xss的栗子:

<?php
class test
{
public $name='name';
function __wakeup()
{
echo $this->name;
}
}

$test = new test();
echo serialize($test);
unserialize($_GET['c']);
?>

瀏覽器執行:http://127.0.0.1/1.php?c=O:4:"test":1:{s:4:"name";s:25:"<script>alert(0)</script>";}

實現彈窗:

 

 

 

top9:使用含有已知漏洞的組件

常見的利用就是web中間件,例如:

(一) IIS

1、PUT漏洞

2、短文件名猜解

3、遠程代碼執行

4、解析漏洞

(二) Apache

1、解析漏洞

2、目錄遍歷

(三) Nginx

1、文件解析

2、目錄遍歷

3、CRLF注入

4、目錄穿越

(四)Tomcat

1、遠程代碼執行

2、war后門文件部署

(五)jBoss

1、反序列化漏洞

2、war后門文件部署

(六)WebLogic

1、反序列化漏洞

2、SSRF

3、任意文件上傳

4、war后門文件部署

(七)其它中間件相關漏洞

1、FastCGI未授權訪問、任意命令執行

2、PHPCGI遠程代碼執行

 

top10:不足的日志記錄和監控

對不足的日志記錄及監控的利用幾乎 是每一個重大安全事件的溫床。 攻擊者依靠監控的不足和響應的不及 時來達成他們的目標而不被知曉。

判斷你是否有足夠監控的一個策略是在滲透測試后檢 查日志。 測試者的活動應被充分的記錄下來,能夠反 映出他們造成了什么樣的影響。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM