SQL注入中information_schema的作用


SQL注入中information_schema的作用

information_schema數據庫是MySQL自帶的,MySQL 5以下沒有這個數據庫,它提供了訪問數據庫元數據的方式.什么是元數據呢?元數據是關於數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等.也就是說information_schema中保存着關於MySQL服務器所維護的所有其他數據庫的信息.如數據庫名,數據庫的表,表欄的數據類型與訪問權限等.INFORMATION_SCHEMA,有數個只讀表.

 

SQL注入中,我們重點關注的表有如下幾個,因為主要的時候主要利用這幾個表來獲取數據:

SCHEMATA:提供了當前mysql數據庫中所有數據庫的信息,其中SCHEMA_NAME
段保存了所有的數據庫.show databases的結果取自此表.
TABLES:提供了關於數據庫中的表的信息,詳細表述了某個表屬於哪個schema,表類型,表引擎,創建時間等信息,其中table_name字段保存了所有列名信息,show tables from schemaname的結果取自此表.
COLUMNS:提供了表中的列信息.詳細表述了某張表的所有列以及每個列的信息,其中column_name保存了所有的字段信息.show columns from
schemaname.tablename的結果取自此表.


在注入中,我們可以通過注入select schema_name from schemata 來查詢的當前數據庫中所有的數據庫名.
如果你去查看一些爆數據庫名的注入語句,就會發現里面包含這么一句:select schema_name from information_schema.schemata limit 0,1,其原理就是通過查詢information_schema.schemataschema_name的結果,其中limit 01用來獲取第一條記錄,通過遞增第一個參數,可以每次獲取一條記錄,也就是一次獲取一個數據庫名,直到出現錯誤為止,說明沒有更多的錯誤.

 

information_schemaTABLES表中的TABLE_SCHEMTA字段是保存的數據庫名,TABLE_NAME保存了表名,那么我們就可以使用TABLE_SCHEMTA字段作為查詢條件,查詢TABLE_NAME,即可得知所有指定數據庫中的所有表名.比如,我們想要通過information_schema數據庫來查詢sqli數據庫中所有的表,那么就可以使用如下SQL語句:
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = 'sqli';

 

TABLE_SCHEMA保存了這條記錄保存的字段所屬的數據庫名,TABLE_NAME保存的是該字段所屬表名,COLUMN_NAME則是一個列名記錄;

columns,TABLE_NAME保存了字段所屬的表名,TABLE_SCHEMA保存了該字段所屬的庫名,與通過TABLES表獲取表名一樣,我們就可以查詢把TABLE_NAME TABLE_SCHEMA做為查詢條件,查詢符合條件的COLUMN_NAME,也就是查詢指定數據庫中某表中的字段.

比如,我們要通過information_schema數據庫的columns表查詢sqli數據庫中user表中所有的字段,可以執行如下SQL語句:

      select column_name from information_schema.columns where TABLE_SCHEMA='sqli' and TABLE_NAME='user';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM