SQL注入原理之不安全的資料庫配置

2021-09-27 11:45:01 字數 1939 閱讀 8245

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...