sql注入原理 mysql相關知識點

2022-09-07 13:21:06 字數 3465 閱讀 6338

sql就是經常說的資料庫,而sql注入就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug來實現攻擊,而是針對程式設計師編寫時的疏忽,通過sql語句,實現無賬號登入,甚至篡改資料庫。

舉個mysql簡單的例子,資料庫中有張users表

當和資料庫互動的時候,我們設和前端互動的語句是

select * from users where username='

$user

' and password='

$passwd

';

當正常輸入的賬號密碼,此sql語句變成了

但九年義務教育總會出現那麼幾股泥石流,假設輸入的admin' or 1=1 #,那麼此時的sql語句變成了

這樣就造成了sql注入

上述是乙個簡單的注入事例,實際中,還分不同種類的sql注入 

數字型注入:輸入引數為整型時,如id、年齡和頁碼等;

字元型注入:輸入引數為字串型時,如姓名、職業、住址等;

get注入:注入字元在url引數中;

post注入:注入欄位在post提交的資料中;

cookie注入:注入欄位在cookie資料中,**使用通用的防注入程式,會對get、post提交的資料進行過濾,卻往往遺漏cookie中的資料進行過濾。

其他注入:http請求的其他內容觸發的sql注入漏洞;

盲注入:盲注入不會展現任何資料庫報錯內容,它是依據構造真或假的問題對資料庫進行「提問」,注入方式主要有兩種:基於布林值與基於時間。

3.1、基於布林值

如在mysql中判斷資料名長度的輸入為1' and length(database()) = 10 #,通過相應的正確與否判斷資料名的長度是否為10,猜測資料庫中資料的具體內容時,可以借助書本上substr、limit、ascii等一些特殊的命令及函式進行猜測;

3.2、基於時間

基於時間的sql盲注入方式通常是在sql語句中新增延時函式,依據相應時間來判斷是否存在sql注入,常用的延時函式或指令有sleep、repeat等。

延時注入:使用延時函式方式;

搜尋注入:注入點在搜尋框中;

編碼注入:將輸入的字串進行編碼,如base64編碼;

堆查詢注入:同時執行多條語句;

聯合查詢注入:使用union操作碼合併兩條或多條sql語句;

多階注入:由多個http請求響應共同完成的注入;

(後續會在sqli-libs裡詳細介紹這些注入型別的利用,這次絕對不咕)1、永遠不要相信使用者輸入的資料

2、檢查變數資料型別和格式

3、過濾特殊符號

4、繫結變數,使用預編譯語句

這裡只先介紹一些注入簡單的mysql知識,mysql的詳細具體在後續的更新中會出乙個分類(唱戲台上老將軍,渾身flag。不會咕的,不會咕的,這次真的不會咕)

mysql是不區分大小寫的

1. version()——mysql版本

2. user()——資料庫使用者名稱

3. database()——資料庫名

4. @@datadir——資料庫路徑

5. @@version_compile_os——作業系統版本 

1、#.

2、--  

3、/*內聯注釋*/ 

and 、&& 和運算,要所有條件成立才能執行

or  、 || 或運算,只要乙個條件成立

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。 

sql union 語法

select column_name(s) from table_name1unionselect column_name(s) from table_name2 

例如flag表裡有兩個字段

注意,這裡只有在查詢字段數相同的情況下才能執行union聯合查詢,當查詢的字段數不一致時會報錯

mysql有乙個系統資料庫information_schema,儲存著所有的資料庫的相關資訊,一般的,我們利用該錶可以進行一次完整的注入。以下為一般的流程。

猜資料庫   

select schema_name from information_schema.schemata
猜某庫的資料表

select table_name from information_schema.tables where table_schema='

資料庫名

'

猜某錶的所有列

select column_name from information_schema.columns where table_name='

資料表名

'

獲取某列的內容

select  欄位名 from 資料表

mysql資料庫sql注入原理 SQL注入原理

結構化查詢語句 structured query language,縮寫 sql 是一種特殊的程式語言,用於資料庫中的標準資料查詢語言。sql注入 sql injection 是一種常見的web安全漏洞,攻擊者利用這個問題,可以訪問或者修改資料,或者利用潛在的資料庫漏洞進行攻擊。什麼是sql注入?s...

sql注入原理

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。簡單例項 一張使用者表user,一般需要通過user id運算元據庫,例如 我們想要查詢 user id 1 的使用者資訊 通常我們可以寫sql語句 select fr...

SQL注入原理

概述 sql注入 應用程式在向後台資料庫傳遞sql structured query language 結構化查詢語言 查詢時,如果攻擊者提供了影響該查詢的能力,就會引發sql注入。sql注入不只是一種會影響web應用的漏洞,對於任何從不可信源獲取輸入的 來說,如果使用輸入來構造動態sql語句,就有...