1. 程式人生 > >SQL盲注(2)

SQL盲注(2)

時間延遲

測試SQL注入漏洞時,會發現某一潛在漏洞難以確定,主要原因是Web應用沒有顯示任何錯誤,因而無法檢索任何資料。這種情況下,可以考慮向資料庫注入時間延遲。MSSQL伺服器有一條內建命令waitfor delay 'hours:minutes:seconds'

http://127.0.0.1/test.apsx?id=1;waitfor delay '0:0:5' -- 
該請求會使伺服器延時5秒

MySQL中沒有能直接延時的函式,但可以使用執行時間很長的函式來實現延遲,MySQL的benchmark函式就可以實現。

http://127.0.0.1/test/php?id=1;select benchmark(10000000,encode('hello','test'));--

在Oracle PL/SQL中,可以利用以下指令集來延遲5秒

begin
dbms_lock.sleep(5)
end;

但是,該函式的使用存在很多限制。1.不能直接將該函式注入到子查詢中,因為Oracle不支援堆疊查詢。2.只有資料庫管理員才能使用dbms_lock包

在Oracle PL/SQL中還有另外一種方式

http://127.0.0.1/test.php?id=1 or 1=dbms_pipe.receive_message('RDS',10)

dbms_pipe.receive_message函式將為從RDS管道返回的資料等待10秒。預設情況下,允許public許可權執行該包。dbms_lock.sleep與之相反,dbms_pipe。receive_message可以直接用到SQL語句中。

PostgreSQL資料庫可以使用pg_sleep函式來實現延遲

http://127.0.0.1/test.php?id=1;select pg_sleep(10); --
dbms_pipe.receive_message