千鋒教育網(wǎng)絡(luò)安全零基礎(chǔ)視頻教程-黑客攻防/Web安全/滲透測(cè)試/代碼審計(jì)/信息安

SQL注入漏洞基礎(chǔ)
前言
SQL:結(jié)構(gòu)化查詢語(yǔ)言
關(guān)系式數(shù)據(jù)庫(kù)管理系統(tǒng):有著明顯的層次結(jié)構(gòu)。流行的軟件如Mysql,Mssql,Access,Orcale等。
為了方便理解以Excel做類(lèi)比,單張表類(lèi)比為一個(gè)數(shù)據(jù)庫(kù),都是二維結(jié)構(gòu)。表頭類(lèi)比稱為字段名,內(nèi)容類(lèi)比稱為字段內(nèi)容。
SQL注入:常見(jiàn)的Web安全漏洞,攻擊者利用這個(gè)漏洞,可范文或修改數(shù)據(jù),或者利用潛在的數(shù)據(jù)庫(kù)漏洞進(jìn)行攻擊。
漏洞原理
針對(duì)SQL注入的攻擊行為可描述為通過(guò)用戶可控參數(shù)中注入SQL語(yǔ)法,破壞原有SQL結(jié)構(gòu)達(dá)到編寫(xiě)程序時(shí)意料之外結(jié)果的攻擊行為。
成因:
- 程序編寫(xiě)者在處理程序和數(shù)據(jù)庫(kù)交互時(shí),使用字符串拼接的方式構(gòu)造SOL語(yǔ)句。
- 未對(duì)用戶可控參數(shù)進(jìn)行足夠的過(guò)濾便將參數(shù)內(nèi)容拼接進(jìn)入到SQL語(yǔ)句中。
Web應(yīng)用在獲取用戶數(shù)據(jù)的地方,只要帶入數(shù)據(jù)庫(kù)查詢,都有存在SQL注入的可能,這些地方通常包括數(shù)據(jù):
@get @Post @HTTP @Cookie
漏洞危害:
攻擊者利用SQL注入漏洞,可以獲取數(shù)據(jù)庫(kù)中的多種信息 (例如:管理員后臺(tái)密碼),從而脫取數(shù)據(jù)庫(kù)中內(nèi)容(脫庫(kù))。在特別情況下還可以修改數(shù)據(jù)庫(kù)內(nèi)容或者插入內(nèi)容到數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)權(quán)限分配存在問(wèn)題,或者數(shù)據(jù)庫(kù)本身存在缺陷,那么攻擊者可以通過(guò)SQL注入漏洞直接獲取webshell或者服務(wù)器系統(tǒng)權(quán)限。
分類(lèi):
按數(shù)據(jù)類(lèi)型分類(lèi):
- 數(shù)字型注入:注入點(diǎn)的數(shù)據(jù)拼接到SQL語(yǔ)句中是以數(shù)字型出現(xiàn)的,即數(shù)據(jù)兩邊沒(méi)有被單引號(hào)、雙引號(hào)與括號(hào)。
- 字符型注入:注入點(diǎn)的數(shù)據(jù)拼接到SQL語(yǔ)句中是以字符型出現(xiàn)的,即數(shù)據(jù)兩邊含有單引號(hào)、雙引號(hào)與括號(hào)。
按注入手法分類(lèi):
- 聯(lián)合查詢:UNION query SQL injection (可聯(lián)合查詢注入)
- 報(bào)錯(cuò)注入:Error-based SQL injection (報(bào)錯(cuò)型注入)
- 布爾盲注:Boolean-based blind SQL injection (布爾型注入)
- 延時(shí)注入:Time-based blind SQL injection (基于時(shí)間延遲注入
- 堆疊查詢:Stacked queries SQL injection (可多語(yǔ)句查詢注入)
注釋?zhuān)?/h3>
-- (杠杠空格)
#
/* ...... */
/!....../
mysql 元數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)
information_schema
- Tables:所有的表名
- table_name:表名
- table_schema:所在數(shù)據(jù)庫(kù)
- columns:所有字段名
- column_name:所有字段所在列名
- table_name:所有字段所在表名
- tabel_schema:所有字段所在數(shù)據(jù)庫(kù)名
MYSQL 常用函數(shù)與參數(shù)
=/>/>=/<=/<>:比較運(yùn)算符
and/or:邏輯運(yùn)算符
version():mysql數(shù)據(jù)庫(kù)版本
database():當(dāng)前數(shù)據(jù)庫(kù)名
user():用戶名
current_user():當(dāng)前用戶名
system_user():系統(tǒng)用戶名
@@adatadir:數(shù)據(jù)庫(kù)路徑
@@versoin_compile_os:操作系統(tǒng)版本
length():返回字符串的長(zhǎng)度
substring():截取字符串
substr():從左側(cè)開(kāi)始取指定字符個(gè)數(shù)的字符串
mid():
1.截取的字符串
2.截取起始位,從1開(kāi)始
3,截取長(zhǎng)度
left():從左側(cè)開(kāi)始取指定字符個(gè)數(shù)的字符串
concat():沒(méi)有分隔符的連接字符串
concat_ws():含有分割符的連接字符串
group_conat():連接一個(gè)組的字符串
ord():返回ASCII碼
ascii():
hex():將字符串轉(zhuǎn)換為十六進(jìn)制
unhex():hex的反向操作
md5():返回MD5值
floor(x):返回不大于x的最大整數(shù)
round():返回參數(shù)X 接近的整數(shù)
rand():返回0-1 之間的隨機(jī)浮點(diǎn)數(shù)
load_file():讀取文件,并返回文件內(nèi)容作為一個(gè)字符串
sleep():睡眠時(shí)間為指定的秒數(shù)
if(true,t,f):if判斷
find_in_set():返回字符串在字符串列表中的位置
benchmark():指定語(yǔ)句執(zhí)行的次數(shù)
name_const():返回表作為結(jié)果