成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

一文搞懂SQL注入攻擊

瀏覽:266日期:2023-05-02 10:03:24
目錄
  • 1. 前言
  • 2. SQL注入簡介
    • (1)SQL語言
    • (2)SQL注入
  • 3. SQL注入步驟
    • (1)發現漏洞
    • (2)信息收集
    • (3)攻擊Web系統(猜解用戶名和密碼)
    • (4)獲取管理員權限
  • 4. 防范SQL注入
    • (1)使用參數化查詢或存儲過程
    • (2)用戶輸入檢測
    • (3)SQL語法分析
    • (4)其他

1. 前言

隨著互聯網的發展和普及,網絡安全問題越來越突出,網絡在為用戶提供越來越多服務的同時,也要面對各類越來越復雜的惡意攻擊。SQL注入(SQL Injection)攻擊是其中最普遍的安全隱患之一,它利用應用程序對用戶輸入數據的信任,將惡意SQL代碼注入到應用程序中,從而執行攻擊者的操作。這種攻擊可以導致敏感信息泄露、數據損壞或刪除及系統癱瘓,給企業和個人帶來巨大損失。因此,如何防范SQL注入攻擊成為了網絡安全領域的一個重要議題。

在國外,SQL注入最早出現在1999年;在我國大約出現在2002年。2015年,約翰·卡特爾(John McAfee)的網站遭到了SQL注入攻擊,導致黑客獲取了網站上全部的注冊用戶信息。2016年,Yahoo公司披露了兩起大規模數據泄露事件,其中涉及的一次就是通過SQL注入攻擊獲得的。2017年,Equifax公司遭到了一次嚴重的數據泄露事件,泄露了超過1.43億條用戶記錄。調查人員發現,攻擊者使用了SQL注入攻擊。

可見,SQL注入攻擊破壞敏感數據的完整性和可用性,給網絡用戶和企業造成了巨大的生活困擾和經濟損失。

2. SQL注入簡介

(1)SQL語言

Structured Query Language(簡稱SQL)是—種結構化查詢語言,一種數據庫文本語言。SQL用于同關系數據庫進行交互,能夠執行對數據庫的查詢、獲取數據庫的信息、向數據庫插入新的紀錄、刪除及更新數據庫中的記錄。

SQL有很多種類,但大多都基于ANSI標準SQL-92。SQL執行的單位是一個“query”,該“query”可以是一系列語句集合,返回一個結果集。SQL語句可以修改數據庫結構(使用數據定義語言DDL)和操作數據庫內容(使用數據操作語言DML)。SQL語言本身造成了SQL注入漏洞,給SQL注入攻擊帶來了可能性。

(2)SQL注入

SQL注入攻擊是一種利用應用程序漏洞的攻擊方式。攻擊者通過向應用程序發送構造的惡意SQL語句,欺騙應用程序執行這些SQL語句,如果Web應用沒有適當的驗證用戶輸入的信息,攻擊者就有可能改變后臺執行的SQL語句的結構,獲取相應結果。攻擊者可以利用SQL注入漏洞獲取數據庫中的敏感信息,修改或刪除數據庫中的數據,或者完全控制Web服務器。

比如基于表單登錄功能的應用程序,通過執行一個簡單的SQL查詢來確認每次登錄,以下是這個查詢的一個典型實例:

SELECT * FROM users WHERE username="alice" and password="secret"

這個查詢要求數據庫檢查用戶表中的每一行,提取username值為alice并且password值為secret的記錄。如果返回一條用戶記錄,該用戶即可成功登錄。

攻擊者可注入用戶名或密碼字段來修改程序執行的查詢,一般是輸入雙連字符(--)注釋掉其余部分或類似’ or ‘1’ =‘1用引號包含的字符串數據來“平衡引號”,來破壞查詢的邏輯。比如攻擊者可以通過提交用戶名為alice’--alice’ or ‘1’=‘1,密碼為任意,應用程序將執行以下查詢:

SELECT * FROM users WHERE username="alice"--‘" and password="any"

SELECT * FROM users WHERE username=" alice" or ‘1"=‘1" and password="any"

這兩條查詢均等同于

SELECT * FROM users WHERE username="alice"

從而避開了密碼檢查,成功登錄。

因此SQL注入漏洞本質上是針對程序員編程中的漏洞,利用SQL的語法在應用程序與數據庫交互的SQL語句中插入精心編制的額外的SQL語句,從而對數據庫進行非法查詢和修改。由于程序運行SQL語句時的權限與當前該組建(例如,數據庫服務器、Web應用服務器)的權限相同,而這些組件一般的運行權限都很高,而且經常是以管理員的權限運行,所以攻擊者可能獲得數據庫的完全控制,并執行系統命令。

3. SQL注入步驟

SQL注入攻擊有多種類型,包括基于錯誤的注入、聯合查詢注入、堆疊查詢注入等。其中,基于錯誤的注入是最常見的類型。攻擊者通過發送包含惡意SQL語句的輸入數據來觸發應用程序中的錯誤,從而獲取有關數據庫結構和內容的信息。

(1)發現漏洞

可以用經典的1=1,1=2測試法測試SQL注入是否存在。

以http://www.test.com/profile.do?id=113為例,使用以下測試方案:

  • http://www.test.com/profile.do?id=113’
  • http://www.test.com/profile.do?id=113 and 1=1
  • http://www.test.com/profile.do?id=113 and 1=2

(2)信息收集

確認系統表是否存在,主要利用Oracle數據庫中以下系統表:

  • all_tables:存放當前ID和其他用戶的所有表
  • user_tables:存放當前用戶所有表
  • user_tab_columns:存放當前用戶表的所有列

測試以下URL:

  • http://www.test.com/profile.do?id=113’and 0<>(select count(*) from all_tables) and '1'='1
  • http://www.test.com/profile.do?id=113’and 0<>(select count(*) from user_tables)and '1'='1
  • http://www.test.com/profile.do?id=113’and 0<>(select count(*) from user_tab_ columns) and '1'='1

 如果以上頁面都能正確返回,說明存在猜測的系統表。

(3)攻擊Web系統(猜解用戶名和密碼)

首先查找當前用戶是否有敏感列名:

"and 0<>(select count(*) from user_tab_columns where column_name like "%25PASS%25") and "1"="1

正常返回說明存在類似PASS的字段,猜解該字段對應的表名。先確定表名的長度(不斷改變length(table_name)后的數值):

"and 0<>(select count(*) from user_tables where length(table_name)>8 and table_ name like"%25PASS%25") and "1"="1

利用ASCII二分法猜解表名(不斷改變substr函數的參數及比較值):

"and  (ascii(substr((select table_name from user_tab_columns where column_name like "%PASS%" And Rownum<=1),1,1))>64) and "1"="1

猜字段同樣先確定長度,然后利用ASCII二分法猜解字段名:

"and 0<>(select count(*) from user_tables where table_name="T_SYSUSER"and length (column_ name) >8  and column_name like "%PASS%") and "1"="1
"and  (ascii(substr((select column_name from user_tab_columns where table_name ="T_SYSUSER" and column_name like "%25PASS%25"),1,1))>64) and "1"="1

得到用戶表的USERNAMEPASSWD兩列的名稱后,依然是利用ASCII碼猜解法來一步一步確定USERNAMEPASSWD的值,不再詳述。

(4)獲取管理員權限

要想獲取對系統的完全控制,還要有系統的管理員權限。Oracle包含許多可在數據庫管理員權限下運行的內置存儲過程,并發現在這些存儲過程中存在SQL注入漏洞。2006年7月補丁發布之前,存在于默認包SYS.DBMS_ EXPORT_EXTERSION.GET_DOMAIN_INDEX_TABLES中的缺陷就是一個典型的示例。攻擊者可以利用這個缺陷,在易受攻擊的字段中注入GRANT DBA TO PUBLIC查詢(需要換成char形式)來提升權限。

這種類型的攻擊可通過利用Web程序中的SQL注入漏洞,在易受攻擊的參數中輸入函數來實現。許多其他類型的缺陷也影響到Oracle的內置組件。一個示例是CTXSYS.DRILOAD.VALIDATE_STMT函數。這個函數的目的是檢查一個指定的字符串中是否包含一個有效的SQL語句。早期Oracle版本中,在確定被提交的語句的過程中,這個函數實際執行了該語句。這意味著任何用戶只需向這個函數提交一個語句,就能夠作為數據庫管理員執行該語句。例如:

exec CTXSYS.DRILOAD.VALIDATE_STMT(‘GRANT DBA TO PUBLIC")

除這些漏洞外,Oracle還含有大量默認功能,這些功能可被低權限用戶訪問,并可用于執行各種敏感操作,建立網絡連接或訪問文件系統。比如,可利用UTL_HTTP 包里面的 request函數構造注射,來建立用戶,并賦予DBA權限。

4. 防范SQL注入

(1)使用參數化查詢或存儲過程

參數化查詢分兩個步驟建立一個包含用戶輸入的SQL語句:

  • 應用程序制定查詢結構,為用戶輸入的每個數據預留占位符;
  • 應用程序制定每個占位符的內容。
    在第二步中指定的專門設計的數據無法破壞在第一步中指定的查詢結構。由于查詢結構已經確定,且相關API 對任何類型的占位符數據進行安全處理,因此它總被解釋為數據,而非語句結構的一部分。

 Java提供以下API,允許應用程序創建一個預先編譯的SQL語句,并以可靠且類型安全的方式指定它的參數占位符的值:

 java.sql.Connection.prepareStatement
 java.sql.PrepareStatement.*

使用如下:

String username = request.getParameter("j_username");
String passwd = request.getParameter("j_password");
String query = "select * from t_sysuser where username=? and passwd=?";
PreparedStatement stmt = con.prepareStatement(query);
stmt.setString(1, username);
stmt.setString(1, passwd);
ResultSet rs=stmt.executeQuery();

如果用戶提交的用戶名為alice’ or 1=1--,密碼為any,生成的查詢等同于:

select * from t_sysuser where username= ‘alice" ‘or 1=1--" and passwd="any"

由此可見使用參數化查詢可以有效防止SQL注入,應在每一個數據庫查詢中使用參數化查詢。如果僅注意用戶直接提交的輸入,二階SQL注入攻擊就很容易被忽略因為已經被處理的數據被認為是可信的。另外參數占位符不能用于指定查詢中表和列的名稱,如果應用程序需要根據用戶提交的數據在SQL查詢中指定這些數據行,需要使用一份由已知可靠的值組成的“白名單”(即數據庫中表和列的名稱),并拒絕任何與這份名單上數據不匹配的輸入項。或者對用戶輸入實施嚴格的確認機制。

使用存儲過程的原理與參數化查詢類似,傳入的參數在最后被執行的SQL語句中會被數據庫服務器軟件進行處理,使得輸入的字符串會被當作一個單純的文本參數參與到SQL查詢中。不論是攻擊者輸入什么參數都不會改變設計者編寫的SQL語句的語義,也就防止了SQL注入。另外由于存儲過程是預編譯的,對復雜的SQL語句,效率有很大程度上的提升,還可以進一步減少查詢時客戶端發送到服務端的數據包。

(2)用戶輸入檢測

對輸入進行檢測一般是在客戶端和服務器端利用正則表達式來匹配SQL的特殊字符及其等值的十六進制形式,包括單引號(’)、雙重破折號(–)、SELECT、UNION等查詢關鍵字,然后對其進行替換或者過濾。但是在所有的接受輸入的程序部分都嚴格的執行檢測卻很難,而且會產生誤報。

(3)SQL語法分析

SQL注入根源在于對于用戶提交的請求沒有足夠的驗證機制,正常的用戶輸入是具有邏輯整體含義的簡單結構,而實施 SQL 注入的字符串一定是包含 SQL語法片段的復合結構。 SQL 注入攻擊本質上是希望后臺數據庫的 SQL 解釋程序按照不同的方式解釋組裝好的 SQL 語句,如果用戶輸入的字符串不包含 SQL 語法片段,顯然無法達到這個目的。

靜態代碼分析中能從語法、語義上理解程序行為,直接分析被測程序特征,尋找可能導致錯誤的異常。因此可以在服務器端采用一種類似于靜態代碼分析的SQL 語法預分析策略來防止SQL注入。首先將 SQL 注入分類,并對其進行詞法分析和語法分析,抽象出各類注入的語法結構,生成語法分析樹;能夠利用該語法分析樹通過機器學習的方法來得到預想的SQL注入的集合,并從該集合中生成新的語法分析樹;然后將用戶提交的輸入預先組裝成完整的 SQL 語句,對該語句進行語法分析,如果發現具有 SQL 注入特征的語法結構,則判定為 SQL 注入攻擊。判定的唯一依據是抽象的語法結串,而非具體的特征字符串,避免了傳統的特征字符串匹配策略固有的高識別率和低誤判率之間的矛盾。

由于SQL注入利用的是正常的服務端口,在各類Web應用中已不能通過使用防火墻,SSL等網絡層保護技術來阻止應用層攻擊,也就是說安全邊界擴展到了系統源代碼。因此,必須通過防范軟件代碼中存在的安全漏洞,從而保障系統的安全。

(4)其他

通過在程序中對口令等敏感信息加密,(一般采用MD5函數),另外在原來的加密的基礎上可以增加一些非常規的方式,即在MD5加密的基礎上附帶一些值 如密文=MD5 (MD5 (明文)+系統時間);編碼時注意屏蔽網頁上顯示的異常與出錯信息,并對源代碼進行安全審查及軟件安全測試。

安全配置服務器,包括目錄最小化權限設置:給靜態網頁目錄和動態網頁目錄分別設置不同權限,盡量不給寫目錄權限;修改或者去掉 Web 服務器上默認的一些危險命令,例如ftp、cmd等 需要時再復制到相應目錄;正確配置iptables及Oracle的sqlnet.ora文件,通過IP地址限制對于數據庫訪問。

以上就是一文搞懂SQL注入攻擊的詳細內容,更多關于SQL注入攻擊的資料請關注其它相關文章!

標簽: MsSQL
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲线精品一区二区三区 | 91精品国产色综合久久不卡蜜臀 | 亚洲一区二区三区爽爽爽爽爽 | 丁香亚洲综合激情啪啪综合| 一道本成人在线| 一区二区三区成人在线视频| 一区在线观看| 国产三级欧美三级| av网站免费线看精品| 在线播放日韩导航| 精品亚洲国产成人av制服丝袜| 久久国产一区| 亚洲欧美电影一区二区| 亚洲午夜精品久久久久久app| 26uuu亚洲婷婷狠狠天堂| 久久精品免费观看| 欧美二区在线| 69精品人人人人| 日本三级亚洲精品| 国产欧美日韩伦理| 国产婷婷色一区二区三区| 国产成人综合亚洲91猫咪| 欧美中文一区二区三区| 天天射综合影视| 亚洲尤物影院| 亚洲欧美日韩国产成人精品影院| 欧美区日韩区| 久久亚洲免费视频| 国产91清纯白嫩初高中在线观看 | 日韩国产欧美视频| 一区二区av| 中日韩免费视频中文字幕| 成人一区二区视频| 欧美一区二区三区免费观看视频 | 国产一区二区三区美女| 玖玖视频精品| 亚洲一区视频在线观看视频| 亚洲激情影院| 国产精品久久久久久久久久免费看| 国产成人精品一区二区三区四区| 欧美高清视频一二三区| 黑人精品欧美一区二区蜜桃| 在线影院国内精品| 免费在线观看不卡| 在线视频欧美精品| 免费成人深夜小野草| 在线观看区一区二| 久久精品国产久精国产| 欧美日韩久久一区| 久久爱www久久做| 欧美午夜一区二区| 国模大尺度一区二区三区| 欧美日韩aaaaa| 国产一区二区三区精品欧美日韩一区二区三区 | 一本色道**综合亚洲精品蜜桃冫| 亚洲一区成人在线| 亚洲一区二区三区精品动漫| 亚洲精品国产无天堂网2021| 在线日韩中文| 亚洲人精品午夜| 夜夜爽av福利精品导航| 亚洲三级在线观看| 国产日韩欧美三级| 久久久久久电影| 欧美凹凸一区二区三区视频| 国产欧美精品国产国产专区| 欧美亚韩一区| 一区视频在线播放| 国产精品毛片| 日韩专区在线视频| 欧美久久一二三四区| 国产91清纯白嫩初高中在线观看| 欧美电影免费观看完整版| eeuss鲁片一区二区三区在线观看| 久久亚洲一区二区三区明星换脸 | 亚洲激情综合网| 亚洲一区精彩视频| 日本欧美一区二区三区乱码| 欧美日韩国产一二三| 成人动漫中文字幕| 中文字幕一区二区视频| 亚洲影院一区| 九九精品视频在线看| 欧美xxxxx牲另类人与| 欧美+日本+国产+在线a∨观看| 欧美国产日韩精品免费观看| 亚洲午夜在线观看| 亚洲影视在线播放| 在线观看日韩一区| 成人免费观看av| 国产精品久久久久影院亚瑟 | 久久成人18免费观看| 日韩一区二区三| 女生裸体视频一区二区三区 | 一区二区不卡在线播放| 一本久久精品一区二区| 国产一区二区三区在线观看精品| 精品卡一卡二卡三卡四在线| 一区二区亚洲| 日本sm残虐另类| 日韩免费性生活视频播放| 欧美日韩精品| 亚洲制服丝袜av| 欧美老女人在线| 女人天堂亚洲aⅴ在线观看| 中文字幕中文乱码欧美一区二区| 一区二区三区欧美在线| 偷拍一区二区三区四区| 91精品久久久久久久久99蜜臂 | 欧美日本在线| 一区二区三区在线不卡| 在线观看91精品国产入口| 国产成人鲁色资源国产91色综| 国产精品久久久久久久第一福利 | 青青国产91久久久久久| 91精品国产综合久久蜜臀| 91免费观看视频| 亚洲精品国产精品乱码不99 | 午夜免费电影一区在线观看| 亚洲va中文字幕| 精品婷婷伊人一区三区三| 欧美日韩1区| 午夜欧美电影在线观看| 日韩一区二区在线播放| 日韩视频久久| 国产成人综合在线| 亚洲色图.com| 欧美高清dvd| 黄色日韩在线| 久久成人久久鬼色| 亚洲国产精品成人综合色在线婷婷| 久久男女视频| 午夜久久久久久电影| 精品国产污污免费网站入口| 亚洲综合国产| 丁香婷婷综合网| 亚洲午夜一二三区视频| 精品99一区二区三区| 亚洲一区二区三区四区五区午夜| 成人在线视频一区| 亚洲国产精品久久人人爱| 精品伦理精品一区| 久久亚洲欧美| 欧美人与禽猛交乱配| 激情综合网av| ...xxx性欧美| 91精选在线观看| 国产精品免费在线| 不卡视频免费播放| 日日嗨av一区二区三区四区| 国产日韩精品一区二区浪潮av| 91黄色激情网站| 在线看片一区| 不卡av在线免费观看| 午夜精品福利一区二区蜜股av | 欧美精品国产一区| 久久99精品久久久久久国产越南| 国产精品久久久久久一区二区三区| 在线视频欧美精品| 欧美黄色一区| 亚洲国产色一区| 国产三级欧美三级日产三级99| 色哦色哦哦色天天综合| 成人h精品动漫一区二区三区| 一区二区三区四区在线免费观看| 日韩免费看网站| 色天使久久综合网天天| 亚洲国产一区二区三区高清| 成人高清视频在线观看| 久久爱另类一区二区小说| 亚洲一区二区不卡免费| 国产精品无人区| 欧美精品一区二区三区在线| 欧美日韩国产影片| 欧美亚洲在线| 欧美日本一区| 成a人片亚洲日本久久| 韩日欧美一区二区三区| 午夜视黄欧洲亚洲| 国产亚洲欧洲997久久综合 | 欧美一区二区在线观看| 久久久久综合| 亚洲国产三级| 91片黄在线观看| 成人免费福利片| 韩国女主播成人在线| 日韩精品电影一区亚洲| 国产精品久久久久久久久搜平片| 日韩欧美不卡在线观看视频| 欧美性一级生活| 蜜桃久久av| 午夜亚洲激情| 在线一区免费观看| 亚洲国产一区二区三区a毛片| 欧美一区二区三区久久精品| 成人激情图片网| 国产成人免费视| 国产在线精品免费| 久久精品久久综合| 日韩不卡在线观看日韩不卡视频|