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


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

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,旁站就通通出來了。
目標站沒法子入侵不代表旁站也一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM