天天看點

學習筆記-SQL注入

資料庫簡介

資料庫(Database,DB)指的是以一定方式儲存在一起、能為多個使用者共享、具有盡可能小的備援度、與應用程式彼此獨立的資料集合。簡單來說可視為電子化的檔案櫃——存儲電子檔案的處所,使用者可以對檔案中的資料運作新增、截取、更新、删除等操作。

資料庫伺服器是指用來運作資料庫服務的一台電腦。在中小型企業通常為 一台,在資料存儲量計算量很大的時候可以存在多台。

資料庫,一個資料庫伺服器裡面有可以有多個資料庫。

資料表,例如在遊戲資料庫中,用來區分遊戲不同的資料。例如:使用者資料 (使用者、密碼);人物資料;所有裝備和裝備資訊;

資料字段也叫資料列。就是我們日常所見表格裡面的列。在表格中,我們 會将一張使用者表分成多個列。如下(表一)所示:使用者編号、使用者名、性别、 年齡是字段。

資料行,真正的資料存在每一個表的行裡面。字段(列)劃分出來了一個表 應該按照什麼樣的格式存資料。而行,是真正的資料。每一行需要遵循資料 字段(列)的規範和要求進行存入資料。

SQL就是用于操作資料庫的語言,全稱為結構化查詢語言(Structured Query Language),是一種用于存儲、操作或者檢索存儲在關系型資料庫中資料的計算機語言。

SQL注入漏洞原理

服務端沒有對使用者送出的參數進行嚴格的過濾,導緻可以将SQL語句插入到可控參數中,改變原有的SQL語義結構,進而執行攻擊者所預期的結果。

information_schema庫介紹

SCHEMATA表

目前 mysql 執行個體中所有資料庫的資訊。SHOW DATABASES; 指令就是從這個表擷取資料。包括catalog_name、schema_name、等字段。其中schema_name存儲所有的庫名。

TABLES表

存儲資料庫中的表資訊(包括視圖),包括表屬于哪個資料庫,表的類型、存儲引擎、建立時間等資訊。SHOW TABLES FROM XX; 指令從這個表擷取結果。 包括table_schema、table_name等字段,其中table_name存儲所有的表名,table_schema存儲與之對應的資料庫名。

COLUMNS表

存儲表中的列資訊,包括表有多少列、每個列的類型等。SHOW COLUMNS FROMXXX指令從這個表擷取結果。 包括table_schema、table_name、column_name等字段,其中column_name存儲所有的列名,table_name存儲與之對應的表名,table_schema存儲與之對應的庫名。

union操作符介紹

UNION用于合并兩個SELECT的結果集。

Union必須由兩條或者兩條以上的SELECT語句組成,語句之間使用Union連結 Union中的每個查詢必須包含相同的列、表達式或者聚合函數,他們出現的順序可以不一緻(這裡指查詢字段相同,表不一定一樣)

列的資料類型必須相容,相容的含義是必須是資料庫可以隐含的轉換他們的類型

聯合查詢注入

兩個查詢語句使用union進行連接配接時有個前提,必須保證列數一緻。是以我們得先判斷前面查詢的列數。一般判斷可以用order by number來判斷 例如order by 1即為按第一列進行排序,order by 2即為按第二列進行排序。是以當數字為不存在的列數時,則會報錯或與前面顯示内容不同。我們可以據此判斷列數。

萬能密碼的構造

假設我們使用者名傳入admin,密碼傳入1’ or '1,最終的sql語句變成了:select * from userinfo where username=‘admin’ and password=‘1’ or ‘1’ 這時候的判斷語句就變成永真式了,是以可以達到不知道使用者名密碼的前提下登入的目的。

報錯注入

利用頁面傳回的MySQL報錯資訊,将想得到的資料通過報錯資訊帶出。報錯注入利用條件是網站開啟了 SQL 報錯日志功能,否則無法使用報錯注入,具有一定的局限性。報錯注入的利用方式和MySQL版本有很大的關聯。

sqlmap簡介

SQLMAP是一個自動化的SQL注入工具,其主要功能是掃描,發現并利用給定的URL的SQL注入漏洞,目前支援的資料庫是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access,IBMDB2, SQLite, Firebird, Sybase和SAP MaxDB。

SQL注入正常防禦方式

  1. 、對使用者輸入的特殊字元進行嚴格過濾,如’、”、<、>、/、*、;、+、-、&、|、(、)、and、or、select、union。
  2. 、使用參數化查詢(PreparedStatement),避免将未經過濾的輸入直接拼接到SQL查詢語句中。
  3. 、Web應用中用于連接配接資料庫的使用者與資料庫的系統管理者使用者的權限有嚴格的區分(如不能執行drop等),并設定Web應用中用于連接配接資料庫的使用者不允許操作其他資料庫。
  4. 、設定Web應用中用于連接配接資料庫的使用者對Web目錄不允許有寫權限。

5)、使用Web應用防火牆。