亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        新型二階SQL注入技術(shù)研究

        2015-01-01 02:56:10樂德廣李鑫龔聲蓉鄭力新
        通信學(xué)報(bào) 2015年1期
        關(guān)鍵詞:頁面數(shù)據(jù)庫用戶

        樂德廣,李鑫,龔聲蓉,鄭力新

        (1. 常熟理工學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 常熟 215500;2. 華僑大學(xué) 工學(xué)院,福建 泉州 362021)

        1 引言

        隨著Web技術(shù)的飛速發(fā)展,Web應(yīng)用也面臨著越來越多的安全問題。根據(jù)開放式Web應(yīng)用安全項(xiàng)目(OWASP,open Web application security project)公布的數(shù)據(jù),SQL注入漏洞是目前影響 Web安全的首要漏洞[1]。過去幾年,許多專家和學(xué)者對SQL注入漏洞進(jìn)行了大量研究,并提出了許多注入方法和防御技術(shù)[2~7],但是這些研究卻大多局限于一階SQL注入。二階SQL注入是在傳統(tǒng)一階SQL注入技術(shù)基礎(chǔ)上發(fā)展而來,它更難以被發(fā)現(xiàn),卻有和一階SQL注入一樣的安全威脅。目前對于二階SQL注入技術(shù)的研究較少,YAN[8]等分析了二階SQL注入的原理和形成過程,提出一種動(dòng)態(tài)和靜態(tài)結(jié)合檢測二階SQL注入漏洞的方法。田玉杰[9]等提出了一種基于改進(jìn)參數(shù)化的二階 SQL 注入攻擊防御模型,包括輸入過濾模塊、索引替換模塊、語法比較模塊和參數(shù)化替換模塊。但是這些方法對于二階SQL注入漏洞的檢測效果并不理想。隨著HTML5等Web技術(shù)的興起,SQL注入有了進(jìn)一步的發(fā)展,新型二階SQL注入就是其中一種。新型二階SQL注入是在 HTML5等新技術(shù)規(guī)范下的最新利用形式,包括二階SQL盲注、二階SQL注入攻擊操作系統(tǒng)和客戶端二階SQL注入。其中,二階SQL盲注在通過二次請求能夠執(zhí)行存儲(chǔ)于數(shù)據(jù)庫中的攻擊載荷,但不能返回查詢結(jié)果或任何錯(cuò)誤消息的情況下使用,可以通過時(shí)間延遲技術(shù)確認(rèn)并利用漏洞。二階SQL注入攻擊操作系統(tǒng)通過組合Web應(yīng)用中不同部分的權(quán)限實(shí)現(xiàn)高數(shù)據(jù)庫權(quán)限的攻擊操作系統(tǒng)。不同于傳統(tǒng)SQL注入攻擊服務(wù)器,客戶端二階SQL注入利用HTML5引入客戶端數(shù)據(jù)存儲(chǔ)的機(jī)制,通過二階SQL注入攻擊客戶端。這些新發(fā)展的二階SQL注入,使傳統(tǒng)SQL注入防御技術(shù)失去作用,不僅會(huì)威脅到服務(wù)器的信息安全,也會(huì)對個(gè)人電腦、手機(jī)等客戶端造成損失。

        2 SQL注入技術(shù)

        2.1 一階SQL注入

        一階SQL 注入是指通過Web輸入直接把包含攻擊載荷的用戶輸入拼接到 Web應(yīng)用構(gòu)造的動(dòng)態(tài)SQL 語句中,該動(dòng)態(tài)SQL 語句被提交到數(shù)據(jù)庫執(zhí)行從而獲取未授權(quán)訪問的技術(shù)[10],其中攻擊載荷是指被拼裝入SQL查詢后能夠改變原查詢邏輯,實(shí)現(xiàn)想要執(zhí)行功能的一組語句[11]。例如,在用戶登錄的頁面login.php中,采用如下所示的動(dòng)態(tài)查詢語進(jìn)行登錄用戶認(rèn)證。

        以上代碼使用POST表單的用戶輸入動(dòng)態(tài)構(gòu)造SQL查詢,發(fā)送到數(shù)據(jù)庫后可以被直接執(zhí)行。如果用戶構(gòu)造 username輸入的值為“’OR 1=1;DROP TABLE Users; --”,password字段填任意值,則構(gòu)造后的SQL查詢語句如下。

        SELECT * FROM Users WHERE username = ‘’OR 1=1; DORP TABLE Users; -- ’ AND password =‘×××’

        以上用戶輸入構(gòu)造的 SQL查詢改變了執(zhí)行邏輯,不僅通過驗(yàn)證而且會(huì)附加執(zhí)行刪除Users表的操作。圖1顯示了一階SQL注入攻擊的操作流程。

        圖1 一階SQL注入流程

        從圖1可以看出,首先在客戶端發(fā)送包含攻擊載荷的用戶輸入到Web應(yīng)用,Web應(yīng)用使用用戶輸入構(gòu)造動(dòng)態(tài)SQL查詢語句發(fā)送給數(shù)據(jù)庫執(zhí)行,然后數(shù)據(jù)庫執(zhí)行查詢并返回結(jié)果集到 Web應(yīng)用,最后Web應(yīng)用發(fā)送構(gòu)造好的HTML頁面到客戶端,從而能夠在客戶端獲取信息。一階SQL注入中常用的技術(shù)有聯(lián)合查詢、堆疊查詢、錯(cuò)誤提示、存儲(chǔ)過程、重言式和盲注等[12]。

        2.2 二階SQL注入

        二階SQL 注入不同于一階SQL注入中把攻擊載荷直接動(dòng)態(tài)構(gòu)造到SQL查詢中并被數(shù)據(jù)庫解析執(zhí)行,而是把SQL注入過程分為2個(gè)階段,即把攻擊載荷存入數(shù)據(jù)庫階段和通過相關(guān)請求使Web應(yīng)用檢索之前存入數(shù)據(jù)庫的攻擊載荷構(gòu)造SQL查詢階段[13]。造成二階 SQL注入的原因是Web應(yīng)用過于信任來自數(shù)據(jù)庫的數(shù)據(jù)。例如,通過Web應(yīng)用的用戶注冊和用戶資料修改功能可以進(jìn)行二階SQL注入,即首先通過用戶注冊功能把攻擊載荷存入數(shù)據(jù)庫中,然后通過用戶資料修改功能提取用戶注冊頁面中用戶存入數(shù)據(jù)庫中的數(shù)據(jù)構(gòu)造SQL查詢。其中,用戶注冊的關(guān)鍵代碼如下所示。

        上述代碼使用預(yù)編譯語句代替動(dòng)態(tài)構(gòu)造 SQL查詢實(shí)現(xiàn)向數(shù)據(jù)庫中插入一條包含 username、password、email等字段用戶記錄的功能。當(dāng)數(shù)據(jù)庫處理預(yù)編譯語句時(shí),首先會(huì)編譯由占位符代替用戶輸入的SQL指令,然后再代入用戶輸入運(yùn)行。由于已經(jīng)完成編譯,即使用戶輸入中含有攻擊載荷也不會(huì)被數(shù)據(jù)庫解析執(zhí)行,實(shí)現(xiàn)對一階 SQL注入的防御。例如,向數(shù)據(jù)庫中插入一條包含有攻擊載荷的用戶記錄,把 email字段構(gòu)造為“123’ WHERE 1=(updatexml(1,concat(0x5e24,(select password from admin limit 1),0x5e24),1)); -- ”,由于用戶注冊采用了預(yù)編譯語句,攻擊載荷會(huì)被當(dāng)作數(shù)據(jù)處理而存入數(shù)據(jù)庫中。

        但是,存入數(shù)據(jù)庫中的攻擊載荷在進(jìn)行用戶資料修改時(shí)將會(huì)被使用。例如,Web應(yīng)用的用戶資料修改功能在用戶修改密碼前會(huì)驗(yàn)證用戶名和密碼,并把數(shù)據(jù)庫中對應(yīng)用戶的數(shù)據(jù)全部提取到內(nèi)存中以構(gòu)造修改后的用戶記錄,其驗(yàn)證并提取用戶數(shù)據(jù)的SQL指令如下所示。

        在上述SQL指令中,只有用戶輸入了正確的username和password才會(huì)返回包含全部用戶資料的非空結(jié)果集。Web應(yīng)用通過驗(yàn)證返回結(jié)果集是否為空判斷用戶是否通過驗(yàn)證,并把結(jié)果集保存在內(nèi)存中來創(chuàng)建動(dòng)態(tài) SQL查詢。Web應(yīng)用使用內(nèi)存中結(jié)果集構(gòu)造修改用戶密碼的關(guān)鍵代碼如下所示。

        上述代碼使用內(nèi)存中的username和email以及用戶新輸入的password構(gòu)造UPDATE指令。此時(shí)存儲(chǔ)在 email字段中的攻擊載荷會(huì)被動(dòng)態(tài)構(gòu)造到SQL查詢中,新構(gòu)造的SQL指令如下所示。

        數(shù)據(jù)庫執(zhí)行上述SQL指令時(shí),當(dāng)updatexml()函數(shù)接收到的XPath字符串存在語法錯(cuò)誤時(shí),就會(huì)產(chǎn)生數(shù)據(jù)庫錯(cuò)誤提示,如圖2所示。

        圖2 觸發(fā)錯(cuò)誤提取信息

        在圖2所示的錯(cuò)誤提示中,會(huì)把用戶密碼的具體內(nèi)容admin展示出來,導(dǎo)致二階SQL注入。二階SQL注入流程如圖3所示。

        從圖3可以看出,二階SQL注入分為存儲(chǔ)(1)~5))和觸發(fā)(6)~21))2個(gè)階段。在存儲(chǔ)階段中,首先把攻擊載荷寫入用戶輸入中發(fā)送給Web應(yīng)用。由于Web應(yīng)用中部署防御措施,使數(shù)據(jù)庫執(zhí)行由Web應(yīng)用構(gòu)造的INSERT/UPDATE等語句后把攻擊載荷當(dāng)作數(shù)據(jù)存入數(shù)據(jù)庫中。在觸發(fā)階段,讓W(xué)eb應(yīng)用使用存儲(chǔ)階段中存入數(shù)據(jù)庫的攻擊載荷來構(gòu)造新的 SQL指令。首先在客戶端加載能調(diào)用攻擊載荷的模塊使Web應(yīng)用從數(shù)據(jù)庫提取攻擊載荷到內(nèi)存中,然后使Web應(yīng)用用內(nèi)存中的數(shù)據(jù)動(dòng)態(tài)構(gòu)造 SQL指令。數(shù)據(jù)庫在執(zhí)行Web應(yīng)用新構(gòu)造的SQL指令后攻擊載荷被解析執(zhí)行,完成SQL注入。針對二階SQL注入在觸發(fā)階段采用的不同方法,本文提出了3種新型二階SQL注入技術(shù):二階SQL盲注、二階SQL注入攻擊操作系統(tǒng)和客戶端二階SQL注入技術(shù)。其中,二階SQL盲注針對Web應(yīng)用屏蔽錯(cuò)誤提示和帶內(nèi)數(shù)據(jù)傳輸無法實(shí)現(xiàn)圖3中步驟18)~21)的情況構(gòu)造攻擊載荷,借助數(shù)據(jù)庫執(zhí)行攻擊載荷后Web應(yīng)用產(chǎn)生的不同響應(yīng)推斷數(shù)據(jù)庫中的數(shù)據(jù)。二階SQL注入攻擊操作系統(tǒng)通過數(shù)據(jù)庫與操作系統(tǒng)交互的能力,把文件讀/寫、執(zhí)行操作系統(tǒng)命令等指令寫入攻擊載荷中,使攻擊載荷被執(zhí)行后實(shí)現(xiàn)對操作系統(tǒng)的攻擊。進(jìn)行二階SQL注入攻擊操作系統(tǒng)時(shí),可以結(jié)合各個(gè)頁面權(quán)限實(shí)施高權(quán)限攻擊??蛻舳硕A SQL注入技術(shù)中攻擊載荷雖然會(huì)被發(fā)送給服務(wù)器但是最終卻是在被攻擊者的客戶端執(zhí)行,在發(fā)送攻擊載荷時(shí)所用的通道和提取所捕獲數(shù)據(jù)的有效機(jī)制上與傳統(tǒng)二階SQL注入技術(shù)不同。客戶端二階SQL注入不僅需要圖3中所示的二階SQL注入流程,還需要在SQL注入前使用白盒測試的方法收集信息以確定注入方法。

        3 新型二階SQL注入技術(shù)

        3.1 二階SQL盲注

        二階SQL盲注是一種把二階SQL注入與SQL盲注結(jié)合使用的新技術(shù)。與一階SQL盲注發(fā)送各種構(gòu)造好的輸入重復(fù)提交獨(dú)立請求并監(jiān)視響應(yīng)中的異常不同,二階SQL盲注在不同的頁面輸入攻擊載荷和觀察Web應(yīng)用響應(yīng)。針對SQL注入中基于錯(cuò)誤的數(shù)據(jù)提取和帶內(nèi)數(shù)據(jù)連接[14],已有屏蔽錯(cuò)誤提示等技術(shù)[15~17]進(jìn)行有效防御。因此在進(jìn)行二階SQL注入時(shí)常常遇到異常條件是盲的情況,即Web應(yīng)用不返回查詢結(jié)果或任何錯(cuò)誤消息。為此可以利用SQL盲注來提取信息[18],其中較為常用的有基于時(shí)間的盲注和基于布爾值的盲注[19,20]。

        圖3 二階SQL注入流程

        基于布爾值的盲注通常以布爾值的2種狀態(tài)作為提取信息的新通道,通過 Web應(yīng)用不同的響應(yīng)提取信息。例如在 Web應(yīng)用的文章發(fā)表和修改功能中,允許用戶輸入任意文章標(biāo)題和文章內(nèi)容,但是采用了參數(shù)化查詢使攻擊者無法直接進(jìn)行 SQL注入。構(gòu)造的攻擊載荷被存儲(chǔ)到數(shù)據(jù)庫中。用戶文章修改功能頁面羅列出當(dāng)前用戶已發(fā)表的文章,并在用戶選擇要修改的文章后通過文章標(biāo)題查找對應(yīng)的文章內(nèi)容呈現(xiàn)在用戶客戶端。正常情況下,其執(zhí)行的SQL指令如下。

        SELECT * FROM Article WHERE title = ‘標(biāo)題’

        如果構(gòu)造文章標(biāo)題為“test’ AND 2=3”,實(shí)際執(zhí)行的SQL語句如下。

        SELECT * FROM Article WHERE title = ‘123’AND 2 = 3

        在以上語句中,由于“2 = 3”邏輯值為false,并且與查詢條件“id = 1”通過邏輯與運(yùn)算符連接,即整個(gè)WHERE條件為false,使Web應(yīng)用無法返回結(jié)果給用戶,這時(shí)會(huì)看到一個(gè)為空或者出錯(cuò)頁面。為了驗(yàn)證構(gòu)造的數(shù)據(jù)確實(shí)能被數(shù)據(jù)庫解析執(zhí)行,可以修改文章標(biāo)題為“Test’ AND 3=3”以使 SQL查詢WHERE條件邏輯值為true。如果使用“AND 3=3”構(gòu)造標(biāo)題時(shí)應(yīng)用能夠返回正常頁面,則說明此處存在SQL注入。

        基于時(shí)間的SQL盲注使用Web應(yīng)用響應(yīng)請求的時(shí)間作為提取數(shù)據(jù)的通道,通常是在SQL查詢語句中拼接入時(shí)延函數(shù)或者耗時(shí)大的運(yùn)算實(shí)現(xiàn)。例如在前面的例子中構(gòu)造標(biāo)題為“test’;SELECT (IF( user() = ‘root’ ), SLEEP (4), 1 )”,Web 應(yīng)用查找對應(yīng)文章內(nèi)容時(shí)的SQL指令如下。

        SELECT * FROM Article WHERE title =‘test’;SELECT ( IF ( user() = ‘root’ ), SLEEP (4), 1)

        如果修改上述標(biāo)題的請求提交后,Web應(yīng)用通過SLEEP(4)時(shí)延函數(shù)等待4 s時(shí)間響應(yīng)正常頁面,則可以推斷出數(shù)據(jù)庫當(dāng)前用戶為“root”。表1列出了不同數(shù)據(jù)庫中常用的延時(shí)方式。

        表1 時(shí)延函數(shù)

        二階SQL盲注首先要尋找一組相關(guān)聯(lián)的界面。這組相關(guān)聯(lián)界面包括能夠把用戶控制數(shù)據(jù)持久保存的頁面 A和能夠隱式或顯式使用這些數(shù)據(jù)的頁面B。其次,提交盲注攻擊載荷并存入數(shù)據(jù)庫中。然后,通過頁面B請求攻擊載荷,使其被加載、執(zhí)行。最后,通過觀察Web應(yīng)用的響應(yīng)獲取數(shù)據(jù)。二階SQL盲注的流程如圖4所示。

        傳統(tǒng)SQL注入漏洞防御技術(shù)無法對二階SQL盲注提供有效防御。首先,二階SQL盲注并不借助錯(cuò)誤消息或帶內(nèi)數(shù)據(jù)連接,而是通過推斷Web應(yīng)用的響應(yīng)獲取信息。因此,屏蔽錯(cuò)誤消息等防御方法無法有效覆蓋二階 SQL盲注攻擊。其次,現(xiàn)有的WAF防御方法大多是針對特定參數(shù)的用戶輸入進(jìn)行檢測,這樣能有效防御一階SQL盲注,但是二階SQL盲注把攻擊載荷通過數(shù)據(jù)庫發(fā)送給執(zhí)行 SQL查詢的函數(shù),從而能繞過WAF檢測進(jìn)行SQL注入。

        圖4 二階SQL盲注流程

        3.2 二階SQL注入攻擊操作系統(tǒng)

        目前常用的數(shù)據(jù)庫,如SQL Server、Oracle、MySQL等都提供與底層操作系統(tǒng)交互的能力。它們不僅能訪問文件系統(tǒng),甚至還能夠執(zhí)行操作系統(tǒng)命令,這為利用SQL注入攻擊數(shù)據(jù)庫服務(wù)器的操作系統(tǒng)提供了可能。例如,數(shù)據(jù)庫的 xp_cmdshell允許數(shù)據(jù)庫管理員以和命令提示符相同的方式執(zhí)行操作系統(tǒng)命令,如添加操作系統(tǒng)用戶。

        EXEC master..xp_cmdshell ‘net user john 12345/add’

        表2列出了常見數(shù)據(jù)庫訪問文件系統(tǒng)和執(zhí)行操作系統(tǒng)命令的功能。

        表2 攻擊操作系統(tǒng)

        傳統(tǒng)的一階 SQL注入攻擊操作系統(tǒng)面臨很大的局限性,即需要高權(quán)限。例如在SQL Server中需要 sa權(quán)限才能執(zhí)行擴(kuò)展存儲(chǔ)過程和系統(tǒng)存儲(chǔ)過程等功能,在MySQL中需要FILE權(quán)限才能實(shí)現(xiàn)對文件系統(tǒng)的讀寫操作等。而有經(jīng)驗(yàn)的管理員通常會(huì)盡可能地降低Web應(yīng)用的數(shù)據(jù)庫權(quán)限。例如,對Web應(yīng)用顯示文章的功能只分配SELECT權(quán)限,發(fā)布文章的功能只分配INSERT權(quán)限,修改用戶資料功能只分配UPDATE權(quán)限等。這使攻擊者無法在單一頁面獲得足夠權(quán)限實(shí)施對操作系統(tǒng)的攻擊。利用二階SQL注入組合不同頁面的功能實(shí)施攻擊可以解決這一問題。例如發(fā)布/查看文章的功能中,發(fā)布文章頁面只分配了INSERT權(quán)限,但是由于文章內(nèi)容的多樣性允許輸入任意字符。而修改文章頁面只分配了 FILE權(quán)限,但是對用戶輸入使用嚴(yán)格的白名單過濾,無法直接進(jìn)行SQL注入。在發(fā)布文章頁面構(gòu)造文章標(biāo)題如下。

        Test’;SELECT ‘’INTO OUTFILE ‘/var/www/a.php’

        發(fā)布文章后數(shù)據(jù)庫執(zhí)行INSERT指令把上述攻擊載荷存入數(shù)據(jù)庫中,之后再查看文章頁面請求查看文章內(nèi)容,Web應(yīng)用使用數(shù)據(jù)庫中的攻擊載荷構(gòu)造查找對應(yīng)文章內(nèi)容的SQL指令如下所示。

        SELECT * FROM Article WHERE title = ’Test’;SELECT ‘’ INTO OUTFILE ‘/var/www/a.php’

        數(shù)據(jù)庫執(zhí)行上述代碼將會(huì)在 Web應(yīng)用的/var/www/文件夾下創(chuàng)建一個(gè)名為 a.php的一句話Webshell。通過二階SQL注入組合Web應(yīng)用不同部分的權(quán)限,實(shí)現(xiàn)對操作系統(tǒng)的有效攻擊。

        3.3 客戶端二階SQL注入

        HTML5的新特性之一是內(nèi)置通過SQL語言來訪問的數(shù)據(jù)庫[21]??蛻舳丝梢酝ㄟ^JavaScript使用SQLite文件型數(shù)據(jù)庫在客戶端獲取和存儲(chǔ)數(shù)據(jù)。例如,以下代碼是打開一個(gè)名為Webdb版本1.0的最大存儲(chǔ)容量為1 000 000的數(shù)據(jù)庫,并創(chuàng)建一個(gè)名為test,包含有id、name、email字段的表。

        HTML5允許Web應(yīng)用把數(shù)據(jù)存入客戶端數(shù)據(jù)庫以便用戶界面快速檢索所需數(shù)據(jù),這能在加快Web應(yīng)用響應(yīng)速度的同時(shí)減小服務(wù)器負(fù)擔(dān)。此外,它還允許Web應(yīng)用離線運(yùn)行,Web應(yīng)用處理的數(shù)據(jù)先駐留在客戶端中,聯(lián)網(wǎng)后再與服務(wù)器同步。

        HTML5在帶來便利的同時(shí)也產(chǎn)生安全隱患。與服務(wù)器端SQL注入類似,如果客戶端應(yīng)用程序以非安全的方式訪問本地?cái)?shù)據(jù)庫中的攻擊載荷,就會(huì)產(chǎn)生客戶端二階SQL注入。客戶端二階SQL注入主要在發(fā)送攻擊載荷的通道和提取敏感數(shù)據(jù)的機(jī)制2個(gè)方面區(qū)別于普通二階SQL注入。進(jìn)行客戶端二階SQL注入時(shí),必須先找到能被攻擊者控制并且被Web應(yīng)用發(fā)送到客戶端數(shù)據(jù)庫中的數(shù)據(jù)片段,例如新聞?lì)悜?yīng)用中的用戶評論、社交網(wǎng)絡(luò)應(yīng)用中的用戶個(gè)人資料等。這些數(shù)據(jù)片段首先被發(fā)送到服務(wù)器,再由服務(wù)器分發(fā)到客戶端數(shù)據(jù)庫,最終數(shù)據(jù)片段中的攻擊載荷在客戶端數(shù)據(jù)庫被執(zhí)行。進(jìn)行敏感數(shù)據(jù)提取時(shí),借助應(yīng)用程序離線數(shù)據(jù)同步的機(jī)制把想要獲取的數(shù)據(jù)發(fā)送給服務(wù)器,然后從服務(wù)器讀取數(shù)據(jù)。例如在社交網(wǎng)絡(luò)應(yīng)用中,可以把想要獲取的敏感數(shù)據(jù)復(fù)制到用戶資料實(shí)現(xiàn)讀取數(shù)據(jù)??蛻舳硕ASQL注入的流程如圖5所示。

        圖5 客戶端二階SQL注入流程

        從圖5可以看出,客戶端二階SQL注入分為白盒測試和注入攻擊2個(gè)階段。白盒測試是客戶端二階SQL注入相比與其他二階注入所特有的階段,其目的是收集信息。其中,在分析客戶端實(shí)例中,通過分析在客戶端中加載的實(shí)例獲知 Web應(yīng)用使用了什么防御措施,Web應(yīng)用的哪些位置可以實(shí)施二階注入攻擊,用戶機(jī)密數(shù)據(jù)存儲(chǔ)的位置,可以提取數(shù)據(jù)的途徑等。通常能夠直接輸入但是會(huì)受到輸入驗(yàn)證檢測的數(shù)據(jù)和可以控制的基于文本的數(shù)據(jù)容易進(jìn)行客戶端二階SQL注入。雙客戶端模擬攻擊操作是通過加載2個(gè)客戶端實(shí)例來收集每一條攻擊語句執(zhí)行后的效果,哪些繞過防御措施的方法有效等信息。注入攻擊階段利用在白盒測試中收集到的信息構(gòu)造攻擊載荷和選擇注入點(diǎn),然后把攻擊載荷包含在受其控制的一組數(shù)據(jù)中發(fā)送給服務(wù)器,被攻擊客戶端應(yīng)用存儲(chǔ)這些數(shù)據(jù)。接著,通過修改數(shù)據(jù)或者其他方式誘使被攻擊客戶端加載該攻擊載荷從而進(jìn)行客戶端二階SQL注入。

        社交網(wǎng)絡(luò)、新聞等都是易受這種攻擊的應(yīng)用。例如在社交網(wǎng)絡(luò)應(yīng)用中,好友資料被存儲(chǔ)在本地?cái)?shù)據(jù)庫中以便離線查看。好友資料內(nèi)容包括聯(lián)系人ID、姓名、郵箱、用戶狀態(tài)等。如果攻擊者在自己資料的郵箱參數(shù)中添加攻擊載荷,被攻擊客戶端將接收并儲(chǔ)存這些攻擊載荷。然后,攻擊者修改用戶狀態(tài)并發(fā)布。被攻擊客戶端應(yīng)用程序接收到被修改后的聯(lián)系人信息后,提取存儲(chǔ)在本地?cái)?shù)據(jù)庫中的聯(lián)系人信息到內(nèi)存中,把被修改過的用戶狀態(tài)參數(shù)與內(nèi)存中其他參數(shù)一起構(gòu)造新的UPDATE語句并執(zhí)行,從而造成客戶端二階SQL注入。

        4 測試結(jié)果與分析

        下面通過實(shí)驗(yàn)測試本文提出的 3種新型二階SQL注入漏洞存在的情況和目前主要SQL注入防御措施對3種新型二階SQL注入技術(shù)的防御效果。

        首先通過滲透測試的方式從 Alexa[22]中隨機(jī)抽取30個(gè)網(wǎng)站測試二階SQL盲注和二階SQL注入攻擊操作系統(tǒng),另抽取30個(gè)網(wǎng)站測試客戶端二階SQL注入。測試過程中,與數(shù)據(jù)庫交互的方式如表3所示,并用“.”分隔測試的 2個(gè)階段,如Ⅱ.Ⅰ表示二階SQL注入過程中第一階段使用UPDATE語句將有效載荷存入數(shù)據(jù)庫,第二階段采用SELECT語句觸發(fā)攻擊載荷。

        表3 數(shù)據(jù)庫操作類型

        根據(jù)表3的表示方法,表4詳細(xì)列出了測試結(jié)果。其中,針對二階SQL盲注的測試采用基于時(shí)間的盲注方法,判別依據(jù)為是否會(huì)觸發(fā)時(shí)延函數(shù)。在對二階 SQL注入攻擊操作系統(tǒng)的測試中,對于Linux+MySQL的情況采用判斷Web應(yīng)用的數(shù)據(jù)庫用戶是否有 FILE權(quán)限的方法,判斷依據(jù)為是否能夠執(zhí)行LOAD_FILE指令。對于SQL Server情況,采用判斷能否使用 wscript.shell對象的方法,判斷依據(jù)為在遠(yuǎn)程服務(wù)器上啟動(dòng)一個(gè)記事本程序時(shí)應(yīng)用能夠正常運(yùn)行。對于Oracle的情況,采用判斷數(shù)據(jù)庫用戶是否具有正確的Java IO許可權(quán)限,判斷依據(jù)為能否執(zhí)行DBMS_JAVA_TEST.FUNCALL函數(shù)。針對客戶端二階SQL注入,通過白盒測試的方法,2個(gè)客戶端同時(shí)本地運(yùn)作,判斷依據(jù)為客戶端能否通過修改自己的數(shù)據(jù)獲得被攻擊客戶端中的數(shù)據(jù)。表4列出了測試結(jié)果。

        表4 測試結(jié)果

        在表4中,第1行的6、10、5和10表示在測試的 30個(gè)網(wǎng)站中分別使用Ⅱ.Ⅰ、Ⅱ.Ⅱ、Ⅲ.Ⅰ和Ⅲ.Ⅱ的方式進(jìn)行二階SQL盲注測試時(shí)發(fā)現(xiàn)SQL注入漏洞的網(wǎng)站數(shù)量。這說明二階SQL盲注在存儲(chǔ)階段中對于攻擊載荷存入數(shù)據(jù)庫的方式?jīng)]有特別的要求,使用UPDATE與INSERT這2種方式均可。但是在觸發(fā)階段中,使用Ⅱ方式能夠成功進(jìn)行SQL注入的網(wǎng)站數(shù)量幾乎是Ⅰ方式的 2倍,說明二階SQL盲注使用 UPDATE方式觸發(fā)攻擊載荷效果明顯好于使用SELECT方式。這是因?yàn)镾ELECT方式能夠起作用需要應(yīng)用把攻擊載荷存在內(nèi)存或者隱藏表單中,并用來構(gòu)造新的查詢。第2行的二階SQL注入攻擊操作系統(tǒng)使用Ⅱ.Ⅰ、Ⅱ.Ⅱ、Ⅲ.Ⅰ和Ⅲ.Ⅱ方式進(jìn)行測試時(shí),成功進(jìn)行SQL注入的網(wǎng)站數(shù)量分別為2、5、2和4。在不考慮觸發(fā)階段的情況下,方式Ⅱ與方式Ⅲ有相似的結(jié)果,在不考慮存儲(chǔ)階段的情況下,方式Ⅱ的效果好于方式Ⅰ,這是因?yàn)楹投ASQL盲注一樣,二階SQL注入攻擊操作系統(tǒng)的存儲(chǔ)與觸發(fā)攻擊載荷都是在服務(wù)器端執(zhí)行。第 3行的客戶端二階SQL注入使用Ⅱ.Ⅰ、Ⅱ.Ⅱ、Ⅲ.Ⅰ和Ⅲ.Ⅱ方式進(jìn)行測試時(shí),成功進(jìn)行 SQL注入的網(wǎng)站數(shù)量分別為 5、6、4和 6。雖然在存儲(chǔ)階段,方式Ⅱ與方式Ⅲ效果相同,但是在觸發(fā)階段,方式Ⅱ與方式Ⅰ檢測結(jié)果差距不如前2種二階SQL注入明顯,這是因?yàn)樵诳蛻舳藨?yīng)用中使用SELECT查詢的機(jī)會(huì)相比較于服務(wù)器端應(yīng)用要多。此外,最后一列總計(jì)表示在測試的30個(gè)網(wǎng)站中,通過Ⅱ.Ⅰ,Ⅱ.Ⅱ,Ⅲ.Ⅰ和Ⅲ.Ⅱ方式分別進(jìn)行3種新型二階SLQ注入測試時(shí),測出SQL注入漏洞的網(wǎng)站總數(shù)量分別是 11、5和 6,其測試的成功率如圖6所示。

        從圖6可以看出,二階SQL盲注的成功率為36.67%,是3種新型二階SQL注入測試中最高的,這是因?yàn)槟壳敖^大多數(shù) Web應(yīng)用都會(huì)采取屏蔽錯(cuò)誤消息和帶內(nèi)數(shù)據(jù)傳輸?shù)裙δ埽ASQL盲注可以有效應(yīng)對這種情況。二階SQL攻擊操作系統(tǒng)的成功率最低,僅為16.67%。這說明二階SQL攻擊操作系統(tǒng)的應(yīng)用場景較少,其主要原因是利用該技術(shù)對權(quán)限有較高的要求,如需要Web應(yīng)用數(shù)據(jù)庫用戶擁有sa或root權(quán)限,在MySQL+Linux中要求應(yīng)用具有文件寫權(quán)限等??蛻舳硕ASQL注入的成功率為20%,有較高的應(yīng)用場景。這是因?yàn)镠TML5作為一種新的技術(shù)規(guī)范,開發(fā)人員對它的安全問題缺乏有效的防范。

        圖6 漏洞利用情況

        接著,本文構(gòu)建 PHP+MySQL+Apache+Linux測試環(huán)境,模擬一個(gè)具有新用戶注冊、修改和查看用戶資料功能,并存在二階SQL注入漏洞的Web應(yīng)用。在Web應(yīng)用中,存在二階SQL注入漏洞的關(guān)鍵代碼如下。

        然后,在Web應(yīng)用中部署包括參數(shù)化語句、屏蔽錯(cuò)誤消息提示和帶內(nèi)數(shù)據(jù)傳輸(簡稱錯(cuò)誤消息)、基于黑名單的輸入驗(yàn)證(簡稱輸入驗(yàn)證)、數(shù)據(jù)庫用戶最小權(quán)限(簡稱最小權(quán)限)、編碼輸入和Web應(yīng)用防火墻(WAF)等各種SQL注入防御措施[23]。表5顯示了目前主要SQL注入防御措施對3種新型二階SQL注入技術(shù)的防御效果,其中√表示該技術(shù)可以繞過對應(yīng)的防御措施。

        表5 防御效果

        從表5中可以看出,目前主流防御措施對于3種新型SQL注入技術(shù)不能夠起到良好的防御作用。其中,參數(shù)化語句雖然能夠?qū)ΧASQL注入有較好的防御效果,但是它要求Web應(yīng)用在每一處需要構(gòu)造SQL查詢的地方使用參數(shù)化語句。而服務(wù)器端的參數(shù)化查詢無法在客戶端中使用,因而無法使用該方法防御客戶端二階SQL注入。屏蔽錯(cuò)誤消息和帶內(nèi)連接只是阻止了注入過程中獲得信息的途徑,而漏洞本身依然存在,可以利用其他方式獲取信息,因此無法提供對本文提出的3種新型二階注入攻擊的有效防御?;诎酌麊蔚妮斎腧?yàn)證雖然能夠防御各種二階SQL注入,但是在實(shí)際的應(yīng)用中大多數(shù)情況下無法使用白名單而必須使用黑名單,使攻擊者可以使用多種方式繞過輸入驗(yàn)證,因此也無法真正有效防御本文提出的3種新型二階SQ注入。配置數(shù)據(jù)庫用戶最小權(quán)限能有效防御SQL注入,尤其是需要較高權(quán)限才能實(shí)施的二階 SQL注入攻擊操作系統(tǒng)。但是二階盲注和客戶端二階SQL注入仍能夠在配置數(shù)據(jù)庫用戶最小權(quán)限的情況下有效實(shí)施。編碼輸入可以轉(zhuǎn)義用戶輸入中有特殊作用的符號(hào)。例如最為常用的雙重編碼單引號(hào)的方法,雖然可以在防御一階 SQL注入時(shí)能夠使攻擊載荷中的單引號(hào)失去分隔用戶輸入與語法的作用,但是Web應(yīng)用從數(shù)據(jù)庫中加載數(shù)據(jù)時(shí)卻會(huì)進(jìn)行還原,使這種方法無法對二階SQL注入攻擊實(shí)施有效防御。WAF通過檢測用戶輸入、監(jiān)測用戶行為、訪問控制等的方式對SQL注入進(jìn)行防御。但是,本文提出的3種新型二階SQL注入通過把注入過程分為了2個(gè)階段繞過WAF。在存儲(chǔ)階段使用多重編碼、替換、大小寫混合等的方式改變攻擊載荷的特征,而觸發(fā)階段是以正常請求數(shù)據(jù)庫中數(shù)據(jù)的方式觸發(fā)攻擊載荷,使WAF無法檢測出異常行為。此外,在3種新型的二階SQL注入中,客戶端二階SQL注入效果最好,因?yàn)樗贖TML5這樣的新規(guī)范產(chǎn)生的漏洞,而很多防御措施無法實(shí)施。二階SQL注入攻擊操作系統(tǒng)效果最差,因?yàn)樵摷夹g(shù)對環(huán)境有較為苛刻的要求,但是如果條件滿足,所造成的威脅也最大。

        5 結(jié)束語

        SQL注入從開始的不被重視到現(xiàn)在Web應(yīng)用普遍采用防注入措施,一直是影響Web安全的首要漏洞。二階SQL注入是SQL注入發(fā)展出的一種新技術(shù)。本文在分析二階SQL注入原理的基礎(chǔ)上提出了3種新型的二階SQL注入技術(shù),并通過實(shí)驗(yàn)證明這些新技術(shù)能夠避開現(xiàn)有 Web應(yīng)用防御措施實(shí)施攻擊,并對客戶端和服務(wù)器造成威脅。在未來工作中,需要進(jìn)一步研究如何對新型二階SQL注入漏洞及其利用攻擊進(jìn)行有效的檢測和防御的方法。

        [1] OSWAP. Category: OWASP top ten project [EB/OL].http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project.

        [2] 章思宇,姜開達(dá),韋建文, 等.基于 SQL-on-Hadoop的網(wǎng)絡(luò)日志分析[J].通信學(xué)報(bào),2014,35(Z1):14-19.ZHANG S Y,JIANG K D,WEI J W,et al. Network log analysis with SQL-on-Hadoop[J]. Journal on Communications, 2014, 35(Z1):14-19.

        [3] KIM M Y, LEE D H. Data-mining based SQL injection attack detection using internal query trees[J]. Expert Systems with Applications, 2014,41 (11):5416-5430.

        [4] SHAR L K, TAN H B K. Predicting SQL injection and cross site scripting vulnerabilities through mining input sanitization patterns[J].Information and Software Technology, 2013,55(10): 1767-1780.

        [5] JANG Y S, CHOI J Y. Detecting SQL injection attacks using query result size[J]. Computers & Security, 2014,44(7):104-118.

        [6] SHAR L K, TAN H B K. Defeating SQL injection[J]. IEEE Computer,2013,46(3):69-77.

        [7] 田偉,許靜,楊巨峰,等.模型驅(qū)動(dòng)的Web應(yīng)用 SQL注入滲透測試[J].高技術(shù)通訊,2012,22(11):1161-1168.TIAN W, XU J, YANG J F,et al. Model-driven penetration test of the SQL injection in Web applications[J]. Chinese High Technology Letters, 2012,22(11):1161-1168.

        [8] YAN L, LI X H, FENG R T,et al. Detection method of the second-order SQL injection in Web applications[J]. Lecture Notes in Computer Science, 2014, 8332:154-165.

        [9] 田玉杰,趙澤茂,張海川,等.二階 SQL 注入攻擊防御模型[J].信息網(wǎng)絡(luò)安全,2014,(11):70-73.TIAN Y J, ZHAO Z M, ZHANG H C,et al. Second-order SQL injection attack defense model [J]. Netinfo Security, 2014,(11):70-73.

        [10] PINZONA C I, PAZB J F D, HERRERO á,et al. idMAS-SQL:intrusion detection based on MAS to detect and block SQL injection through data mining[J]. Information Sciences, 2013,231(5):15-31.

        [11] KIEYZUN A, GUO P J, JAYARAMAN K,et al. Automatic creation of SQL Injection and cross-site scripting attacks[A]. Proceedings of the 31st International Conference on Software Engineering (ICSE), IEEE Computer Society[C]. Washington, DC, USA, 2009.199-209.

        [12] HALFOND W G J,VIEGAS J,ORSO A. A classification of SQL injection attacks and countermeasures[A]. Proceedings of the International Conference on Software Engineering[C]. Arlington, VA,USA, 2006.35-45.

        [13] DAHSE J, HOLZ T. Static detection of second-order vulnerabilities in Web applications[A]. Proceedings of the 23rd USENIX Conference on Security Symposium (USENIX)[C]. 2014.989-1003.

        [14] FOCARDI R, LUCCIO F L. SQUARCINA M. Fast SQL blind injections in high latency networks[A]. Proceedings of IEEE First AESS European Conference on Satellite Telecommunications (ESTEL)[C].2012.1-6.

        [15] SADEGHIAN A, ZAMANI M, IBRAHIM S. SQL injection is still alive: a study on SQL injection signature evasion techniques[A].Proceedings of International Conference on Informatics and Creative Multimedia (ICICM)[C]. 2013.265-268.

        [16] 王溢,李舟軍,郭濤等.防御代碼注入式攻擊的字面值污染方法[J].計(jì)算機(jī)研究與發(fā)展,2012,49(11):2414-2423.WANG Y,LI Z J,GUO T,et al. Literal tainting method for preventing code injection attack in Web application [J]. Journal of Computer Research and Development, 2012,49(11):2414-2423.

        [17] 王文明,李海煒.SQL服務(wù)器注入攻擊的主動(dòng)防御技術(shù)研究[J].計(jì)算機(jī)科學(xué),2012,39(z3):9-13.WANG W M,LI H W. Research of the active defense technology for the SQL server injection attack [J]. Computer Science, 2012,39(z3):9-13.

        [18] DAHSE J, KREINN N, HOLZ T. Code reuse attacks in PHP:automated POP chain generation[A]. Proceedings of ACM SIGSAC Conference on Computer and Communications Security (CCS)[C].New York, NY, USA,2014.42-53.

        [19] MICROSOFT. Time-based blind SQL injection with heavy queries[EB/OL]. https://technet.microsoft.com/en-us/library/cc512676.aspx. 2015.

        [20] Practical identification of SQL injection vulnerabilities[EB/OL].https://www.us-cert.gov/sites/default/files/publications/Practical-SQLi-Identification.pdf.2015.

        [21] MEIYAPPAN Y. Using the Web SQL database API in HTML 5[EB/OL]. http://www.databasejournal.com/sqletc/article.php/3903201/Using-the-Web-SQL-Database-API-in-HTML-5.htm.2015.

        [22] ALEXA. The top 1000 sites on the Web [EB/OL]. http://www.alexa.com/ topsites.2015.

        [23] BANDHAKAVF S, BISHT P, MADHUSUDAN P,et al. CANDID:preventing SQL injection attacks using dynamic candidate evaluations[A]. Proceedings of the 14th ACM Conference on Computer and Communications Security (CCS)[C]. New York, NY, USA,2007.12-24.

        猜你喜歡
        頁面數(shù)據(jù)庫用戶
        大狗熊在睡覺
        刷新生活的頁面
        數(shù)據(jù)庫
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        數(shù)據(jù)庫
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        如何獲取一億海外用戶
        无码人妻久久一区二区三区app| 中文字幕中文字幕三区| 日韩精品人妻系列中文字幕| 青娱乐极品视觉盛宴国产视频| 中文无码制服丝袜人妻av| 国产乱子伦视频一区二区三区| 人妻丰满精品一区二区| 九九综合va免费看| 国产精品三级在线观看无码| 国产精品无码久久久一区蜜臀| 国产午夜在线观看视频| 国产欧美在线观看不卡| 国产成人乱色伦区| 伊人婷婷色香五月综合缴激情| 日韩午夜三级在线视频| 放荡的美妇在线播放| 中文字幕一区二区三区精彩视频| 亚洲精品天堂av免费看| 亚洲一区二区三区精品久久av| 亚洲人精品午夜射精日韩| 国产肉丝袜在线观看| 欧美精品日韩一区二区三区| 福利视频偷拍一区二区| 婷婷射精av这里只有精品| 精品丝袜人妻久久久久久| 99久久国产一区二区三区| 青青草小视频在线播放| 午夜成人鲁丝片午夜精品| 天天插视频| 日本av一级视频在线观看| 一女被多男玩喷潮视频| 国产成人av一区二区三区无码| 免费人成黄页网站在线观看国内| 亚洲成人av在线第一页| 又爽又黄又无遮挡网站动态图| 国产精品国产三级在线高清观看| 国产日本精品一区二区免费| 亚洲精品乱码久久久久久中文字幕 | 久久久精品人妻一区二区三区妖精| 48沈阳熟女高潮嗷嗷叫| 国产自产av一区二区三区性色|