官术网_书友最值得收藏!

2.1 SQL注入基礎

為了更好地了解 SQL 注入產生的原因及其原理,在實際操作中,通常可以直接使用 sqlmap 等注入工具快速進行滲透測試(相關內容會在第3章中介紹)。如果工具不能滿足需求,可以嘗試利用手工注入的方法進行滲透測試。

2.1.1 什么是SQL

SQL(Structured Query Language,結構化查詢語言)是一種具有特殊目的的編程語言,也是一種數據庫查詢和程序設計語言,用于存取數據及查詢、更新和管理關系型數據庫系統。sql是數據庫腳本文件的擴展名。

SQL 是一種高級的非過程化編程語言,允許用戶在高層數據結構上工作。它既不要求用戶指定數據存儲方式,也不需要用戶了解數據的具體存儲方式。它的底層結構極具特色,用戶可以將相同的結構化查詢語言作為數據輸入與管理的接口。SQL 語句可以嵌套,這使它具有極高的靈活性和強大的功能。1986年10月,美國國家標準協會對SQL進行了規范,以此作為關系型數據庫管理系統的標準語言(ANSI X3.135-1986)。1987年,SQL得到國際標準組織的支持,成為國際標準。不過,各種通用的數據庫系統在實踐過程中都對SQL規范進行了編改和擴充,因此,實際上不同數據庫系統之間的SQL無法完全相互通用。

結構化查詢語言包含以下六個部分。

1.數據查詢語言

數據查詢語言(Data Query Language,DQL)的語句稱為數據檢索語句,用于從表中獲得數據并確定數據將如何在應用程序中給出。DQL的基本結構是由SELECT子句、FROM子句和WHERE子句組成的查詢塊,保留字SELECT是DQL(也是所有SQL)使用最多的動詞。其他DQL常用保留字有WHERE、ORDER BY、GROUP BY、HAVING,它們常與各種類型的SQL語句一起使用。

2.數據操作語言

數據操作語言(Data Manipulation Language,DML)的語句包括動詞INSERT、UPDATE、DELETE,它們分別用于添加、修改、刪除表中的行。DML也稱為動作查詢語言。

3.事務處理語言

事務處理語言(Transaction Processing Language,TPL)的語句能夠確保被DML語句影響的表中的所有行及時得到更新。TPL語句包括BEGIN TRANSACTION、COMMIT、ROLLBACK,示例如下。

· GRANT:授權。

· REVOKE:撤銷授權。

· ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點。

· COMMIT [WORK]:提交。

在進行數據庫的插入、刪除和修改操作時,只有將事務提交到數據庫才算完成。在事務提交前,只有操作數據庫的人有權看到自己所做的事情,別人只有在事務提交后才可以看到。提交數據有三種類型,分別是顯式提交、隱式提交和自動提交。

· 顯式提交:用COMMIT命令直接完成的提交稱為顯式提交,格式為COMMIT。

· 隱式提交:用SQL命令間接完成的提交稱為隱式提交,包括ALTER、AUDIT、COMMENT、CONNECT、CREATE、DISCONNECT、DROP、EXIT、GRANT、NOAUDIT、QUIT、REVOKE和RENAME。

· 自動提交:若把AUTOCOMMIT設置為“ON”,則在插入、修改、刪除語句執行后,系統將自動進行提交。自動提交的命令格式為“SET AUTOCOMMIT ON”。

4.數據控制語言

數據控制語言(Data Control Language,DCL)用于授予或收回訪問數據庫的某種特權,并控制數據庫操縱事務發生的時間和效果、對數據庫進行監視等。DCL語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。對某些RDBMS,可使用GRANT或REVOKE控制對表中某個列的訪問。

5.數據定義語言

數據定義語言(Data Definition Language,DDL)的語句包括動詞CREATE和DROP,用于創建數據庫中的各種對象、表、視圖、索引、同義詞、聚簇等。DDL包含許多用于從數據庫目錄中獲得數據的保留字,也是動作查詢的一部分。

6.指針控制語言

指針控制語言(Cursor Control Language,CCL)的語句用于對一個或多個表中單獨的行進行操作,例如DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT。

2.1.2 什么是SQL注入

所謂SQL注入是指攻擊者通過把SQL命令插入Web表單并提交,或者通過輸入域名或頁面請求的查詢字符串,達到欺騙服務器執行惡意SQL 命令的目的。除了 URL 提交,攻擊者還可能通過抓包的方法在文件頭等地方進行SQL注入。

簡單地說,SQL注入就是一種通過操作輸入(可以是表單、GET請求、POST請求等)插入或修改后臺的SQL語句執行代碼,從而進行攻擊的技術。攻擊者使用SQL注入能夠訪問SQL服務器、在用戶特權下執行SQL代碼、連接數據庫、顯示或隱藏查詢結果。

2.1.3 SQL注入攻擊的產生原因及危害

產生SQL注入攻擊的主要原因是:程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行嚴格的判斷和過濾。

