日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

渗透测试web未设置http头 Strict Transport Security

發(fā)布時(shí)間:2025/3/15 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渗透测试web未设置http头 Strict Transport Security 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HTTP Strict Transport Security (通常簡稱為HSTS) 是一個(gè)安全功能,它告訴瀏覽器只能通過HTTPS訪問當(dāng)前資源, 禁止HTTP方式。

0×01. Freebuf百科:什么是Strict-Transport-Security

我摘自owasp上的一段定義:

HTTP?Strict?Transport?Security?(HSTS)?is?an?opt-in?security?enhancement?that?is?specified?by?a?web?application?through?the?use?of?a?special?response?header.?Once?a?supported?browser?receives?this?header?that?browser?will?prevent?any?communications?from?being?sent?over?HTTP?to?the?specified?domain?and?will?instead?send?all?communications?over?HTTPS.?It?also?prevents?HTTPS?click?through?prompts?on?browsers.
The?specification?has?been?released?and?published?end?of?2012?as?RFC?6797?(HTTP?Strict?Transport?Security?(HSTS))?by?the?IETF.?(Reference?see?in?the?links?at?the?bottom.)

一個(gè)網(wǎng)站接受一個(gè)HTTP的請求,然后跳轉(zhuǎn)到HTTPS,用戶可能在開始跳轉(zhuǎn)前,通過沒有加密的方式和服務(wù)器對話,比如,用戶輸入http://foo.com或者直接foo.com。這樣存在中間人攻擊潛在威脅,跳轉(zhuǎn)過程可能被惡意網(wǎng)站利用來直接接觸用戶信息,而不是原來的加密信息。網(wǎng)站通過HTTP Strict Transport Security通知瀏覽器,這個(gè)網(wǎng)站禁止使用HTTP方式加載,瀏覽器應(yīng)該自動(dòng)把所有嘗試使用HTTP的請求自動(dòng)替換為HTTPS請求。

0×02. 我們?yōu)槭裁葱枰_啟Strict-Transport-Security??

想想這樣一種場景:

有的網(wǎng)站開啟了https,但為了照顧用戶的使用體驗(yàn)(因?yàn)橛脩艨偸呛苜嚨?#xff0c;一般不會(huì)主動(dòng)鍵入https,而是直接輸入域名, 直接輸入域名訪問,默認(rèn)就是http訪問)同時(shí)也支持http訪問,當(dāng)用戶http訪問的時(shí)候,就會(huì)返回給用戶一個(gè)302重定向,重定向到https的地址,然后后續(xù)的訪問都使用https傳輸,這種通信模式看起來貌似沒有問題,但細(xì)致分析,就會(huì)發(fā)現(xiàn)種通信模式也存在一個(gè)風(fēng)險(xiǎn),那就是這個(gè)302重定向可能會(huì)被劫持篡改,如果被改成一個(gè)惡意的或者釣魚的https站點(diǎn),然后,你懂得,一旦落入釣魚站點(diǎn),數(shù)據(jù)還有安全可言嗎?

對于篡改302的攻擊,建議服務(wù)器開啟HTTP Strict Transport Security功能,這個(gè)功能的含義是:

當(dāng)用戶已經(jīng)安全的登錄開啟過htst功能的網(wǎng)站 (支持hsts功能的站點(diǎn)會(huì)在響應(yīng)頭中插入:Strict-Transport-Security) 之后,支持htst的瀏覽器(比如chrome. firefox)會(huì)自動(dòng)將這個(gè)域名加入到HSTS列表,下次即使用戶使用http訪問這個(gè)網(wǎng)站,支持htst功能的瀏覽器就會(huì)自動(dòng)發(fā)送https請求(前提是用戶沒有清空緩存,如果清空了緩存第一次訪問還是明文,后續(xù)瀏覽器接收到服務(wù)器響應(yīng)頭中的Strict-Transport-Security,就會(huì)把域名加入到hsts緩存中,然后才會(huì)在發(fā)送請求前將http內(nèi)部轉(zhuǎn)換成https),而不是先發(fā)送http,然后重定向到https,這樣就能避免中途的302重定向URL被篡改。進(jìn)一步提高通信的安全性。

上面是我自己的理解,下面是owasp中文站點(diǎn)關(guān)于hsts的描述:

