1. 程式人生 > >網路安全、Web安全、滲透測試之筆經面經總結(二)

網路安全、Web安全、滲透測試之筆經面經總結(二)

轉載地址:https://www.cnblogs.com/christychang/p/6593163.html

 

這篇文章涉及的知識點有如下幾方面:

1.SSL Strip(SSp)攻擊到底是什麼?

2.中間人攻擊——ARP欺騙的原理、實戰及防禦

3會話劫持原理

4.CC攻擊

5.新增時間戳防止重放攻擊

6.淺析HTTPS中間人攻擊與證書校驗

7.什麼是HttpOnly?

8.如何設計相對安全的cookie自動登入系統

9. SSH

10.伺服器作業系統的安全防範

11. 日誌檔案檢視

12.localStorage和sessionStorage區別

13.

簡單的查詢旁站

 

 

 

1.SSL Strip(SSp)攻擊到底是什麼?

SSL協議(Secure Socket Layer,安全套接層)主要是使用公開金鑰體制和X.509數字證書技術保護資訊傳輸的機密性和完整性,它不能保證資訊的不可抵賴性,主要適用於點對點之間的資訊傳輸,常用Web Server方式。

詳細解釋http://hover.blog.51cto.com/258348/218841

2.中間人攻擊——ARP欺騙的原理、實戰及防禦

什麼是閘道器

首先來簡單解釋一下什麼是閘道器,閘道器工作在OSI七層模型中的傳輸層或者應用層,用於高層協議的不同網路之間的連線,簡單地說,閘道器就好比是一個房間通向另一個房間的一扇門。

 ARP協議是什麼

ARP(Address Resolution Protocol)地址轉換協議,工作在OSI模型的資料鏈路層,在乙太網中,網路裝置之間互相通訊是用MAC地址而不是IP地址,ARP協議就是用來把IP地址轉換為MAC地址的。而RARP和ARP相反,它是反向地址轉換協議,把MAC地址轉換為IP地址。

假設A(192.168.1.2)與B(192.168.1.3)在同一區域網,A要和B實現通訊。A首先會發送一個數據包到廣播地址(192.168.1.255),該資料包中包含了源IP(A)、源MAC、目的IP(B)、目的MAC,這個資料包會被髮放給區域網中所有的主機,但是隻有B主機會回覆一個包含了源IP(B)、源MAC、目的IP(A)、目的MAC的資料包給A,同時A主機會將返回的這個地址儲存在ARP快取表中。

ARP欺騙原理

上面提到過了ARP快取表,在每臺主機都有一個ARP快取表,快取表中記錄了IP地址與MAC地址的對應關係,而區域網資料傳輸依靠的是MAC地址。

假設主機 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 閘道器 G 192.168.1.1; 在同一區域網,主機A和B通過閘道器G相互通訊,就好比A和B兩個人寫信,由郵遞員G送信,C永遠都不會知道A和B之間說了些什麼話。但是並不是想象中的那麼安全,在ARP快取表機制存在一個缺陷,就是當請求主機收到ARP應答包後,不會去驗證自己是否向對方主機發送過ARP請求包,就直接把這個返回包中的IP地址與MAC地址的對應關係儲存進ARP快取表中,如果原有相同IP對應關係,原有的則會被替換。

這樣C就有了偷聽A和B的談話的可能,繼續思考上面的例子:

C假扮郵遞員,首先要告訴A說:“我就是郵遞員” (C主機向A傳送構造好的返回包,源IP為G 192.168.1.1,源MAC為C自己的MAC地址),愚蠢的A很輕易的相信了,直接把“C是郵遞員”這個資訊記在了腦子裡;

C再假扮A,告訴郵遞員:“我就是A” (C向閘道器G傳送構造好的返回包,源IP為A 192.168.1.2,源MAC地址為自己的MAC地址),智商捉急的郵遞員想都沒想就相信了,以後就把B的來信送給了C,C當然就可以知道A和B之間聊了些什麼

