一、常見Web安全攻防解析之SQL注入

當前,網絡安全已被提升到國家戰略的高度,成為影響國家安全、社會穩定至關重要的因素之一。

目前互聯網上接連爆發的應用安全漏洞,使數據安全與個人隱私受到了前所未有的挑戰。銀行數據安全關係國家經濟命脈,事關國家安全穩定。如何才能更好地保護我們的數據?本系列專題就來分析幾種常見的攻擊的類型以及防禦的方法。

SQL注入攻擊就是黑客最常用的數據庫入侵方式之一。

常見Web安全攻防解析之123

所謂SQL注入,就是通過把定製化的SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,控制某個Web應用的數據庫服務器,進而未經授權地訪問、修改或刪除各種數據。

而造成 SQL 注入的原因是因為程序沒有有效的轉義過濾用戶的輸入,使攻擊者成功的向服務器提交惡意的 SQL 查詢代碼,程序在接收後錯誤地將攻擊者的輸入作為查詢語句的一部分執行,導致原始的查詢邏輯被改變,額外地執行了攻擊者精心構造的惡意代碼。

SQL注入攻擊如何運作的?

一次SQL注入的過程包括以下幾個過程:

1、獲取用戶請求參數

2、拼接到代碼當中

3、SQL語句按照我們構造參數的語義執行成功

所謂的萬能鑰匙,本質上就是SQL注入的一種利用方式。

常見Web安全攻防解析之123

一個常見的登錄頁面,後端的SQL語句可能是如下這樣的:

1 let querySQL = ‘
2 SELECT *
3 FROM user
4 WHERE username='${username}'
5 AND psw='${password}'
6 `;

按照我們的預想,輸入用戶名密碼後執行的SQL語句如下:

1 SELECT * FROM user WHERE username='admin' AND psw='password'

但如果有一個惡意攻擊者輸入的用戶名是 admin' --,密碼隨意輸入,實際執行的SQL語句將是:

1 SELECT * FROM user WHERE username='admin' --‘AND psw='xxxx'

在SQL中,--是閉合和註釋的意思,--註釋掉後面的內容,實際的查詢語句被篡改為:

1 SELECT * FROM user WHERE username='admin'

如此便可以直接登錄系統,這就是SQL注入。

又比如,惡意攻擊者隨意在用戶名或密碼處輸入' or 1=1 ; --,由於or 1=1 一定返回true,會被程序無條件接受為有效的輸入,便會跳過用戶驗證直接登錄成功。

SQL注入的危害

1、獲取數據庫信息

2、管理員後臺用戶名和密碼

3、獲取其他數據庫敏感信息:用戶名、密碼、手機號碼、身份證、銀行卡信息……

4、整個數據庫:拖庫

5、獲取服務器權限

6、植入Webshell,獲取服務器後門

7、讀取服務器敏感文件

SQL注入的必備條件

1、可以控制輸入的數據

2、服務器要執行的代碼拼接了控制的數據

SQL注入的本質

數據和代碼未分離,即數據被當做了代碼來執行。

如何防範SQL注入攻擊?

1、輸入驗證

檢查用戶輸入的合法性,對進入數據庫的特殊字符(',",\,<,>,&,*,; 等)進行轉義處理,或編碼轉換,確信輸入的內容只包含合法的數據。數據檢查應當在客戶端和服務器端都執行,之所以要執行服務器端驗證,是為了彌補客戶端驗證機制脆弱的安全性。

2、錯誤消息處理

防範SQL注入,還要避免出現一些詳細的錯誤消息,因為可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句等。

3、加密處理

將用戶登錄名稱、密碼等數據加密保存。加密用戶輸入的數據,然後再將它與數據庫中保存的數據比較,這相當於對用戶輸入的數據進行了“消毒”處理,用戶輸入的數據不再對數據庫有任何特殊的意義,從而也就防止了注入SQL命令。

4、存儲過程來執行所有的查詢

SQL參數的傳遞方式將防止利用單引號和連字符實施注入。此外,它還使得數據庫權限可以限制到只允許特定的存儲過程執行,所有的用戶輸入必須遵從被調用的存儲過程的安全上下文,這樣就很難再發生注入式了。

5、最小權限原則

通過對數據庫強制執行最小權限原則,來減緩SQL注入漏洞的影響。不使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。

縱然SQL注入攻擊是網絡犯罪分子非常流行的攻擊方法,但是如果我們能夠通過採取諸如:數據加密,執行安全測試,以及及時更新補丁等適當的預防措施,就能夠在某種程度上實現對數據的安全保護。

二、常見Web安全攻防解析之URL跳轉漏洞

互聯網時代,數據安全和個人隱私都受到了前所未有的挑戰,各種Web安全攻防技術層出不窮,今天我們繼續分析常見的安全攻擊類型——URL跳轉漏洞。

URL跳轉漏洞概念

URL跳轉漏洞,即藉助未驗證的URL跳轉,將應用程序引導到不安全的第三方區域,從而導致的安全問題。

URL跳轉漏洞攻擊原理

黑客利用URL跳轉漏洞來誘導安全意識低的用戶點擊,導致用戶信息洩露或者資金的流失。其原理是黑客構建惡意鏈接(鏈接需要進行偽裝,儘可能迷惑),發在QQ群或者是瀏覽量多的貼吧/論壇中。

安全意識低的用戶點擊後,經過服務器或者瀏覽器解析後,跳到惡意的網站中。

常見Web安全攻防解析之123

惡意鏈接需要進行偽裝,經常的做法是熟悉的鏈接後面加上一個惡意的網址,這樣才迷惑用戶。

常見Web安全攻防解析之123

URL跳轉漏洞實現方式

URL跳轉的實現方式一般會有以下三種:

1、Header頭跳轉

2、Javascript跳轉

3、Meta標籤內跳轉

通過以GET或者POST的方式接收將要跳轉的URL,然後通過上面的幾種方式的其中一種來跳轉到目標URL。

由於用戶的輸入會進入Meta,Javascript,http頭所以都可能發生相應上下文的漏洞,但是同時,即使只是對於URL跳轉本身功能方面就存在一個缺陷,因為會將用戶瀏覽器從可信的站點導向到不可信的站點,同時如果跳轉的時候帶有敏感數據一樣可能將敏感數據洩漏給不可信的第三方。

舉個Header頭跳轉實現方式:

常見Web安全攻防解析之123

這裡用戶會認為www.wooyun.org都是可信的,但是點擊上述鏈接將導致用戶最終訪問www.evil.com這個惡意網址。

URL跳轉漏洞防禦:

防禦URL跳轉漏洞攻擊主要有2種策略:限制Http請求的Referer字段;在請求地址中添加有效性驗證Token。

1、Referer的限制

如果確定傳遞URL參數進入的來源,我們可以通過該方式實現安全限制,保證該URL的有效性,避免惡意用戶自己生成跳轉鏈接

2、加入有效性驗證Token

我們保證所有生成的鏈接都是來自於我們可信域的,通過在生成的鏈接里加入用戶不可控的Token對生成的鏈接進行校驗,可以避免用戶生成自己的惡意鏈接從而被利用,但是如果功能本身要求比較開放,可能導致有一定的限制。

三、常見Web安全攻防解析之XSS攻擊

在互聯網時代,數據安全與個人隱私受到了前所未有的挑戰,Web安全對於銀行業務來說更是一個非常重要的課題。今天,我們來分析常見的攻擊類型及防禦方法之XSS攻擊。

XSS概念

XSS(Cross Site Script),全稱跨站腳本攻擊,為了與CSS(Cascading Style Sheet)有所區別,所以在安全領域稱為 XSS。XSS的原理是惡意攻擊者往Web頁面裡插入惡意可執行網頁腳本代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的腳本代碼會被執行,從而可以達到攻擊者盜取用戶信息或其他侵犯用戶安全隱私的目的。通過跨站腳本攻擊,可以利用虛假輸入表單騙取用戶個人信息;利用腳本竊取用戶的Cookie值,被害者在不知情的情況下,幫助攻擊者發送惡意請求;顯示偽造的文章或圖片。

XSS分類

1. 非持久型 XSS(反射型 XSS )

非持久型XSS漏洞,一般是通過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、執行。

非持久型 XSS攻擊原理及過程

舉個例子,比如頁面中包含有以下代碼:

常見Web安全攻防解析之123

攻擊者可直接通過URL (類似:https://xxx.com/xxx?default=<script>alert(document.cookie)</script>) 注入可執行的腳本代碼。在攻擊時候,不經過服務器存儲,直接通過 Http 的 GET 和 POST 請求就能完成一次攻擊,用戶點擊鏈接,即可盜用用戶敏感信息。為了防止出現非持久型XSS漏洞,儘量不要從URL,document.referrer,document.forms 等這種 DOM API 中獲取數據直接渲染。儘量不要使用eval, new Function(),document.write(),window.setInterval(),window.setTimeout(),innerHTML,document.createElement() 等可執行字符串的方法。

2.持久型 XSS(存儲型 XSS)

持久型XSS漏洞,一般存在於Form表單提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,將內容經正常功能提交進入數據庫持久保存,當前端頁面獲得後端從數據庫中讀出的注入代碼時,恰好將其渲染執行。

持久型 XSS攻擊原理及過程

(1)POST 請求提交表單後端沒做轉義直接入庫。

(2)後端從數據庫中取出數據沒做轉義直接輸出給前端。

(3)前端拿到後端數據沒做轉義直接渲染成 DOM。

常見Web安全攻防解析之123

舉個例子,黑客寫下一篇包含惡意代碼的文章,文章發表後,所有訪問該博客文章的用戶都會執行這一段代碼,進行惡意攻擊。

常見Web安全攻防解析之123

直接輸出了瀏覽器信息,黑客獲取到這些信息後,發送到自己的服務器,隨意操作。持久型 XSS直接植入數據庫,盜取用戶敏感私密信息,持久性強。

常見Web安全攻防解析之123

如何防禦

對於XSS攻擊來說,通常有兩種方式可以用來防禦。

1、CSP

CSP本質上就是建立白名單,開發者明確告訴瀏覽器哪些外部資源可以加載和執行。我們只需配置規則,如何攔截是由瀏覽器自己實現的。我們可以通過這種方式來儘量減少XSS攻擊。

通常可以通過兩種方式來開啟CSP:

(1)設置 http Header 中的 Content-Security-Policy

(2)設置Meta標籤的方式

這裡以設置http Header來舉例:

只允許加載本站資源

常見Web安全攻防解析之123

只允許加載https協議圖片

常見Web安全攻防解析之123

允許加載任何來源框架

常見Web安全攻防解析之123

對於這種方式來說,只要開發者配置了正確的規則,那麼即使網站存在漏洞,攻擊者也不能執行它的攻擊代碼,並且 CSP 的兼容性也不錯。

2、轉義字符

用戶的輸入永遠不可信任的,最普遍的做法就是轉義輸入輸出的內容,對於引號、尖括號、斜槓進行轉義。但是對於顯示富文本來說,顯然不能通過上面的辦法來轉義所有字符,因為這樣會把需要的格式也過濾掉。對於這種情況,通常採用白名單過濾的辦法。

常見Web安全攻防解析之123

供稿|遼寧省&大連市分行信息科技部