譯者按:以下為《黑客攻防技術(shù)寶典:Web實(shí)戰(zhàn)篇》一書第二版中的習(xí)題答案,特在此推出。如果讀者發(fā)現(xiàn)任何問題,請與本人聯(lián)系。英文答案請見:http://mdsec.net/wahh/answers1e.html。
如有轉(zhuǎn)載,請注明出處。謝謝!
第2章:核心防御機(jī)制
1.為什么說應(yīng)用程序處理用戶訪問的機(jī)制是所有機(jī)制中最薄弱的機(jī)制?
典型的應(yīng)用程序使用三重機(jī)制(身份驗(yàn)證、會話管理和訪問控制)來處理訪問。這些組件之間高度相互依賴,其中任何一個(gè)組件存在缺陷都會降低整個(gè)訪問控制機(jī)制的效率。例如,攻擊者可以利用身份驗(yàn)證機(jī)制中的漏洞以任何用戶身份登錄,并因此獲得未授權(quán)訪問權(quán)限。如果能夠預(yù)測令牌,攻擊者就可以假冒成任何已登錄用戶并訪問他們的數(shù)據(jù)。如果訪問控制不完善,則任何用戶都可以直接使用應(yīng)該受到保護(hù)的功能。
2.會話與會話令牌有何不同?
會話是服務(wù)器上保存的一組數(shù)據(jù)結(jié)構(gòu),用于追蹤用戶與應(yīng)用程序交互的狀態(tài)。會話令牌是應(yīng)用程序?yàn)闀挿峙涞囊粋€(gè)特殊字符串,用戶需要在連接提出請求的過程中提交該字符串,以重新確認(rèn)自己的身份。
3.為何不可能始終使用基于白名單的方法進(jìn)行輸入確認(rèn)?
許多時(shí)候,應(yīng)用程序可能會被迫接受與已知為“良性”輸入的列表或模式不匹配的待處理數(shù)據(jù)。例如,許多用戶的姓名包含可用在各種攻擊中的字符。如果應(yīng)用程序希望允許用戶以真實(shí)姓名注冊,就需要接受可能的惡意輸入,并確保安全處理這些輸入。
4.攻擊者正在攻擊一個(gè)執(zhí)行管理功能的應(yīng)用程序,并且不具有使用這項(xiàng)功能的任何有效證書。為何他仍然應(yīng)當(dāng)密切關(guān)注這項(xiàng)功能呢?
攻擊者可以利用任何訪問控制核心機(jī)制中的缺陷未授權(quán)訪問管理功能。此外,攻擊者以低權(quán)限用戶身份提交的數(shù)據(jù)最終將向管理用戶顯示,因此,攻擊者可以提交一些惡意數(shù)據(jù),用于在管理用戶查看這些數(shù)據(jù)時(shí)攻破他們的會話,從而對管理用戶實(shí)施攻擊。
5.旨在阻止跨站點(diǎn)腳本攻擊的輸入確認(rèn)機(jī)制按以下順序處理一個(gè)輸入:
(1) 刪除任何出現(xiàn)的<script>表達(dá)式;
(2) 將輸入截短為50個(gè)字符;
(3) 刪除輸入中的引號;
(4) 對輸入進(jìn)行URL解碼;
(5) 如果任何輸入項(xiàng)被刪除,返回步驟(1)。
是否能夠避開上述確認(rèn)機(jī)制,讓以下數(shù)據(jù)通過確認(rèn)?
“><script>alert(“foo”)</script>
是。如果沒有第4步,此機(jī)制將是可靠的,能夠過濾其旨在阻止的特定項(xiàng)目。但是,由于輸入在執(zhí)行過濾步驟后被解碼,攻擊者只需要對有效載荷中的選定字符進(jìn)行URL編碼,就可以避開這種過濾:
">
如果首先執(zhí)行第4步,或根本不執(zhí)行該步驟,攻擊者將不可能避開上述過濾。
第3章:Web應(yīng)用程序技術(shù)
1.OPTIONS方法有什么作用?
OPTIONS方法要求服務(wù)器報(bào)告可用于特定資源的HTTP方法。
2.If-Modified-Since和If-None-Match消息頭的作用是什么?它們?yōu)楹我鸸粽叩呐d趣?
If-Modified-Since消息頭用于指定瀏覽器最后一次收到被請求的資源的時(shí)間。If-None-Match消息頭用于指定實(shí)體標(biāo)簽,在最后一次收到被請求的資源時(shí),服務(wù)器與被請求的資源一起發(fā)布該標(biāo)簽。
在上述兩種情況下,這些消息頭用于支持瀏覽器中的內(nèi)容緩存,服務(wù)器通過它們指示瀏覽器使用資源的緩存副本,而非資源的完整內(nèi)容(如果這樣做沒有必要)。
在攻擊應(yīng)用程序時(shí),瀏覽器可能已經(jīng)緩存了攻擊者感興趣的資源(如JavaScript文件)副本。如果刪除這兩個(gè)消息頭,就可以覆寫瀏覽器的緩存信息,確保服務(wù)器以攻擊者希望查看的新的資源副本做出響應(yīng)。
3.當(dāng)服務(wù)器設(shè)置cookie時(shí),secure標(biāo)簽有什么意義?
secure標(biāo)簽用于向?yàn)g覽器發(fā)出以下指示:只應(yīng)通過HTTPS連接、絕不能通過未加密的HTTP連接重新提交cookie。
4.常用狀態(tài)碼301與302有什么不同?
301狀態(tài)碼告訴瀏覽器被請求的資源已永久移動(dòng)到其他位置。在當(dāng)前瀏覽器會話期間,如果瀏覽器需要訪問最初請求的資源,它將使用在301響應(yīng)中指定的位置。
302狀態(tài)碼告訴瀏覽器被請求的資源已臨時(shí)移動(dòng)到其他位置。下次瀏覽器需要訪問最初請求的資源時(shí),它將從最初請求的位置請求此資源。
5.使用SSL時(shí),瀏覽器如何與Web代理實(shí)現(xiàn)互操作?
瀏覽器向代理發(fā)送一個(gè)CONNECT請求,將目標(biāo)主機(jī)名和端口號指定為此請求中的URL。如果代理允許該請求,它將返回一個(gè)狀態(tài)碼為200的HTTP響應(yīng),使TCP連接保持開放,并在隨后作為指定目標(biāo)的純TCP級中繼。
第4章:解析應(yīng)用程序
1.當(dāng)解析一個(gè)應(yīng)用程序時(shí),會遇到以下URL:
https://wahh-app.com/CookieAuth.dll?GetLogon?curl=Z2Fdefault.aspx
據(jù)此可以推論出服務(wù)器使用何種技術(shù)?該技術(shù)的運(yùn)作方式可能是怎樣的?
文件名CookieAuth.dll說明應(yīng)用程序正使用Microsoft ISAServer。這是登錄功能的URL,成功登錄后,應(yīng)用程序?qū)⒅囟ㄏ虻経RL /default.aspx。
2.如果所針對的應(yīng)用程序是一個(gè)Web論壇,并且只發(fā)現(xiàn)了一個(gè)URL:
http://wahh-app.com/forums/ucp.php?mode=register
如何通過它獲得論壇成員列表?
此URL是phpBB Web論壇軟件的常用“指紋”。因特網(wǎng)上提供了有關(guān)此軟件的大量信息,讀者可以自己安裝該軟件以進(jìn)行體驗(yàn)??梢酝ㄟ^以下URL獲取成員列表:
http://wahh-app.com/forums/memberlist.php
通過類似于下面的URL可以獲取單個(gè)用戶的用戶資料:
http://wahh-app.com/forums/profile.php?mode=viewprofile&u=2
phpBB軟件中包含各種漏洞,因此,讀者應(yīng)確認(rèn)所使用的版本并研究任何相關(guān)問題。
3.當(dāng)解析一個(gè)應(yīng)用程序時(shí),遇到以下URL:
https://wahh-app.com/public/profile/Address.asp?action=view&location=default
據(jù)此推斷服務(wù)器端應(yīng)使用何種技術(shù)??赡苓€存在哪些其他內(nèi)容和功能?
.asp文件擴(kuò)展名說明應(yīng)用程序正使用Microsoft的Active ServerPages(ASP)。/public路徑說明可能存在其他有用的路徑,如/private。action=view參數(shù)表明可能存在其他操作,如edit、add或delete。應(yīng)調(diào)查location=default參數(shù)的用途,其中可能包含用戶名,因此應(yīng)在應(yīng)用程序中探查路徑遍歷漏洞。
4.Web服務(wù)器的一個(gè)響應(yīng)包含以下消息頭:
Server:Apache-Coyote/1.1
這表示服務(wù)器使用何種技術(shù)?
如果該消息頭是準(zhǔn)確的,說明服務(wù)器正運(yùn)行Apache Tomcat。Tomcat是一種Java Servlet容器,因此應(yīng)用程序可能使用的是Java和JSP技術(shù)。
5.假設(shè)正在解析兩個(gè)不同的Web應(yīng)用程序,在每個(gè)應(yīng)用程序中請求URL /admin.cpf。每個(gè)請求返回的響應(yīng)消息頭如下所示。僅由這些消息頭能否確定每個(gè)應(yīng)用程序中存在被請求的資源?
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Expires: Mon, 20 Jun 2011 14:59:21 GMT
Content-Location: http://wahh-
app.com/includes/error.htm?404;http://wahh-app.com/admin.cpf
Date: Mon, 20 Jun 2011 14:59:21 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 2117
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm=”Wahh Administration Site”
Content-Type: text/html;charset=utf-8
Content-Length: 954
Date: Mon, 20 Jun 2011 15:07:27 GMT
Connection: close
第一個(gè)響應(yīng)使用HTTP狀態(tài)碼200,通常這表示請求已成功提交。但是,Content-Location消息頭表示從中獲取該響應(yīng)的位置。這似乎是一個(gè)動(dòng)態(tài)生成的錯(cuò)誤頁面,并且其查詢字符串中包含值404,表明響應(yīng)中包含定制的“文件未發(fā)現(xiàn)”消息。
第二個(gè)響應(yīng)使用HTTP狀態(tài)碼401,表明被請求的資源存在,但用戶必須提供HTTP驗(yàn)證證書才能訪問該資源。
對于以上每一種情況,可以使用相同擴(kuò)展名(如/iuwehuiwefuwedw.cpf)請求同一目錄中的某個(gè)確定不存在的項(xiàng)目,并比較相關(guān)響應(yīng),以證實(shí)上述結(jié)論。第一個(gè)應(yīng)用程序可能會返回與原始響應(yīng)極其類似的響應(yīng)。第二個(gè)應(yīng)用程序可能會返回包含“文件未發(fā)現(xiàn)”消息的不同響應(yīng)。
第5章:避開客戶端控件
1.通過客戶端傳送的數(shù)據(jù)如何阻止破壞性攻擊?
可以使用保存在服務(wù)器上的密鑰對數(shù)據(jù)進(jìn)行加密或散列處理,就像選擇性地使用ASP.NET ViewState一樣。除非攻擊者以某種方式獲得密鑰,否則他們將無法加密任意數(shù)據(jù),或計(jì)算出任意數(shù)據(jù)的有效散列。但是,攻擊者仍然能夠?qū)⒁环N情形中的數(shù)據(jù)用于另一種情形——例如,可以用廉價(jià)商品的加密價(jià)格替代昂貴商品的加密價(jià)格。為防止這種攻擊,應(yīng)用程序應(yīng)在受保護(hù)的數(shù)據(jù)中包含足夠的上下文信息,以便于確認(rèn)所采用的數(shù)據(jù)源自同一情形——例如,可以將產(chǎn)品代碼和價(jià)格組合在一個(gè)加密對象中。
2.應(yīng)用程序開發(fā)者希望阻止攻擊者對登錄功能發(fā)動(dòng)蠻力攻擊。由于攻擊者可能以多個(gè)用戶名為目標(biāo),開發(fā)者決定將登錄嘗試失敗次數(shù)保存在一個(gè)加密cookie中,阻止任何失敗次數(shù)超過5次的請求。有什么辦法能夠避開這種防御?
這種防御很容易突破。攻擊者不需要提交跟蹤登錄嘗試失敗次數(shù)的cookie。他們可以在瀏覽器中禁用cookie,或使用自動(dòng)化腳本不通過相關(guān)cookie提交請求。
其他防御措施包括使用CAPTCHA控件暫時(shí)阻止攻擊者,或在登錄失敗次數(shù)達(dá)到五次后阻止源IP地址,但是,這樣做可能會對使用代理或NAT防火墻的多個(gè)用戶造成負(fù)面影響。
3.某應(yīng)用程序包含一個(gè)執(zhí)行嚴(yán)格訪問控件的管理頁面。該頁面上有一個(gè)連接到另一臺Web服務(wù)器的診斷功能鏈接。只有管理員才能夠訪問這些功能。不執(zhí)行另一種驗(yàn)證機(jī)制,下列哪一種(如果有)客戶端機(jī)制可用于為診斷功能提供安全的訪問控件?要選擇一個(gè)解決方案,是否還需要了解其他信息?
(1) 診斷功能能夠檢查HTTPReferer消息頭,證實(shí)請求由主管理頁面提交。
(2) 診斷功能能夠驗(yàn)證收到的cookie,證實(shí)其中包含訪問主應(yīng)用程序所需的有效會話令牌。
(3) 主應(yīng)用程序可在請求的一個(gè)隱藏字段中設(shè)置一個(gè)身份驗(yàn)證令牌。診斷功能能夠確認(rèn)這一點(diǎn),證實(shí)用戶在主應(yīng)用程序中有一個(gè)會話。
(1) 攻擊者可以將Referer消息頭設(shè)置為任意值,因此它不是執(zhí)行任何訪問控制檢查的安全方法。
(2) 這種方法僅在包含診斷功能的Web服務(wù)器為源Web服務(wù)器的父域或子域,且對會話cookie進(jìn)行了相應(yīng)地審查時(shí)有效,否則cookie將不會被提交到診斷服務(wù)器。將需要為診斷服務(wù)器實(shí)施后端機(jī)制,以確認(rèn)隨源服務(wù)器一起提交的令牌。
(3) 無論診斷服務(wù)器的域名是什么,這種方法都有效。只要身份驗(yàn)證令牌不可預(yù)測,并且以安全方式傳輸(請參閱第7章),這種方法就是安全的。此外,還需要實(shí)施用于驗(yàn)證令牌的后端機(jī)制。
4.如果一個(gè)表單字段的屬性為disabled=true,那么它就不會和表單的其他內(nèi)容一起提交。如何才能改變這種情況呢?
有兩種基本的方法:
(1) 可以攔截提交表單的請求,并添加被禁用的參數(shù)。
(2) 可以攔截包含表單的響應(yīng),并刪除disabled=true屬性。
5.應(yīng)用程序可采取什么方法確??蛻舳藞?zhí)行了輸入確認(rèn)?
應(yīng)用程序沒有辦法可以確??蛻舳藞?zhí)行了輸入確認(rèn)。在客戶端上執(zhí)行的各種操作完全由用戶控制。
第二部分
愛華網(wǎng)