HSTS的作用是強(qiáng)制客戶端(如瀏覽器)使用HTTPS與服務(wù)器創(chuàng)建連接。服務(wù)器開啟HSTS的方法是,當(dāng)客戶端通過HTTPS發(fā)出請求時(shí),在服務(wù)器返回的超文本傳輸協(xié)議響應(yīng)頭中包含Strict-Transport-Security字段。非加密傳輸時(shí)設(shè)置的HSTS字段無效。

比如,https://example.com/ 的響應(yīng)頭含有Strict-Transport-Security: max-age=31536000; includeSubDomains。這意味著兩點(diǎn):

在接下來的一年(即31536000秒)中,瀏覽器只要向example.com或其子域名發(fā)送HTTP請求時(shí),必須采用HTTPS來發(fā)起連接。比如,用戶點(diǎn)擊超鏈接或在地址欄輸入 http://www.example.com/ ,瀏覽器應(yīng)當(dāng)自動(dòng)將 http 轉(zhuǎn)寫成 https,然后直接向 https://www.example.com/ 發(fā)送請求。

在接下來的一年中,如果 example.com 服務(wù)器發(fā)送的TLS證書無效,用戶不能忽略瀏覽器警告繼續(xù)訪問網(wǎng)站。

HSTS可以用來抵御SSL剝離攻擊。SSL剝離攻擊是中間人攻擊的一種,由Moxie Marlinspike于2009年發(fā)明。他在當(dāng)年的黑帽大會(huì)上發(fā)表的題為“New Tricks For Defeating SSL In Practice”的演講中將這種攻擊方式公開。SSL剝離的實(shí)施方法是阻止瀏覽器與服務(wù)器創(chuàng)建HTTPS連接。它的前提是用戶很少直接在地址欄輸入https://,用戶總是通過點(diǎn)擊鏈接或3xx重定向,從HTTP頁面進(jìn)入HTTPS頁面。所以攻擊者可以在用戶訪問HTTP頁面時(shí)替換所有https://開頭的鏈接為http://,達(dá)到阻止HTTPS的目的。

HSTS可以很大程度上解決SSL剝離攻擊,因?yàn)橹灰獮g覽器曾經(jīng)與服務(wù)器創(chuàng)建過一次安全連接,之后瀏覽器會(huì)強(qiáng)制使用HTTPS,即使鏈接被換成了HTTP

另外,如果中間人使用自己的自簽名證書來進(jìn)行攻擊,瀏覽器會(huì)給出警告,但是許多用戶會(huì)忽略警告。HSTS解決了這一問題,一旦服務(wù)器發(fā)送了HSTS字段,用戶將不再允許忽略警告。

0×03. Strict-Transport-Security的一些不足

用戶首次訪問某網(wǎng)站是不受HSTS保護(hù)的。這是因?yàn)槭状卧L問時(shí),瀏覽器還未收到HSTS,所以仍有可能通過明文HTTP來訪問。解決這個(gè)不足目前有兩種方案,一是瀏覽器預(yù)置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Spartan實(shí)現(xiàn)了這一方案。二是將HSTS信息加入到域名系統(tǒng)記錄中。但這需要保證DNS的安全性,也就是需要部署域名系統(tǒng)安全擴(kuò)展。截至2014年這一方案沒有大規(guī)模部署。

由于HSTS會(huì)在一定時(shí)間后失效(有效期由max-age指定),所以瀏覽器是否強(qiáng)制HSTS策略取決于當(dāng)前系統(tǒng)時(shí)間。部分操作系統(tǒng)經(jīng)常通過網(wǎng)絡(luò)時(shí)間協(xié)議更新系統(tǒng)時(shí)間,如Ubuntu每次連接網(wǎng)絡(luò)時(shí),OS X Lion每隔9分鐘會(huì)自動(dòng)連接時(shí)間服務(wù)器。攻擊者可以通過偽造NTP信息,設(shè)置錯(cuò)誤時(shí)間來繞過HSTS。解決方法是認(rèn)證NTP信息,或者禁止NTP大幅度增減時(shí)間。比如Windows 8每7天更新一次時(shí)間,并且要求每次NTP設(shè)置的時(shí)間與當(dāng)前時(shí)間不得超過15小時(shí)

0×04. 我的一些測試

1). 測試1

目標(biāo)域名:portal.fraudmetrix.cn (這個(gè)站點(diǎn)不支持hsts功能) 同盾科技的風(fēng)險(xiǎn)控制管理系統(tǒng)(打個(gè)軟廣,同盾科技,基于大數(shù)據(jù),專注反欺詐)。

第一次訪問:在瀏覽器地址欄鍵入:portal.fraudmetrix.cn