輕微的 SQL 注入攻擊會導致數據庫中的內容被攻擊者獲取。嚴重的 SQL 注入攻擊會導致服務器權限被非法獲取,甚至導致內網或同網段滲透。多年來,SQL注入攻擊位列OWASP十大安全漏洞之首,如圖2-1所示。

圖2-1 OWASP十大安全漏洞

2.1.4 常見的SQL注入工具

下面介紹八種常見的SQL注入工具。讀者可以大致了解每種工具的特點,根據本章鏈接列表中的地址下載相應的工具,進行實戰演練。

1.sqlmap

sqlmap是一款綜合性的自動SQL注入工具,主要通過Python腳本實現,在Kali等滲透測試平臺上是默認配置的。sqlmap 可以執行一個廣泛的數據庫管理系統后端指紋,檢索 DBMS 數據庫、usernames、表格、列并列舉整個 DBMS 的信息。sqlmap 提供轉儲數據庫表,以及從 MySQL、PostgreSQL、SQL Server服務器下載或上傳文件并執行代碼的能力。

2.Pangolin

Pangolin是一款幫助滲透測試人員進行SQL注入測試的安全工具。Pangolin與JSky(Web應用安全漏洞掃描器,Web應用安全評估工具)都是NOSEC公司的產品,被國內安全公司360收購,目前已經不再更新了。Pangolin 具備友好的圖形界面,支持測試幾乎所有數據庫,例如 Access、MSSQL、MySQL、Oracle、Informix、DB2、Sybase、PostgreSQL、Sqlite。Pangolin能夠通過一系列非常簡單的操作達到攻擊測試效果,從檢測注入到控制目標系統都給出了測試步驟。Pangolin 是國內使用較為廣泛的SQL注入測試安全軟件。

3.Safe3 SQL Injector

Safe3 SQL Injector是一款易于使用的滲透測試工具,可以自動檢測和利用SQL注入漏洞。Safe3 SQL Injector具備讀取MySQL、Oracle、PostgreSQL、SQL Server、Access、SQLite、Firebird、Sybase、SAP MaxDB等數據庫的能力,同時支持向MySQL、SQL Server寫文件,以及在SQL Server和Oracle中執行任意命令。Safe3 SQL Injector也支持基于Error-Based、Union-Based和Blind Time-Based的注入攻擊。目前,Safe3 SQL Injector已經不再更新,其早期版本的下載地址見鏈接2-1。

4.Havij

Havij是一款自動化SQL注入工具,能夠幫助滲透測試人員發現和利用Web應用程序的SQL注入漏洞。Havij 不僅能夠自動挖掘可利用的 SQL 查詢語句,還能識別后臺數據庫類型、檢索數據的用戶名和密碼散列值、轉儲表和列、從數據庫中提取數據,甚至訪問底層文件系統、執行系統命令(當然,前提是有一個可利用的SQL注入漏洞)。Havij支持多種數據庫系統,例如MSSQL、MySQL、Access、Oracle。

5.BSQL Hacker

BSQL Hacker是由Portcullis Labs(見鏈接2-2)開發的,是一款SQL自動注入工具(支持SQL盲注),設計目的是對數據庫進行SQL 溢出注入測試。BSQL Hacker可以自動對Oracle和MySQL數據庫進行攻擊測試,并自動提取數據庫的數據和架構,其開源版本的下載地址見鏈接2-3。

6.The Mole

The Mole(見鏈接2-4)是一款開源的自動化SQL注入工具,只需提供一個URL和一個可用的關鍵字就能檢測注入點并進行利用。The Mole可以使用聯合注入技術和基于邏輯查詢的注入技術,使用范圍包括SQL Server、MySQL、Postgres和Oracle數據庫。

7.SQLninja

SQLninja是用Perl編寫的,設計目的是利用Web應用程序中的SQL注入漏洞進行滲透測試。以SQL Server作為后端支持,SQLninja能為存在漏洞的數據庫服務器提供一個遠程的外殼,甚至在有著嚴格防范措施的環境中也能如此。其下載地址見鏈接2-5。

8.sqlsus

sqlsus(見鏈接2-6)是一款源開的MySQL注入和接管工具,是使用Perl編寫的,具有命令行界面。sqlsus可用于獲取數據庫結構、注入SQL語句、從服務器中下載文件、獲取Web站點可寫目錄、上傳和控制后門、克隆數據庫等滲透測試工作。

主站蜘蛛池模板: 柳州市| 洛隆县| 西林县| 女性| 洮南市| 丹寨县| 涟水县| 钟祥市| 周口市| 镇坪县| 潞城市| 沧源| 嵊州市| 新干县| 芦山县| 荥阳市| 桑植县| 临泉县| 黄浦区| 延吉市| 延庆县| 蓝田县| 乌兰浩特市| 绥化市| 荃湾区| 光山县| 喀喇| 简阳市| 驻马店市| 正宁县| 进贤县| 民丰县| 庐江县| 临桂县| 边坝县| 门源| 铁力市| 阿拉善右旗| 渑池县| 遵化市| 浮梁县|