1、預設的使用者
資料庫帶有很多預設的使用者安裝內容。sql server使用聲名狼藉的「sa」作為資料庫系統管理員賬戶,mysql使用「root」和「anonymous」使用者賬戶,oracle則在建立資料庫時通常缺省會建立sys、system、dbsnmp和outln賬戶,當然這並非全部的賬戶。
應用開發人員在編寫程式**是,通常使用某個內建的許可權賬戶來連線資料庫,而不是根據程式需要老建立特徵使用者賬戶。
2、附加內容
攻擊者在利用sql注入漏洞時,通常會嘗試訪問資料庫的元資料。元資料是指資料庫內部包含的資料,比如資料庫或表的名稱、列的資料型別或訪問許可權。優勢也適用資料字典和系統目錄等其他項來表示這些資訊。
mysql伺服器(5.0及之後的版本)的元資料位於information_schema虛擬資料庫中,可通過show databases和show tables命令訪問。所有mysql使用者均有權訪問該資料庫中的表,但只能檢視表中那些與該使用者訪問許可權相對應的行。
sql server的原理與mysql類似,可通過information_schema或系統表(sysobjects、sysindexkeys、sysindexes、syscolumns、systypes等)及系統儲存過程來訪問元資料。sql server 2005引入了一些名為「sys.*」的目錄檢視,並限制使用者只能訪問擁有相應訪問許可權的物件。所有的sql server使用者均有許可權訪問資料庫中的表並可以檢視表中的所有行,而不管使用者是否對錶或所查詢的資料擁有相應的訪問許可權。
oracle提供了恨過全域性內建檢視來訪問oracle的元資料(all_tables、all_tab_columns等)。這些檢視列出了當前使用者可訪問的屬性和物件。此外,以user_開頭的檢視只顯示當前使用者擁有的物件(列如,更加受限的元資料檢視);以dba_開頭的檢視顯示資料庫中所有物件。dba_元資料函式需要有資料庫管理員dba許可權。
語句示例
oracle語句,列舉當前使用者可訪問的所有表
select owner,table_name from all_tables order
by table_name;
mysql語句,列舉當前使用者可訪問的所有表和資料庫
select table_schema, table_name from information_schema.
tables
;
ms sql語句,使用系統表列舉所有可訪問的表
select name from sysobjects where xtype =
'u';
ms sql語句,使用目錄檢視列舉所有可訪問的表
select name from sys.
tables
;
3、通過sql方言推理識別資料庫平台
平台連線符
行注釋唯一的預設表、變數或函式
int轉char函式
ms sql server
『a』+『b』
–@@pack_received
char(0x41)
oracle
『a』||'b』
concat(『a』,『b』)
–bitand(1, 1)
chr(65)
mysql
『a』 'b』
concat(『a』,『b』)#–
connection_id()
char(0x41)
access
「a」&「b」
n/amsysobjects
chr(65)
postgresql
『a』||『b』
–getpgusername()
chr(65)
db2『a』 concat 『b』
–sysibm.systables
chr(65)
mysql資料庫sql注入原理 SQL注入原理
結構化查詢語句 structured query language,縮寫 sql 是一種特殊的程式語言,用於資料庫中的標準資料查詢語言。sql注入 sql injection 是一種常見的web安全漏洞,攻擊者利用這個問題,可以訪問或者修改資料,或者利用潛在的資料庫漏洞進行攻擊。什麼是sql注入?s...
c語言不安全庫 C語言 那些不安全的庫函式
c語言 那些不安全的庫函式 c和c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中...
資料庫隔離級別 從最不安全到最安全
read uncommitted 俗稱髒讀 讀寫均不使用鎖,資料的一致性最差,也會出現許多邏輯錯誤。read committed 使用寫鎖,但是讀會出現不一致,不可重複讀。repeatable read 俗稱幻讀 使用讀鎖和寫鎖,解決不可重複讀的問題。mysql預設資料隔離級別 serializab...