可以看到:

這個(gè)域名并不在chrome瀏覽器的hsts的緩存中,也不在hsts中的preload list中(像facebook、twitter等網(wǎng)站已經(jīng)內(nèi)置在preload list中,所以每次請求這些站點(diǎn)的時(shí)候?yàn)g覽器都會(huì)自動(dòng)將http 轉(zhuǎn)換成htttps),所以不會(huì)在發(fā)送請求前將http轉(zhuǎn)換成https請求。

我們來把這個(gè)站點(diǎn)手動(dòng)加入到chrome瀏覽器的hsts緩存中:

在未清空chrome瀏覽器歷史記錄的前提下,我們再次訪問這個(gè)站點(diǎn):

可以看到,一個(gè)307 響應(yīng)碼,這是chrome瀏覽器的內(nèi)部轉(zhuǎn)換,將http轉(zhuǎn)換成https后再發(fā)送請求。

備注:為什么我們要求在未清空chrome瀏覽器的緩存前訪問呢?

因?yàn)槿绻蹇樟薱hrome瀏覽器的緩存之后,我們手動(dòng)加入到hsts緩存中的域名就會(huì)被清除,也就不會(huì)看到預(yù)期的效果了。

2). 測試2

我們先清空chrome瀏覽器的緩存,然后在瀏覽器的地址欄中鍵入?www.alipay.com?

可以看到www.alipay.com(支付寶)這個(gè)站點(diǎn)并沒有在chrome 瀏覽器的內(nèi)置的preload list中,所以第一次訪問的時(shí)候,chrome瀏覽器并不會(huì)將http轉(zhuǎn)換成https。

而是由前端的F5的負(fù)載均衡(BigIP)器將http請求重定向到https請求。

我們繼續(xù)看看這次請求的其他響應(yīng):

可以看到支付寶站點(diǎn)服務(wù)器是支持hsts功能的,在其響應(yīng)頭中插入了:Strict-Transport-Security,并且設(shè)置這個(gè)頭部的有效期,只要不手動(dòng)清空緩存,那么在這個(gè)有效期內(nèi),chrome瀏覽器都會(huì)將所有發(fā)送這個(gè)站點(diǎn)的http請求在內(nèi)部轉(zhuǎn)換成https再發(fā)送出去。

瀏覽器在收到帶有Strict-Transport-Security響應(yīng)頭的報(bào)文后,就會(huì)將這個(gè)站點(diǎn)加入到hsts緩存中,下次以http訪問的時(shí)候就會(huì)被自動(dòng)轉(zhuǎn)換成https。

我們這時(shí)查看以下hsts的緩存中是不是有了?www.alipay.com

正如你所見:www.alipay.com已經(jīng)被加入到了chrome瀏覽器的緩存中。

這時(shí)候在未清空瀏覽器緩存的前提下再次訪問?www.alipay.com?

看到了吧,熟悉的307響應(yīng)碼,瀏覽器做了內(nèi)部轉(zhuǎn)換,將http轉(zhuǎn)換成https。

3). 其他?

臉書www.facebook.com是已經(jīng)加入到chrome瀏覽器hsts preload list中的。

注意到?jīng)],信息很詳細(xì)哦!

看看我大百度呢?

清空chrome瀏覽器緩存,在地址欄鍵入www.baidu.com:

很遺憾,我大百度也不在chrome hsts preload list中。

在看看這次請求中的其他響應(yīng)報(bào)文呢:

也沒有看到 Strict-Transport-Security的影子。

來自:https://www.freebuf.com/articles/web/66827.html

最后附上chrome的hsts地址:chrome://net-internals/#hsts

然后如何配置HSTS呢?

nginx配置參數(shù):

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains" always;

可以參考這篇:

https://www.cnblogs.com/luckcs/articles/6944535.html

?

開啟HSTS讓瀏覽器強(qiáng)制跳轉(zhuǎn)HTTPS訪問

在網(wǎng)站全站HTTPS后,如果用戶手動(dòng)敲入網(wǎng)站的HTTP地址,或者從其它地方點(diǎn)擊了網(wǎng)站的HTTP鏈接,通常依賴于服務(wù)端301/302跳轉(zhuǎn)才能使用HTTPS服務(wù)。而第一次的HTTP請求就有可能被劫持,導(dǎo)致請求無法到達(dá)服務(wù)器,從而構(gòu)成HTTPS降級劫持。這個(gè)問題目前可以通過HSTS(HTTP Strict Transport Security,RFC6797)來解決。

