web安全常見攻擊解讀--DDos、cc、sql注入、xss、CSRF
一,DDos
https://www.cnblogs.com/sochishun/p/7081739.html#4111858
http://nic.swu.edu.cn/s/nic/thyt/20180604/2555404.html
1.1 DDos介紹
DDoS是英文Distributed Denial of Service的縮寫,意即“分布式拒絕服務”。分布式拒絕服務攻擊發起后,攻擊網絡包就會從很多DOS攻擊源(俗稱肉雞)猶如洪水般涌向受害主機,從而把合法用戶的網絡包淹沒,導致合法用戶無法正常訪問服務器的網絡資源,因此拒絕服務攻擊又被稱之為“洪水攻擊”,常見的DDOS攻擊手段有SYN Flood、UDP Flood、ICMP Flood、HTTP Flood、NTP Flood、Connections Flood、Script Flood、DNS Query Flood等。
什么是DDoS攻擊?
讓我們來舉個例子,假設你開了一家店,生意還不錯。
此時隔壁家生意蕭條的店主盯上了你。
于是他雇傭來了一群鬧事者上門,裝成要買東西的顧客。
你完全應接不暇,而且他們老找你問這問那,東看西看,就是不買東西,還賴著不走!
而真正的顧客連進店的地方都沒有了!這就是所謂的DDoS攻擊——?
一群“惡意訪問”、“堵店門”、“占空間”、還“調戲店員”的非法流量。
1.2 DDos常用攻擊方式
1. SYN Flood:
利用TCP協議的原理,這種攻擊方法是經典最有效的DDOS方法,可通殺各種系統的網絡服務,主要是通過向受害主機發送大量偽造源IP和源端口的SYN或ACK 包,導致主機的緩存資源被耗盡或忙于發送回應包而造成拒絕服務。
TCP通道在建立以前,需要三次握手:
a. 客戶端發送一個包含SYN標志的TCP報文, 同步報文指明客戶端所需要的端口號和TCP連接的初始序列號
b. 服務器收到SYN報文之后,返回一個SYN+ ACK報文,表示客戶端請求被接受,TCP初始序列號加1
c.客戶端也返回一個確認報文ACK給服務器,同樣TCP序列號加1
d. 如果服務器端沒有收到客戶端的確認報文ACK,則處于等待狀態,將該客戶IP加入等待隊列,然后輪訓發送SYN+ACK報文
所以攻擊者可以通過偽造大量的TCP握手請求,耗盡服務器端的資源。
2. HTTP Flood:俗稱cc攻擊
針對系統的每個Web頁面,或者資源,或者Rest API,用大量肉雞,發送大量http request。這種攻擊主要是針對存在ASP、JSP、PHP、CGI等腳本程序,并調用MSSQLServer、MySQLServer、Oracle等數據庫的網站系統而設計的,特征是和服務器建立正常的TCP連接,并不斷的向腳本程序提交查詢、列表等大量耗費數據庫資源的調用,典型的以小博大的攻擊方法。缺點是對付只有靜態頁面的網站效果會大打折扣。
3. 慢速攻擊:
Http協議中規定,HttpRequest以\r\n\r\n結尾來表示客戶端發送結束。攻擊者打開一個Http 1.1的連接,將Connection設置為Keep-Alive, 保持和服務器的TCP長連接。然后始終不發送\r\n\r\n, 每隔幾分鐘寫入一些無意義的數據流, 拖死機器。
4. P2P攻擊:
每當網絡上出現一個熱門事件,比如XX門, 精心制作一個種子, 里面包含正確的文件下載, 同時也包括攻擊目標服務器的IP。這樣,當很多人下載的時候, 會無意中發起對目標服務器的TCP連接。
5. NTP Flood:
NTP是標準的基于UDP協議傳輸的網絡時間同步協議,由于UDP協議的無連接性,方便偽造源地址。攻擊者使用特殊的數據包,也就是IP地址指向作為反射器的服務器,源IP地址被偽造成攻擊目標的IP,反射器接收到數據包時就被騙了,會將響應數據發送給被攻擊目標,耗盡目標網絡的帶寬資源。一般的NTP服務器都有很大的帶寬,攻擊者可能只需要1Mbps的上傳帶寬欺騙NTP服務器,就可給目標服務器帶來幾百上千Mbps的攻擊流量。因此,“問-答”方式的協議都可以被反射型攻擊利用,將質詢數據包的地址偽造為攻擊目標地址,應答的數據包就會都被發送至目標,一旦協議具有遞歸效果,流量就被顯著放大了,堪稱一種“借刀殺人”的流量型攻擊。
1.3 DDos攻擊類型判斷
DDOS攻擊現象判定方法
1.SYN類攻擊判斷:
A.CPU占用很高;
B.網絡連接狀態:netstat –na,若觀察到大量的SYN_RECEIVED的連接狀態;
C.網線插上后,服務器立即凝固無法操作,拔出后有時可以恢復,有時候需要重新啟動機器才可恢復。
2.CC類攻擊判斷:
A.網站出現service unavailable提示;
B.CPU占用率很高;
C.網絡連接狀態:netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條;
D.用戶無法訪問網站頁面或打開過程非常緩慢,軟重啟后短期內恢復正常,幾分鐘后又無法訪問。
3.UDP類攻擊判斷:
A.觀察網卡狀況 每秒接受大量的數據包;
B.網絡狀態:netstat –na TCP信息正常。
4.TCP洪水攻擊判斷:
A.CPU占用很高;
B.netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條
1.4 DDoS攻擊防御方法:
1. 過濾不必要的服務和端口:
可以使用Inexpress、Express、Forwarding等工具來過濾不必要的服務和端口,即在路由器上過濾假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以針對封包Source IP和Routing Table做比較,并加以過濾。只開放服務端口成為目前很多服務器的流行做法,例如WWW服務器那么只開放80而將其他所有端口關閉或在防火墻上做阻止策略。
2. 異常流量的清洗:
通過DDOS硬件防火墻對異常流量的清洗過濾,通過數據包的規則過濾、數據流指紋檢測過濾、及數據包內容定制過濾等頂尖技術能準確判斷外來訪問流量是否正常,進一步將異常流量禁止過濾。單臺負載每秒可防御800-927萬個syn攻擊包。
3. 分布式集群防御:
這是目前網絡安全界防御大規模DDOS攻擊的最有效辦法。分布式集群防御的特點是在每個節點服務器配置多個IP地址(負載均衡),并且每個節點能承受不低于10G的DDOS攻擊,如一個節點受攻擊無法提供服務,系統將會根據優先級設置自動切換另一個節點,并將攻擊者的數據包全部返回發送點,使攻擊源成為癱瘓狀態。
4. 高防智能DNS解析:
高智能DNS解析系統與DDOS防御系統的完美結合,為企業提供對抗新興安全威脅的超級檢測功能。智能根據用戶的上網路線將DNS解析請求解析到用戶所屬網絡的服務器。
5. 接入云高防及使用CDN加速
二,CC攻擊
2.1 CC攻擊介紹
CC攻擊(Challenge Collapsar)是DDOS(分布式拒絕服務)的一種,前身名為Fatboy攻擊,也是一種常見的網站攻擊方法。攻擊者通過代理服務器或者肉雞向向受害主機不停地發大量數據包,造成對方服務器資源耗盡,一直到宕機崩潰。相比其它的DDOS攻擊CC似乎更有技術含量一些。這種攻擊你見不到真實源IP,見不到特別大的異常流量,但造成服務器無法進行正常連接。最讓站長們憂慮的是這種攻擊技術含量低,利用更換IP代理工具和一些IP代理一個初、中級的電腦水平的用戶就能夠實施攻擊。
2.2 CC攻擊防御方法
1. 利用Session做訪問計數器:
利用Session針對每個IP做頁面訪問計數器或文件下載計數器,防止用戶對某個頁面頻繁刷新導致數據庫頻繁讀取或頻繁下載某個文件而產生大額流量。文件下載不要直接使用下載地址,才能在服務端代碼中做CC攻擊的過濾處理
2. 把網站做成靜態頁面:
大量事實證明,把網站盡可能做成靜態頁面,不僅能大大提高抗攻擊能力,而且還給駭客入侵帶來不少麻煩,至少到現在為止關于HTML的溢出還沒出現,門戶網站主要都是靜態頁面若你非需要動態腳本調用,那就把它弄到另外一臺單獨主機去,免的遭受攻擊時連累主服務器。
3. 增強操作系統的TCP/IP棧
linux系統級別安全防御,開啟后可能用影響服務器負載性能,具有兩面性。
4. 在存在多站的服務器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。
CC的防御要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,設置訪問數據庫請求都必須一個隨機參數在Session里面,全是靜態頁面,攻擊就會沒有效果。代碼層的防御需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個服務器的影響!
5. 服務器前端加CDN中轉
(免費的有百度云加速、360網站衛士、青牛云,又拍云等),如果資金充裕的話,可以購買高防的盾機,用于隱藏服務器真實IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服務器上部署的其他域名也不能使用真實IP解析,全部都使用CDN來解析。 另外,防止服務器對外傳送信息泄漏IP地址,最常見的情況是,服務器不要使用發送郵件功能,因為郵件頭會泄漏服務器的IP地址。如果非要發送郵件,可以通過第三方代理(例如sendcloud)發送,這樣對外顯示的IP是代理的IP地址。總之,只要服務器的真實IP不泄露,10G以下小流量DDOS的預防花不了多少錢,免費的CDN就可以應付得了。如果攻擊流量超過20G,那么免費的CDN可能就頂不住了,需要購買一個高防的盾機來應付了,而服務器的真實IP同樣需要隱藏。
三,sql注入
https://baijiahao.baidu.com/s?id=1629045600845343519&wfr=spider&for=pc
https://www.cnblogs.com/binyao/p/4900393.html
3.1 sql注入介紹
什么是SQL注入式攻擊
所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊它通過將任意SQL代碼插入數據庫查詢,使攻擊者能夠完全控制Web應用程序后面的數據庫服務器。攻擊者可以使用SQL注入漏洞繞過應用程序安全措施;可以繞過網頁或Web應用程序的身份驗證和授權,并檢索整個SQL數據庫的內容;還可以使用SQL注入來添加,修改和刪除數據庫中的記錄。
3.2 sql注入攻擊類型
1 帶內注入:
這是典型的攻擊,攻擊者可以通過相同的通信通道發起攻擊并獲得結果。這是通過兩種帶內技術完成的:
● 基于錯誤的SQL注入:從顯示的錯誤消息中獲取有關數據庫的信息
● 基于聯合的SQL注入:依賴于攻擊者能夠將UNION ALL被盜信息的結果與合法結果連接起來。
這兩種技術都依賴于攻擊者修改應用程序發送的SQL,以及瀏覽器中顯示的錯誤和返回的信息。
如果應用程序開發人員或數據庫開發人員無法正確地參數化他們在查詢中使用的值,那么它會成功。兩者都是試錯法,可以檢測到錯誤。
2 盲注入:
也稱為推理SQL注入,盲注入攻擊不會直接從目標數據庫中顯示數據;相反,攻擊者會仔細檢查行為中的間接線索。HTTP響應中的詳細信息,某些用戶輸入的空白網頁以及數據庫響應某些用戶輸入需要多長時間,這些都可以是線索,具體取決于攻擊者的目標。
3 帶外注入:
這種攻擊有點復雜,當攻擊者無法在單個直接查詢 - 響應攻擊中實現其目標時,攻擊者可能會使用此攻擊。通常,攻擊者會制作SQL語句,這些語句在呈現給數據庫時會觸發數據庫系統創建與攻擊者控制的外部服務器的連接。以這種方式,攻擊者可以收集數據或可能控制數據庫的行為。二階注入就是一種帶外注入攻擊。在這種情況下,攻擊者將提供SQL注入,該注入將由數據庫系統的單獨行為存儲和執行。當二級系統行為發生時(它可能類似于基于時間的作業或由其他典型管理員或用戶使用數據庫觸發的某些事情)并且執行攻擊者的SQL注入,那就是當“伸出”到系統時攻擊者控制發生了。
3.3 防御sql注入
1,不使用動態sql
2,將用戶登錄名稱、密碼等敏感數據加密保存
3,嚴格限制數據庫用戶權限
4,避免直接向用戶顯示數據庫錯誤
5,檢查用戶輸入的合法性
四 xss跨站攻擊
https://www.cnblogs.com/firstdream/p/7760490.html
4.1 xss介紹
跨站腳本攻擊(Cross-site scripting,通常簡稱為XSS)發生在客戶端,可被用于進行竊取隱私、釣魚欺騙、偷取密碼、傳播惡意代碼等攻擊行為。惡意的攻擊者將對客戶端有危害的代碼放到服務器上作為一個網頁內容, 使得其他網站用戶在觀看此網頁時,這些代碼注入到了用戶的瀏覽器中執行,使用戶受到攻擊。一般而言,利用跨站腳本攻擊,攻擊者可竊會話COOKIE從而竊取網站用戶的隱私,包括密碼。XSS攻擊使用到的技術主要為HTML和Javascript,也包括VBScript和ActionScript等。XSS攻擊對WEB服務器雖無直接危害,但是它借助網站進行傳播,使網站用戶受到攻擊,導致用戶帳號被竊取,從而對網站也產生了較嚴重的危害。
4.2 xss漏洞修復
一:避免XSS的方法之一主要是將用戶所提供的內容輸入輸出進行過濾 ,可以利用下面這些函數對出現xss漏洞的參數進行過濾
1.PHP的htmlentities()或是htmlspecialchars()
2.Python的cgi.escape()
3.ASP的Server.HTMLEncode()
4.ASP.NET的Server.HtmlEncode()或功能更強的Microsoft Anti-Cross Site Scripting Library
5.Java的xssprotect(Open Source Library)
6.Node.js的node-validator
二:使用開源的漏洞修復插件。
五 CSRF跨站請求偽造
http://www.lxweimin.com/p/67408d73c66d
5.1 CSRF介紹
CSRF攻擊的全稱是跨站請求偽造( cross site request forgery),是一種對網站的惡意利用,盡管聽起來跟XSS跨站腳本攻擊有點相似,但事實上CSRF與XSS差別很大,XSS利用的是站點內的信任用戶,而CSRF則是通過偽裝來自受信任用戶的請求來利用受信任的網站。你可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義向第三方網站發送惡意請求。?CRSF能做的事情包括利用你的身份發郵件、發短信、進行交易轉賬等,甚至盜取你的賬號
5.2 CSRF攻擊原理過程
1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
2. 在用戶信息通過驗證后,網站A產生Cookie信息并返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;
3. 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
4. 網站B接收到用戶請求后,返回一些攻擊性代碼,并發出一個請求要求訪問第三方站點A;
5. 瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發出請求。
網站A并不知道該請求其實是由B發起的,所以會根據用戶C的Cookie信息以C的權限處理該請求,導致來自網站B的惡意代碼被執行。
5.3 CSRF防御
1、盡量使用POST,限制GET
GET接口太容易被拿來做CSRF攻擊,接口最好限制為POST使用,GET則無效,降低攻擊風險。當然POST并不是萬無一失,攻擊者只要構造一個form就可以,但需要在第三方頁面做,這樣就增加暴露的可能性。
2、將cookie設置為HttpOnly
CRSF攻擊很大程度上是利用了瀏覽器的cookie,為了防止站內的XSS漏洞盜取cookie,需要在cookie中設置“HttpOnly”屬性,這樣通過程序(如JavaScript腳本、Applet等)就無法讀取到cookie信息,避免了攻擊者偽造cookie的情況出現。在Java的Servlet的API中設置cookie為HttpOnly的代碼如:response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly")
3、增加token
CSRF攻擊之所以能夠成功,是因為攻擊者可以偽造用戶的請求,該請求中所有的用戶驗證信息都存在于cookie中,因此攻擊者可以在不知道用戶驗證信息的情況下直接利用用戶的cookie來通過安全驗證。由此可知,抵御CSRF攻擊的關鍵在于:在請求中放入攻擊者所不能偽造的信息,并且該信息不存在于cookie之中系統開發人員可以在HTTP請求中以參數的形式加入一個隨機產生的token,并在服務端進行token校驗,如果請求中沒有token或者token內容不正確,則認為是CSRF攻擊而拒絕該請求。
4、驗證 HTTP Referer 字段
根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。在通常情況下,訪問一個安全受限頁面的請求來自于同一個網站
轉載于:https://www.cnblogs.com/superleedo/p/11043780.html
? ? 有服務器需求請加QQ1911624872咨詢