上面ABCG的故事就是ARP雙向欺騙的原理了

ARP單向欺騙就更好理解了,C只向A傳送一個返回包,告訴A:G 192.168.1.1 的MAC地址為 5c-63-bf-79-1d-fa(一個錯誤的mac地址),A把這個資訊記錄在了快取表中,而G的快取表不變,也就是說,A把資料包給了C,而G的包還是給A,這樣就是ARP單向欺騙了。

3會話劫持原理

什麼是會話劫持

在現實生活中,比如你去市場買菜,在交完錢後你要求先去幹一些別的事情,稍候再來拿菜;如果這個時候某個陌生人要求把菜拿走,賣菜的人會把菜給陌生人嗎?!當然,這只是一個比喻,但這恰恰就是會話劫持的喻意。所謂會話,就是兩臺主機之間的一次通訊。例如你Telnet到某臺主機,這就是一次Telnet會話;你瀏覽某個網站,這就是一次HTTP會話。而會話劫持(Session Hijack),就是結合了嗅探以及欺騙技術在內的攻擊手段。例如,在一次正常的會話過程當中,攻擊者作為第三方參與到其中,他可以在正常資料包中插入惡意資料,也可以在雙方的會話當中進行簡聽,甚至可以是代替某一方主機接管會話。我們可以把會話劫持攻擊分為兩種型別:1)中間人攻擊(Man In The Middle,簡稱MITM),2)注射式攻擊(Injection);並且還可以把會話劫持攻擊分為兩種形式:1)被動劫持,2)主動劫持;被動劫持實際上就是在後臺監視雙方會話的資料流,叢中獲得敏感資料;而主動劫持則是將會話當中的某一臺主機“踢”下線,然後由攻擊者取代並接管會話,這種攻擊方法危害非常大,攻擊者可以做很多事情,比如“cat etc/master.passwd”(FreeBSD下的Shadow檔案)。圖1為會話劫持示意圖。

 

MITM攻擊簡介

這也就是我們常說的“中間人攻擊”,在網上討論比較多的就是SMB會話劫持,這也是一個典型的中間人攻擊。要想正確的實施中間人攻擊,攻擊者首先需要使用ARP欺騙或DNS欺騙,將會話雙方的通訊流暗中改變,而這種改變對於會話雙方來說是完全透明的。關於ARP欺騙黑客防線介紹的比較多,網上的資料也比較多,我就不在多說了,我只簡單談談DNS欺騙。DNS(Domain Name System),即域名伺服器,我們幾乎天天都要用到。對於正常的DNS請求,例如在瀏覽器輸入www.hacker.com.cn,然後系統先檢視Hosts檔案,如果有相對應的IP,就使用這個IP地址訪問網站(其實,利用Hosts檔案就可以實現DNS欺騙);如果沒有,才去請求DNS伺服器;DNS伺服器在接收到請求之後,解析出其對應的IP地址,返回給我本地,最後你就可以登陸到黑客防線的網站。而DNS欺騙則是,目標將其DNS請求傳送到攻擊者這裡,然後攻擊者偽造DNS響應,將正確的IP地址替換為其他IP,之後你就登陸了這個攻擊者指定的IP,而攻擊者早就在這個IP中安排好了惡意網頁,可你卻在不知不覺中已經被攻擊者下了“套”……DNS欺騙也可以在廣域網中進行,比較常見的有“Web伺服器重定向”、“郵件伺服器重定向”等等。但不管是ARP欺騙,還是DNS欺騙,中間人攻擊都改變正常的通訊流,它就相當於會話雙方之間的一個透明代理,可以得到一切想知道的資訊,甚至是利用一些有缺陷的加密協議來實現。

 

注射式攻擊簡介

這種方式的會話劫持比中間人攻擊實現起來簡單一些,它不會改變會話雙方的通訊流,而是在雙方正常的通訊流插入惡意資料。在注射式攻擊中,需要實現兩種技術:1)IP欺騙,2)預測TCP序列號。如果是UDP協議,只需偽造IP地址,然後傳送過去就可以了,因為UDP沒有所謂的TCP三次握手,但基於UDP的應用協議有流控機制,所以也要做一些額外的工作。對於IP欺騙,有兩種情況需要用到:1)隱藏自己的IP地址;2)利用兩臺機器之間的信任關係實施入侵。在Unix/Linux平臺上,可以直接使用Socket構造IP包,在IP頭中填上虛假的IP地址,但需要root許可權;在Windows平臺上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系統,首先開啟一個Raw Socket(原始套接字),然後自己編寫IP頭及其他資料。

4.CC攻擊

攻擊者藉助代理伺服器生成指向受害主機的合法請求,實現DDOS,和偽裝就叫:CC(ChallengeCollapsar)。

CC主要是用來攻擊頁面的。大家都有這樣的經歷,就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,開啟頁面的速度會比較慢,訪問的人越多,論壇的頁面越多,資料庫就越大,被訪問的頻率也越高,佔用的系統資源也就相當可觀。

一個靜態頁面不需要伺服器多少資源,甚至可以說直接從記憶體中讀出來發給你就可以了,但是論壇就不一樣了,我看一個帖子,系統需要到資料庫中判斷我是否有讀帖子的許可權,如果有,就讀出帖子裡面的內容,顯示出來——這裡至少訪問了2次資料庫,如果資料庫的資料容量有200MB大小,系統很可能就要在這200MB大小的資料空間搜尋一遍,這需要多少的CPU資源和時間?如果我是查詢一個關鍵字,那麼時間更加可觀,因為前面的搜尋可以限定在一個很小的範圍內,比如使用者許可權只查使用者表,帖子內容只查帖子表,而且查到就可以馬上停止查詢,而搜尋肯定會對所有的資料進行一次判斷,消耗的時間是相當的大。

CC就是充分利用了這個特點,模擬多個使用者(多少執行緒就是多少使用者)不停的進行訪問(訪問那些需要大量資料操作,就是需要大量CPU時間的頁面).這一點用一個一般的效能測試軟體就可以做到大量模擬使用者併發。

5.新增時間戳防止重放攻擊

如過客戶端在向服務端介面進行請求,如果請求資訊進行了加密處理,被第三方擷取到請求包,雖然第三方無法解密獲取其中的資料,但是可以使用該請求包進行重複的請求操作。如果服務端不進行防重放攻擊,就會引數伺服器壓力增大,資料紊亂的後果。而使用新增時間戳的方式可以解決這一問題。。

6.淺析HTTPS中間人攻擊與證書校驗

http://www.2cto.com/article/201607/523509.html

證書是https裡非常重要的主體,可用來識別對方是否可信,以及用其公鑰做金鑰交換。可以看見證書裡面包含證書的頒發者,證書的使用者,證書的公鑰,頒發者的簽名等資訊。其中Issuer Name是簽發此證書的CA名稱,用來指定簽發證書的CA的可識別的唯一名稱(DN, Distinguished Name),用於證書鏈的認證,這樣通過各級實體證書的驗證,逐漸上溯到鏈的終止點,即可信任的根CA,如果到達終點在自己的信任列表內未發現可信任的CA則認為此證書不可信。

https握手過程的證書校驗環節就是為了識別證書的有效性唯一性等等,所以嚴格意義上來說https下不存在中間人攻擊,存在中間人攻擊的前提條件是沒有嚴格的對證書進行校驗,或者人為的信任偽造證書,下面一起看下幾種常見的https“中間人攻擊”場景。

證書未校驗

由於客戶端沒有做任何的證書校驗,所以此時隨意一張證書都可以進行中間人攻擊,可以使用burp裡的這個模組進行中間人攻擊。

通過瀏覽器檢視實際的https證書,是一個自簽名的偽造證書。

部分校驗

做了部分校驗,例如在證書校驗過程中只做了證書域名是否匹配的校驗,可以使用burp的如下模組生成任意域名的偽造證書進行中間人攻擊。

實際生成的證書效果,如果只做了域名、證書是否過期等校驗可輕鬆進行中間人攻擊(由於chrome是做了證書校驗的所以會提示證書不可信任)。

證書鏈校驗

如果客戶端對證書鏈做了校驗,那麼攻擊難度就會上升一個層次,此時需要人為的信任偽造的證書或者安裝偽造的CA公鑰證書從而間接信任偽造的證書,可以使用burp的如下模組進行中間人攻擊。

可以看見瀏覽器是會報警告的,因為burp的根證書PortSwigger CA並不在瀏覽器可信任列表內,所以由它作為根證書籤發的證書都是不能通過瀏覽器的證書校驗的,如果將PortSwigger CA匯入系統設定為可信任證書,那麼瀏覽器將不會有任何警告。

手機客戶端Https資料包抓取

上述第一、二種情況不多加贅述,第三種情況就是我們經常使用的抓手機應用https資料包的方法,即匯入代理工具的公鑰證書到手機裡,再進行https資料包的抓取。匯入手機的公鑰證書在android平臺上稱之為受信任的憑據,

可以看見是Issuer和Subject一樣的自簽名CA公鑰證書,另外我們也可以通過證書型別就可以知道此為公鑰證書,crt、der格式的證書不支援儲存私鑰或證書路徑(有興趣的同學可查詢證書相關資訊)。匯入CA公鑰證書之後,參考上文的證書校驗過程不難發現通過此方式能通過證書鏈校驗,從而形成中間人攻擊,客戶端使用代理工具的公鑰證書加密隨機數,代理工具使用私鑰解密並計算得到對稱加密金鑰,再對資料包進行解密即可抓取明文資料包。

中間人攻擊原理

一直在說中間人攻擊,那麼中間人攻擊到底是怎麼進行的呢,下面我們通過一個流行的MITM開源庫mitmproxy來分析中間人攻擊的原理。中間人攻擊的關鍵在於https握手過程的ClientKeyExchange,由於pre key交換的時候是使用伺服器證書裡的公鑰進行加密,如果用的偽造證書的公鑰,那麼中間人就可以解開該密文得到pre_master_secret計算出用於對稱加密演算法的master_key,從而獲取到客戶端傳送的資料;然後中間人代理工具再使用其和服務端的master_key加密傳輸給服務端;同樣的伺服器返回給客戶端的資料也是經過中間人解密再加密,於是完整的https中間人攻擊過程就形成了,一圖勝千言,來吧。

App證書校驗

通過上文第一和第二部分的說明,相信大家已經對https有個大概的瞭解了,那麼問題來了,怎樣才能防止這些“中間人攻擊”呢?

app證書校驗已經是一個老生常談的問題了,但是市場上還是有很多的app未做好證書校驗,有些只做了部分校驗,例如檢查證書域名是否匹配證書是否過期,更多數的是根本就不做校驗,於是就造成了中間人攻擊。做證書校驗需要做完全,只做一部分都會導致中間人攻擊,對於安全要求並不是特別高的app可使用如下校驗方式:

檢視證書是否過期 伺服器證書上的域名是否和伺服器的實際域名相匹配, 校驗證書鏈。

7什麼是HttpOnly?

 如果您在cookie中設定了HttpOnly屬性,那麼通過js指令碼將無法讀取到cookie資訊,這樣能有效的防止XSS攻擊

8如何設計相對安全的cookie自動登入系統

http://blog.sina.com.cn/s/blog_90cbd0ab0101ew0p.html

這種技術其實就是基於 cookie的自動登入,使用者登入的時候會把需要驗證的token寫到cookie裡面,當用戶session失效的時候,token會通過cookie 傳送給伺服器端,伺服器端解析token判斷是否已經登入;這裡面的token如何設計是關鍵,到底存什麼資料才能保證系統的安全性呢?