HSTS簡介

HSTS(HTTP Strict Transport Security)是國際互聯(lián)網(wǎng)工程組織IETF發(fā)布的一種互聯(lián)網(wǎng)安全策略機(jī)制。采用HSTS策略的網(wǎng)站將保證瀏覽器始終連接到該網(wǎng)站的HTTPS加密版本,不需要用戶手動(dòng)在URL地址欄中輸入加密地址,以減少會(huì)話劫持風(fēng)險(xiǎn)。

HSTS響應(yīng)頭格式

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
  • max-age,單位是秒,用來告訴瀏覽器在指定時(shí)間內(nèi),這個(gè)網(wǎng)站必須通過HTTPS協(xié)議來訪問。也就是對于這個(gè)網(wǎng)站的HTTP地址,瀏覽器需要先在本地替換為HTTPS之后再發(fā)送請求。

  • includeSubDomains,可選參數(shù),如果指定這個(gè)參數(shù),表明這個(gè)網(wǎng)站所有子域名也必須通過HTTPS協(xié)議來訪問。

  • preload,可選參數(shù),一個(gè)瀏覽器內(nèi)置的使用HTTPS的域名列表。

HSTS Preload List

雖然HSTS可以很好的解決HTTPS降級攻擊,但是對于HSTS生效前的首次HTTP請求,依然無法避免被劫持。瀏覽器廠商們?yōu)榱私鉀Q這個(gè)問題,提出了HSTS Preload List方案:內(nèi)置一份可以定期更新的列表,對于列表中的域名,即使用戶之前沒有訪問過,也會(huì)使用HTTPS協(xié)議。

目前這個(gè)Preload List由Google Chrome維護(hù),Chrome、Firefox、Safari、IE 11和Microsoft Edge都在使用。如果要想把自己的域名加進(jìn)這個(gè)列表,首先需要滿足以下條件:

  • 擁有合法的證書(如果使用SHA-1證書,過期時(shí)間必須早于2016年);

  • 將所有HTTP流量重定向到HTTPS;

  • 確保所有子域名都啟用了HTTPS;

  • 輸出HSTS響應(yīng)頭:

  • max-age不能低于18周(10886400秒);

  • 必須指定includeSubdomains參數(shù);

  • 必須指定preload參數(shù);

即便滿足了上述所有條件,也不一定能進(jìn)入HSTS Preload List,更多信息可以查看:https://hstspreload.org/。

通過Chrome的chrome://net-internals/#hsts工具,可以查詢某個(gè)網(wǎng)站是否在Preload List之中,還可以手動(dòng)把某個(gè)域名加到本機(jī)Preload List。

HSTS缺點(diǎn)

HSTS并不是HTTP會(huì)話劫持的完美解決方案。用戶首次訪問某網(wǎng)站是不受HSTS保護(hù)的。這是因?yàn)槭状卧L問時(shí),瀏覽器還未收到HSTS,所以仍有可能通過明文HTTP來訪問。

如果用戶通過HTTP訪問HSTS保護(hù)的網(wǎng)站時(shí),以下幾種情況存在降級劫持可能:

  • 以前從未訪問過該網(wǎng)站

  • 最近重新安裝了其操作系統(tǒng)

  • 最近重新安裝了其瀏覽器

  • 切換到新的瀏覽器

  • 切換到一個(gè)新的設(shè)備,如:移動(dòng)電話

  • 刪除瀏覽器的緩存

  • 最近沒訪問過該站并且max-age過期了

解決這個(gè)問題目前有兩種方案:

方案一:在瀏覽器預(yù)置HSTS域名列表,就是上面提到的HSTS Preload List方案。該域名列表被分發(fā)和硬編碼到主流的Web瀏覽器。客戶端訪問此列表中的域名將主動(dòng)的使用HTTPS,并拒絕使用HTTP訪問該站點(diǎn)。

方案二:將HSTS信息加入到域名系統(tǒng)記錄中。但這需要保證DNS的安全性,也就是需要部署域名系統(tǒng)安全擴(kuò)展。

其它可能存在的問題

由于HSTS會(huì)在一定時(shí)間后失效(有效期由max-age指定),所以瀏覽器是否強(qiáng)制HSTS策略取決于當(dāng)前系統(tǒng)時(shí)間。大部分操作系統(tǒng)經(jīng)常通過網(wǎng)絡(luò)時(shí)間協(xié)議更新系統(tǒng)時(shí)間,如Ubuntu每次連接網(wǎng)絡(luò)時(shí),OS X Lion每隔9分鐘會(huì)自動(dòng)連接時(shí)間服務(wù)器。攻擊者可以通過偽造NTP信息,設(shè)置錯(cuò)誤時(shí)間來繞過HSTS。

