當前位置:
首頁 > 最新 > SQL注入與XSS跨站腳本的基本原理

SQL注入與XSS跨站腳本的基本原理

前言:

各位大牛好,我是Alone,這篇文章主要講XSS/SQL注入的一個基本原理,適合新手入門學習,大佬勿噴,小弟不才,這些原理都是通過自己的實戰和摸索得來的經驗,可能有認識錯誤的地方,還望大佬指點一二,小弟感激不盡~

一、XSS注入

0)什麼是 XSS?

答:XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。 (引用百度百科)

1)什麼是XSS攻擊?

答:XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。這種類型的漏洞由於被黑客用來編寫危害性更大的網路釣魚(Phishing)攻擊而變得廣為人知。對於跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的「緩衝區溢出攻擊「,而JavaScript是新型的「ShellCode」。 (引用百度百科)

2)XSS分類?

答:存儲型、反射型。

3)傳統防禦

答:過濾敏感標籤

4)XSS注入原理

答:(個人總結)通過前端表單數據傳遞到後台,後台沒有經過任何的防禦或過濾措施,後台再將數據返回給前端導致出現XSS漏洞,具體看實戰操作!

二、SQL注入

0)什麼是SQL注入?

答:所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。[1]比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊。 (引用百度百科)

1)SQL注入原理?

答:SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細緻地過濾用戶輸入的數據,致使非法數據侵入系統。

(引用百度百科)

2)防護

歸納一下,主要有以下幾點:

0)永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和

雙"-"進行轉換等。

1)永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。

2)永遠不要使用管理員許可權的資料庫連接,為每個應用使用單獨的許可權有限的資料庫連接。

3)不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。

4)應用的異常信息應該給出儘可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。

5)sql注入的檢測方法一般採取輔助軟體或網站平台來檢測,軟體一般採用sql注入檢測工具jsky,網站平台就有億思網站安全平台檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS可以有效的防禦SQL注入,XSS攻擊等。

實驗如下:

(一)

0)測試環境:Tomcat 8.5

1)代碼審計:Java

2)具有 XSS 注入漏洞的代碼;

3)具有 SQL 注入漏洞的代碼;

(二)XSS 原理解析

0)XSS 注入代碼審計:

前端代碼:

1)注入過程:

打開評論區

評論:哇,文章好精彩啊,提交表單之後,數據插入資料庫,然後前端展示評論

接下來我們嘗試在評論區提交以下html標籤試試?

嘗試提交一個

結果發現,插入了一個按鈕,察看下源代碼試試?

發現我們提交的評論被原樣展示了出來

因此判定此處存在XSS漏洞;

插入資料庫的數據會持久化保存,因此,此類型的XSS漏洞為存儲性XSS漏洞。

那麼什麼又是反射型XSS?

代碼我就懶得再寫了,我是這樣理解的(經過數據持久化的就叫存儲型,反之則反射型)

還有一種說法,反射性是需要某個條件觸發才會執行你注入的代碼,比如滑鼠的哦javascript 中的 onclick 事件等等。

(三)SQL注入原理解析

DAO 層代碼審計:

發現是代碼拼接字元串拼成一個完整的sql語句;

控制層源碼:

登錄頁面源碼:

順便給大家看看我的user表裡的數據,為了方便演示我就不用md5加密的方式登錄了。

接下來嘗試從前端登錄(瞎Jb輸入的,資料庫中正確的用戶名和密碼是testSQL: testSQL)

結果顯示

如果檢測出了sql注入漏洞,那麼我們該如何使用錯誤的用戶名和密碼登錄成功呢?

請看下面分析:

前面說了,後台程序是用的拼接字元串的方式來完成一條sql語句,那麼構思。

查詢語句一般都是select username,password from user where username=』username』 and password = 『password』

後台的sql語句,由此可得,增加一個判斷。

select username,password from user where username=』username』 and password = 『password』 or 『1』 = 『1』

接下來我在前端演示一遍。

登錄成功了!

我們看下傳到後台之後的sql語句是怎麼樣的:

這是後台列印的log

原理很簡單,他拼裝sql字元串的時候,我們可以通過條件語句來控制這個sql。

比如剛剛

select name,password from book_user where name="username" and password="username" or "1" = "1"

username" or "1" = "這個是我們傳進去的參數

正常情況下是這樣:

select name,password from book_user where name="username" and password="username"

這時候我們在腦海里想像一下,一個變數被賦值然後拼接字元串,如何讓它執行我的條件語句。

紅色部分就是我們提交的參數如:

0)密碼參數Alone

Sql: select name,password from book_user where name="username" and password="Alone"

1)密碼參數Alone』

Sql: select name,password from book_user where name="username" and password="Alone""

當然這樣後台會直接報錯,通常會使用這種方式檢測是否存在sql注入漏洞。

2)密碼參數Aloneor "1"="1

Sql: select name,password from book_user where name="username" and password="Alone"or "1"="1"

這樣是不是剛好拼接成一個完整的sql語句?

Ok,今天你收穫了嗎?

本文僅用於技術研究與探討,任何個人,團體,組織不得將其用於非法目的,違法犯罪必將受到法律制裁。

本文已獲作者授權,轉載務必註明作者及出處。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 安徽鋒刃科技 的精彩文章:

TAG:安徽鋒刃科技 |