SQL注入基礎

2022-08-02 08:06:08 字數 2613 閱讀 1661

sql注入的原理和分類:

sql注入就是指web應用程式對使用者輸入資料的合法性沒有判斷,前端傳入後端的引數是攻擊者可控的,並且引數帶入資料庫查詢。攻擊者可以構造不同的sql語句來實現對資料庫的操作。

sql注入按照請求方式分類可以分為字元型注入、數字型注入搜尋型注入,按照提交方式分類可以分為get型注入、post型注入、cookie型注入http請求頭注入,按照執行效果分類可以分為大致分為聯合查詢注入、報錯型注入、盲注(bool、時間)、堆查詢注入……

一次完整的sql查詢過程應該為:1、使用者向前端輸入引數。2、前端按照使用者提交的引數對資料庫中的資料進行查詢3、資料庫返回查詢結果。4、後台資料處理給前端,返回給使用者

注入點的判斷:

假如乙個sql查詢語句為:  $query = "select * from users where id = $_get['id']";

正常使用者提交的資料應該為id=1,但是攻擊者提交的引數將構造成新的sql語句。

當傳入的引數為id=1'時,資料庫執行的**如下所示:

select * from users where id = 1'  這時候的語句不符合資料庫的語法規範,所以返回給使用者的資訊是報錯。

當傳入的引數為id=1 and 1=1時,資料庫執行的**如下:

select * from users where id = 1 and 1=1  因為id=1為真且1=1為真,所以頁面返回的結果與id=1返回的結果是相同的。

攻擊者根據上面的返回結果已經知道了**中存在sql注入,接下來將進一步拼接sql語句連線資料庫,爆出自己想要的資料。

sql注入之前首先需要知道的知識點:

mysql中的幾種注釋:

1、"#"(url編碼為%23)

2、"--"(--後面要跟上乙個或多個空格,在url中常使用"--+"來當做注釋使用)

3、"/*……*/"(在繞過waf等**的安全機制時,常使用/**/來代替空格)

4、"/*!……*/"(內斂注釋,其注釋的內容將會被執行)

注:"#"在url中會被認為是錨點,想要使用需要進行編碼。

"+"在url中會被認為是空格

sql注入中經常使用的函式:

user():當前連線資料庫的使用者。

database():當前連線的資料庫名稱

version():當前資料庫的版本資訊

@@datadir:資料庫檔案存放的目錄

.@@version_compile_os:當前使用的作業系統

連線字串的函式:

concat(str1,str2……):沒有分隔符的連線字串。

concat_ws(separator,str1,str2……):該函式第乙個引數是其他引數的分隔符,分隔符在連線字串之間加入。

group_concat(str1,str2……):將多行查詢的結果以逗號為分隔符連線成為一行結果。

information_schema庫:

在mysql5.0版本之後,mysql預設在資料庫中存放乙個名為「information_schema」的資料庫,在這個資料庫中我們需要記住三個表:schemata、tables、colunmns

schemata表儲存該使用者建立的所有資料庫的庫名,該表中記錄資料庫的欄位名為schemata_name

查詢所有資料庫名:select schema_name from information_scema.schemata

tables表中儲存該使用者建立的所有資料庫的庫名和表名,該表中記錄資料庫名的欄位名為table_schema,記錄表名的欄位名為table_name

查詢指定資料庫(test)中所有的表名:select table_name from infromation_shema.tables where table_schema='test'

columns表中儲存該使用者建立的所有資料庫的庫名、表名和欄位名,該表中記錄資料庫名的欄位名為table_schema,記錄表名的欄位名為table_name,記錄欄位名的欄位名為column_name

查詢指定資料庫(test)中指定資料表(admin)的所有欄位名:select column_name from information_schemata.columns where table_schema='test' and table_name='admin

sql注入基礎

mysqli 轉義字串函式 mysqli real escape string db,string mysqli 預編譯 拼裝sql語句 把要進行的操作的sql語句提前寫好,把需要改變的元素變成佔位符 select id,username from user where user name and ...

SQL注入基礎

最為經典的單引號判斷法 在引數後面加上單引號,比如 abc.php?id 1 如果頁面返回錯誤,則存在 sql 注入。原因是無論字元型還是整型都會因為單引號個數不匹配而報錯。如果未報錯,不代表不存在 sql 注入,因為有可能頁面對單引號做了過濾,這時可以使用判斷語句進行注入。其實所有的型別都是根據資...

SQL注入基礎

為了堅持而堅持,是撐不了多久的。sql注入就是指web應用程式對使用者輸入資料的合法性沒有判斷,前端傳入後端的引數是攻擊者可控的,並且引數代入資料庫查詢,攻擊者通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。sql注入漏洞的產生要滿足兩...