解決方法是認(rèn)證NTP信息,或者禁止NTP大幅度增減時(shí)間。比如:Windows 8每7天更新一次時(shí)間,并且要求每次NTP設(shè)置的時(shí)間與當(dāng)前時(shí)間不得超過15小時(shí)。

支持HSTS瀏覽器

目前主流瀏覽器都已經(jīng)支持HSTS特性,具體可參考下面列表:

  • Google Chrome 4及以上版本

  • Firefox 4及以上版本

  • Opera 12及以上版本

  • Safari從OS X Mavericks起

  • Internet Explorer及以上版本

HSTS部署

服務(wù)器開啟HSTS的方法是:當(dāng)客戶端通過HTTPS發(fā)出請求時(shí),在服務(wù)器返回的超文本傳輸協(xié)議響應(yīng)頭中包含Strict-Transport-Security字段。非加密傳輸時(shí)設(shè)置的HSTS字段無效。

最佳的部署方案是部署在離用戶最近的位置,例如:架構(gòu)有前端反向代理和后端Web服務(wù)器,在前端代理處配置HSTS是最好的,否則就需要在Web服務(wù)器層配置HSTS。如果Web服務(wù)器不明確支持HSTS,可以通過增加響應(yīng)頭的機(jī)制。如果其他方法都失敗了,可以在應(yīng)用程序?qū)釉黾親STS。

HSTS啟用比較簡單,只需在相應(yīng)頭中加上如下信息:

Strict-Transport-Security: max-age=63072000; includeSubdomains;preload;

Strict-Transport-Security是Header字段名,max-age代表HSTS在客戶端的生效時(shí)間。?includeSubdomains表示對所有子域名生效。preload是使用瀏覽器內(nèi)置的域名列表。

HSTS策略只能在HTTPS響應(yīng)中進(jìn)行設(shè)置,網(wǎng)站必須使用默認(rèn)的443端口;必須使用域名,不能是IP。因此需要把HTTP重定向到HTTPS,如果明文響應(yīng)中允許設(shè)置HSTS頭,中間人攻擊者就可以通過在普通站點(diǎn)中注入HSTS信息來執(zhí)行DoS攻擊。

Apache上啟用HSTS

$ vim /etc/apache2/sites-available/hi-linux.conf# 開啟HSTS需要啟用headers模塊 LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so<VirtualHost *:80>ServerName www.hi-linux.comServerAlias hi-linux.com ...#將所有訪問者重定向到HTTPS,解決HSTS首次訪問問題。RedirectPermanent / https://www.hi-linux.com/ </VirtualHost> <VirtualHost 0.0.0.0:443> ... # 啟用HTTP嚴(yán)格傳輸安全Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" ... </VirtualHost>

重啟Apache服務(wù)

$ service apche2 restart

Nginx上啟用HSTS

$ vim /etc/nginx/conf.d/hi-linux.confserver {listen 443 ssl;server_name www.hi-linux.com;add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; ... }server {listen 80;server_name www.hi-linux.com;return 301 https://www.hi-linux.com$request_uri; ... }

重啟Nginx服務(wù)

$ service nginx restart

IIS啟用HSTS

要在IIS上啟用HSTS需要用到第三方模塊,具體可參考:https://hstsiis.codeplex.com/

測試設(shè)置是否成功

設(shè)置完成了后,可以用curl命令驗(yàn)證下是否設(shè)置成功。如果出來的結(jié)果中含有Strict-Transport-Security的字段,那么說明設(shè)置成功了。

$ curl -I https://www.hi-linux.com HTTP/1.1 200 OK Server: nginx Date: Sat, 27 May 2017 03:52:19 GMT Content-Type: text/html; charset=utf-8 ... Strict-Transport-Security: max-age=63072000; includeSubDomains; preload X-Frame-Options: deny X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff ...

對于HSTS以及HSTS Preload List,建議是只要不能確保永遠(yuǎn)提供HTTPS服務(wù),就不要啟用。因?yàn)橐坏〩STS生效,之前的老用戶在max-age過期前都會(huì)重定向到HTTPS,造成網(wǎng)站不能正確訪問。唯一的辦法是換新域名。

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的渗透测试web未设置http头 Strict Transport Security的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。