SQL注入學習筆記 聯合語句查詢

2022-09-07 18:54:07 字數 2470 閱讀 2574

聯合查詢注入利用的前提是頁面上有顯示位。

注意:union可合併兩個或多個select語句的結果集, 前提是兩個select必有相同列、且各列的資料型別也相同。

1、判斷注入點

2、判斷是整型還是字元型

3、判斷查詢列數

4、判斷顯示位

5、獲取所有資料庫名

6、獲取資料庫所有表名

7、獲取欄位名

8、獲取欄位中的資料

and 1=1 / and 1=2 回顯頁面不同(整形判斷) 

單引號判斷『 顯示資料庫錯誤資訊或者頁面回顯不同(整形,字串型別判斷) 

\ (轉義符) 

注:加號『+』在url中有特殊含義,因此在需要對其進行url編碼為%2b。%20是空格的意思,在瀏覽器中注入回車後空格會自動轉化成%20。

輸入and 1=1和and 1=2後發現頁面沒有變化,判斷不是整型注入。

輸入' and 1=1 和 ' and 1=2 後發現頁面變化,判斷為字元注入 。(%27是 ' 的意思)

在資料庫中 1=1 和1=2  後面隨便輸入字串(相當於1=1和1=2後面的查詢語句),發現select 1="1dasd"時返回1正確,1="2dasd"時返回0錯誤,即select在查詢時忽略後面的字串,只讓1和後面第乙個數字對比,如果相等就是正確,不相等返回錯誤。

order by 函式是對mysql中查詢結果按照指定欄位名進行排序,除了指定字 段名還可以指定欄位的字段進行排序,第乙個查詢欄位為1,第二個為2,依次 類推。我們可以通過二分法來猜解列數

輸入 order by 4--+  發現頁面錯誤,說明沒有4列

輸入 order by 3--+  發現頁面正確,說明有3列

union的作用是將兩個select查詢結果合併,

程式在展示資料的時候通常只會取結果集的第一行資料,看一下原始碼,mysql_fetch_array只被呼叫了一次,而mysql_fetch_array從結果集中取得一行作為關聯陣列或數字陣列或二者兼有,具體看第二個引數是什麼。所以這裡無論怎麼折騰最後只會出來第一行的查詢結果。只要讓第一行查詢的結果是空集,即union左邊的select子句查詢結果為空,那麼union右邊的查詢結果自然就成為了第一行,列印在網頁上了。

輸入?id=-1' 或者 1' and 1=2 後面跟上union select 1,2,3--+

可以看到將uid改為-1後第二行列印在頁面上。使union前面的語句報錯,執行後面的,爆出顯示位,2,3

group_concat()一次性顯示: 

select group_concat(schema_name) from information_schema.schemata

顯示當前資料庫: database()

把上面語句中的 schema_name 改成查表名的語句 table_name,information_schema.schemata改成information_schema.tables,後面跟上在哪查的where table_schema='庫名'。

直接上payload了:select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'

也可以用 concat_ws函式 limit 0,1 一條一條查,這裡就不做演示了。

SQL注入學習筆記

sql注入漏洞是由於sql語句的呼叫方法不完善而產生的安全隱患。一旦應用中存在sql注入漏洞,就可能造成如下影響。值得注意的是,以下影響中攻擊者都能夠直接對伺服器實施主動攻擊,而不需要使用者參與。根據資料庫引擎的不同,通過sql注入攻擊還可能會達到下列效果。sql注入攻擊能夠以開發者意想不到的方式改...

sql注入學習筆記

1.什麼是sql注入 sql注入就是指web應用程式對使用者輸入的資料的合法性沒有判斷,前端傳入後端的引數帶有資料庫查詢的語句,攻擊者可以構造不同的sql語句來實現對資料庫的操作。2.sql注入原理 sql注入漏洞產生需要滿足以下兩個條件。引數使用者可控,前端傳給後端的引數內容是使用者可以控制的 引...

Sql 注入 學習筆記

先了解下crlf,crlf常用在分隔符之間,cr是carriage retum ascii 13,r lf是line feed ascii 10,n r n這兩個字元類似於回車是用於換行的,因此該漏洞可能會導致程式原有的語義被改變 如 def helloworld name open test a ...