http://blog.nsfocus.net/web-vulnerability-analysis-coding-security/
你不知道這10個Web安全漏洞,就別說自己是黑客
SQL注入是一個安全漏洞,允許攻擊者通過操縱用戶提供的數據來更改后端SQL語句。當用戶輸入作為命令或查詢的一部分被發送到解釋器并且欺騙解釋器執行非預期的命令并且允許訪問未授權的數據時,發生注入。
OWASP或Open Web Security Project是一家非營利性慈善組織,致力于提高軟件和Web應用程序的安全性。
該組織根據來自各種安全組織的數據發布頂級Web安全漏洞列表。
根據可利用性,可檢測性和對軟件的影響,Web安全漏洞具有優先級。
可開發性 -
利用安全漏洞需要什么?當攻擊僅需要Web瀏覽器且最低級別是高級編程和工具時,可攻擊性最高。
可檢測性 -
檢測威脅有多容易?最高的是顯示在URL,表單或錯誤消息上的信息,最低的是源代碼。
影響或損壞 -
如果安全漏洞暴露或受到攻擊,將會造成多大的破壞?最高的是完整的系統崩潰,最低的是什么都沒有。
OWASP Top 10的主要目標是向開發人員,設計人員,經理,架構師和組織介紹最重要的安全漏洞。
你不知道這10個Web安全漏洞,就別說自己是黑客
根據OWASP Top 10,十大安全漏洞是:
SQL Injection(SQL注入)
Cross Site Scripting(xss跨站腳本)
Broken Authentication and Session Management(身份驗證和會話管理中斷)
Insecure Direct Object References(不安全的直接對象引用)
Cross Site Request Forgery(跨站點請求偽造)
Security Misconfiguration(安全配置錯誤)
Insecure Cryptographic Storage(不安全的加密存儲)
Failure to restrict URL Access(無法限制URL訪問)
Insufficient Transport Layer Protection(傳輸層保護不足)
Unvalidated Redirects and Forwards(未經驗證的重定向和轉發)
SQL注入
描述
SQL注入是一個安全漏洞,允許攻擊者通過操縱用戶提供的數據來更改后端SQL語句。
當用戶輸入作為命令或查詢的一部分被發送到解釋器并且欺騙解釋器執行非預期的命令并且允許訪問未授權的數據時,發生注入。
由Web應用程序執行時的SQL命令也可以公開后端數據庫。
意義
攻擊者可以將惡意內容注入易受攻擊的字段。
可以從數據庫中讀取敏感數據,如用戶名,密碼等。
可以修改數據庫數據(插入/更新/刪除)。
管理操作可以在數據庫上執行
易受攻擊的對象
輸入字段
與數據庫交互的URL。
例子:
登錄頁面上的SQL注入
在沒有有效憑據的情況下登錄應用程序。
有效的userName可用,密碼不可用。
測試網址:http://demo.testfire.net/default.aspx
用戶名:sjones
密碼:1 = 1'或pass123
創建SQL查詢并將其發送到Interpreter,如下所示
SELECT * FROM Users WHERE User_Name = sjones AND Password = 1 = 1'或pass123;
建議
白名單列出輸入字段
避免顯示對攻擊者有用的詳細錯誤消息。
xss跨站腳本
描述
Cross Site Scripting也簡稱為XSS。
XSS漏洞針對嵌入在客戶端(即用戶瀏覽器而不是服務器端)的頁面中嵌入的腳本。當應用程序獲取不受信任的數據并將其發送到Web瀏覽器而未經適當驗證時,可能會出現這些缺陷。
在這種情況下受害者瀏覽器,攻擊者可以使用XSS對用戶執行惡意腳本。由于瀏覽器無法知道腳本是否可靠,腳本將被執行,攻擊者可以劫持會話cookie,破壞網站或將用戶重定向到不需要的惡意網站。
XSS是一種攻擊,允許攻擊者在受害者的瀏覽器上執行腳本。
意義:
利用此安全漏洞,攻擊者可以將腳本注入應用程序,可以竊取會話cookie,破壞網站,并可以在受害者的計算機上運行惡意軟件。
易受攻擊的對象
輸入字段
網址
例子
1. http://www.vulnerablesite.com/home?" < script > alert(" xss") </ script >
上述腳本在瀏覽器上運行時,如果站點易受XSS攻擊,將顯示一個消息框。
如果攻擊者想要顯示或存儲會話cookie,則可以進行更嚴重的攻擊。
2. http://demo.testfire.net/search.aspx?txtSearch <iframe >
<src = http://google.com width = 500 height 500> </ iframe>
上面的腳本運行時,瀏覽器會加載一個指向http://google.com的隱形框。
通過在瀏覽器上運行惡意腳本可以使攻擊變得嚴重。
建議
白名單輸入字段
輸入輸出編碼
身份驗證和會話管理中斷
描述
網站通常為每個有效會話創建會話cookie和會話ID,這些cookie包含敏感數據,如用戶名,密碼等。當會話通過注銷或瀏覽器突然關閉結束時,這些cookie應該無效,即每個會話應該有一個新的cookie。
如果cookie未失效,則敏感數據將存在于系統中。例如,使用公共計算機(Cyber Cafe)的用戶,易受攻擊的站點的cookie位于系統上并暴露給攻擊者。攻擊者在一段時間后使用相同的公共計算機,敏感數據會受到損害。
以同樣的方式,用戶使用公共計算機,而不是注銷,他突然關閉瀏覽器。攻擊者使用相同的系統,當瀏覽同一個易受攻擊的站點時,受害者的上一個會話將被打開。攻擊者可以通過竊取個人資料信息,信用卡信息等做任何他想做的事情。
應該進行檢查以找到身份驗證和會話管理的強度。密鑰,會話令牌,cookie應該在不影響密碼的情況下正確實施。
易受攻擊的對象
在URL上公開的會話ID可能導致會話固定攻擊。
注銷和登錄前后的會話ID相同。
會話超時未正確實施。
應用程序為每個新會話分配相同的會話ID。
應用程序的經過身份驗證的部分使用SSL進行保護,密碼以散列或加密格式存儲。
會話可由低權限用戶重用。
意義
利用此漏洞,攻擊者可以劫持會話,對系統進行未經授權的訪問,從而允許泄露和修改未經授權的信息。
使用盜取的cookie或使用XSS的會話可以高舉會話。
例子
航空公司預訂應用程序支持URL重寫,將會話ID放在URL中:
http://Examples.com/sale/saleitems;jsessionid=2P0OC2oJM0DPXSNQPLME34SERTBG/dest=Maldives(出售馬爾代夫門票)
該網站的經過身份驗證的用戶希望讓他的朋友了解該銷售并發送電子郵件。朋友收到會話ID,可用于進行未經授權的修改或濫用保存的信用卡詳細信息。
應用程序容易受到XSS攻擊,攻擊者可以通過XSS訪問會話ID并可用于劫持會話。
應用程序超時未正確設置。用戶使用公共計算機并關閉瀏覽器,而不是注銷并離開。攻擊者稍后使用相同的瀏覽器,并對會話進行身份驗證。
建議
應根據OWASP應用程序安全驗證標準定義所有身份驗證和會話管理要求。
永遠不要在URL或日志中公開任何憑據。
還應該做出很大的努力來避免可用于竊取會話ID的XSS漏洞。
不安全的直接對象引用
描述
當開發人員公開對內部實現對象的引用(例如URL或FORM參數中的文件,目錄或數據庫鍵)時,就會發生這種情況。攻擊者可以使用此信息訪問其他對象,并可以創建將來的攻擊來訪問未經授權的數據。
意義
使用此漏洞,攻擊者可以訪問未經授權的內部對象,可以修改數據或破壞應用程序。
易受攻擊的對象
在URL中。
例子:
更改以下URL中的“userid”可以使攻擊者查看其他用戶的信息。
http://www.vulnerablesite.com/userid=123修改為http://www.vulnerablesite.com/userid=124
攻擊者可以通過更改用戶標識值來查看其他信息。
建議:
實施訪問控制檢查。
避免在URL中公開對象引用。
驗證對所有引用對象的授權。
csrf跨站點請求偽造
描述
Cross Site Request Forgery是來自跨站點的偽造請求。
CSRF攻擊是指惡意網站,電子郵件或程序導致用戶的瀏覽器在用戶當前已對其進行身份驗證的受信任站點上執行不需要的操作時發生的攻擊。
CSRF攻擊強制登錄受害者的瀏覽器向易受攻擊的Web應用程序發送偽造的HTTP請求,包括受害者的會話cookie和任何其他自動包含的身份驗證信息。
當用戶在登錄原始網站時點擊URL時,攻擊者將向受害者發送鏈接,該數據將從網站上被竊取。
意義
將此漏洞用作攻擊者可以更改用戶配置文件信息,更改狀態,代表管理員創建新用戶等。
易受攻擊的對象
用戶檔案頁面
用戶帳戶表單
商業交易頁面
例子
受害者使用有效憑據登錄銀行網站。他收到攻擊者的郵件說“請點擊此處捐贈1美元?!?/p>
當受害者點擊它時,將創建一個有效請求以向特定帳戶捐贈1美元。
http://www.vulnerablebank.com/transfer.do?account=cause&amount=1
攻擊者捕獲此請求并創建以下請求,并嵌入一個按鈕,說“我支持原因”。
http://www.vulnerablebank.com/transfer.do?account=Attacker&amount=1000
由于會話已通過身份驗證并且請求通過銀行網站發送,因此服務器將向攻擊者轉移1000美元。
建議
在執行敏感操作時強制用戶在場。
實現CAPTCHA,重新認證和唯一請求令牌等機制。
安全配置錯誤
描述
必須為應用程序,框架,應用程序服務器,Web服務器,數據庫服務器和平臺定義和部署安全性配置。如果這些配置正確,攻擊者可能會未經授權訪問敏感數據或功能。
有時這種缺陷會導致系統完全妥協。保持軟件最新也是很好的安全性。
意義
利用此漏洞,攻擊者可以枚舉底層技術和應用程序服務器版本信息,數據庫信息并獲取有關應用程序的信息以進行更多攻擊。
易受攻擊的對象
網址
表格字段
輸入字段
例子
應用程序服務器管理控制臺將自動安裝,不會被刪除。默認帳戶不會更改。攻擊者可以使用默認密碼登錄,并可以獲得未經授權的訪問。
您的服務器上未禁用目錄列表。攻擊者發現并可以簡單地列出目錄以查找任何文件。
建議
強大的應用程序架構,可在組件之間提供良好的分離和安全性。
更改默認用戶名和密碼。
禁用目錄列表并實施訪問控制檢查。
不安全的加密存儲
描述
不安全的加密存儲是一種常見的漏洞,在敏感數據未安全存儲時存在。
用戶憑據,配置文件信息,健康詳細信息,信用卡信息等屬于網站上的敏感數據信息。
該數據將存儲在應用程序數據庫中。如果不使用加密或散列*來不正確地存儲此數據,則它將容易受到攻擊者的攻擊。
(* Hashing是將字符串字符轉換為固定長度或密鑰的較短字符串。要解密字符串,用于形成密鑰的算法應該可用)
意義
通過使用此漏洞,攻擊者可以竊取,修改此類受弱保護的數據,以進行身份盜用,信用卡欺詐或其他犯罪。
易受攻擊的對象
應用數據庫。
例子
在其中一個銀行應用程序中,密碼數據庫使用未加保留的哈希*來存儲每個人的密碼。SQL注入漏洞允許攻擊者檢索密碼文件。所有未加鹽的哈希都可以在任何時候強行進行,而鹽漬的密碼則需要數千年的時間。
(*無鹽哈希 - 鹽是附加到原始數據的隨機數據。在哈希之前將鹽附加到密碼)
建議
確保適當的強標準算法。不要創建自己的加密算法。僅使用經過批準的公共算法,如AES,RSA公鑰加密和SHA-256等。
確保異地備份已加密,但密鑰是單獨管理和備份的。
無法限制URL訪問
描述
Web應用程序在呈現受保護的鏈接和按鈕之前檢查URL訪問權限 每次訪問這些頁面時,應用程序都需要執行類似的訪問控制檢查。
在大多數應用程序中,特權頁面,位置和資源不會呈現給特權用戶。
通過智能猜測,攻擊者可以訪問權限頁面。攻擊者可以訪問敏感頁面,調用函數和查看機密信息。
意義
利用此漏洞攻擊者可以訪問未經授權的URL,而無需登錄應用程序并利用此漏洞。攻擊者可以訪問敏感頁面,調用函數和查看機密信息。
易受攻擊的對象:
網址
例子
攻擊者注意到URL表示角色為“/ user / getaccounts”。他修改為“/ admin / getaccounts”。
攻擊者可以將角色附加到URL。
http://www.vulnerablsite.com可以修改為http://www.vulnerablesite.com/admin
建議
實施強大的訪問控制檢查。
身份驗證和授權策略應基于角色。
限制對不需要的URL的訪問。
傳輸層保護不足
描述
處理用戶(客戶端)和服務器(應用程序)之間的信息交換。應用程序經常通過網絡傳輸敏感信息,如身份驗證詳細信息,信用卡信息和會話令牌。
通過使用弱算法或使用過期或無效的證書或不使用SSL,可以允許將通信暴露給不受信任的用戶,這可能會危及Web應用程序和/或竊取敏感信息。
意義
利用此Web安全漏洞,攻擊者可以嗅探合法用戶的憑據并獲取對該應用程序的訪問權限。
可以竊取信用卡信息。
易受攻擊的對象
通過網絡發送的數據。
建議
啟用安全HTTP并僅通過HTTPS強制執行憑據傳輸。
確保您的證書有效且未過期。
例子:
1.不使用SSL的應用程序,攻擊者只會監視網絡流量并觀察經過身份驗證的受害者會話cookie。攻擊者可以竊取該cookie并執行Man-in-the-Middle攻擊。
未經驗證的重定向和轉發
描述
Web應用程序使用很少的方法將用戶重定向并轉發到其他頁面以實現預期目的。
如果在重定向到其他頁面時沒有正確的驗證,攻擊者可以利用此功能,并可以將受害者重定向到網絡釣魚或惡意軟件站點,或者使用轉發來訪問未經授權的頁面。
意義
攻擊者可以向用戶發送包含附加編碼惡意URL的真實URL的URL。用戶只需看到攻擊者發送的URL的真實部分就可以瀏覽它并可能成為受害者。
例子
1. http://www.vulnerablesite.com/login.aspx?redirectURL=ownsite.com
修改為
http://www.vulnerablesite.com/login.aspx?redirectURL=evilsite.com
建議
只需避免在應用程序中使用重定向和轉發。如果使用,請不要在計算目的地時使用用戶參數。
如果無法避免目標參數,請確保提供的值有效,并為用戶授權。