有些新手可能會想,把使用者id和password直接md5加密存到cookie,這樣做是最糟糕的設計,使用者的敏感資訊直接暴露出來,黑客可以偽造別人的id進行嘗試性登入,可以想象黑客知道了admin賬號的id,試過幾千幾萬次,密碼和加密演算法很可能破解出來。

token要相對安全,不應該是簡單的使用者名稱和密碼md5加密,使用者密碼其實完全可以不用存進去,分兩步來做:

1)token 是一些資訊的組合,使用者id+使用者名稱+expires過期時間+ip地址+salt,具體加密演算法最好自己寫,不能使是常見的加密函式(md5),當然這 個加密函式必須可逆,這個token我們同時要儲存在使用者表資料庫裡面,set cookie的時候記得http only;

2) 伺服器端拿到cookie之後,進行逆解析,這個時候我們要驗證如下資訊:cookie是否過期、ip地址是否發生變化、使用者id和使用者名稱是否存在;使用者 存在之後,我們再拿這個token跟第一步存在資料庫中的token進行比較,看是否相等,如果不等說明token已經過期,這樣做可保證每次使用者登入之 後token值都不一樣,之前用過的token都會失效;

9 SSH

SSH 為 Secure Shell 的縮寫,由 IETF 的網路小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠端管理過程中的資訊洩露問題。

10伺服器作業系統的安全防範

停止執行不需要的軟體;(很可能成為外部攻擊的入口)

定期實施漏洞防範措施;(選定軟體時確認軟體的升級狀況,確定打補丁方式,關注各種漏洞資訊,確認漏洞後調查補丁狀況以及防範對策,並制定對應計劃)

對不需要對外公開的埠或者服務加以訪問限制;(通過埠掃描確認各埠服務狀態)

提高認證強度。

11 日誌檔案檢視

windows7的日誌資訊檔案存放在C:windows-》System32-》winevt-》Logs資料夾下,對應的日誌檔案也有很多,並且檔案格式都是evtx格式的檔案,直接用Eventvwr.msc這個命令啟用事件檢視器來檢視即可。

或者點選開始然後單擊控制面板進入win7控制面板,單擊“系統和安全”選項。在右下方找到“檢視事件日誌”進入windows系統日誌檢視器。

在日誌檢視器左側可以選擇檢視不同型別日誌,一般系統報錯應該在“windows日誌/系統”中找相關資訊。雙擊單條日誌可以檢視詳細資訊,而右側欄可以對日誌進行刪除、複製等操作。

12.localStorage和sessionStorage區別

http://www.cnblogs.com/tylerdonet/p/4833681.html

http://www.2cto.com/article/201505/401601.html

localStorage和sessionStorage一樣都是用來儲存客戶端臨時資訊的物件。

他們均只能儲存字串型別的物件(雖然規範中可以儲存其他原生型別的物件,但是目前為止沒有瀏覽器對其進行實現)。

localStorage生命週期是永久,這意味著除非使用者顯示在瀏覽器提供的UI上清除localStorage資訊,否則這些資訊將永遠存在。

sessionStorage生命週期為當前視窗或標籤頁,一旦視窗或標籤頁被永久關閉了,那麼所有通過sessionStorage儲存的資料也就被清空了。

不同瀏覽器無法共享localStorage或sessionStorage中的資訊。相同瀏覽器的不同頁面間可以共享相同的 localStorage(頁面屬於相同域名和埠),但是不同頁面或標籤頁間無法共享sessionStorage的資訊。這裡需要注意的是,頁面及標 籤頁僅指頂級視窗,如果一個標籤頁包含多個iframe標籤且他們屬於同源頁面,那麼他們之間是可以共享sessionStorage的。

13簡單的查詢旁站

百度 域名查詢IP 開啟可行的網頁,在裡面輸入目標域名,搜尋出伺服器的IP,然後百度 IP反查域名 選擇一個可行的網頁開啟,輸入剛剛查詢到的IP,旁站就通通出來了。
目標站沒法子入侵不代表旁站也一樣。