這個題過濾了絕大多數東西,然而留下了最關鍵的單引號。
(1)雙等號繞過。
假設sql語句如下:
select * from user where username='使用者名稱' and password='密碼'
現在我們知道單引號和等號沒有被過濾(這個題目是只過濾指定字元,測試一下就知道哪些被過濾了),那麼可以用一下payload:
username=p'='&password=p'='
帶入到sql語句可以看到就變成了:
select * from user where username='p'='' and password='p'=''
先看前面username那一塊,由於兩個等號是從左往右計算的,username=『p』不存在就會返回0(false),而0=''則會返回1,這樣where後面計算結果就變成了1 and 1,這樣最後就會把資料表中所有的資料挑出來。
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=
就可以成功繞過了。
CTF 登陸一下好麼?
select from user where username 使用者名稱 and password 密碼 利用 1 1 0 0 這樣顯然不行,因為查詢到資料庫中沒有username 1 的元組,返回了0 而 0 1 所以需要改為 username 1 0 password 1 0 先看前面user...
注入技巧 (登陸一下好嗎)
通過這道題提示下寄幾 不是所有有關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,...