數(shù)據(jù)庫mysql注入sleep語句引發(fā)的拒絕服務(wù)及修復(fù)方案mysql存在注入,并且注入的sleep語句如果傳入一個足夠大的參數(shù),比如:sleep(9999999999).
如果數(shù)據(jù)庫用的是myisam引擎,且注入點(diǎn)是某個會鎖表的語句(insert,replace,update,delete),那么整個數(shù)據(jù)表的訪問都會被阻塞。
使用該表的所有應(yīng)用的讀庫請求都會被阻塞。
如果數(shù)據(jù)庫使用的是主從分離的架構(gòu),www.2cto.com 那么Master和Slave的同步會被sleep語句阻塞,導(dǎo)致從庫無法從主庫正常同步數(shù)據(jù)。一些依賴于主從同步的應(yīng)用也會無法正常工作。
就算僅僅是讀操作,經(jīng)過有限次的請求,也會很快的達(dá)到數(shù)據(jù)庫的max_connections限制,而導(dǎo)致數(shù)據(jù)庫拒絕服務(wù)。
漏洞證明:
注入語句update test_inj set xx=1 and sleep(9999999999);
mysql> select * from test_inj;
請求會被阻塞。直到手動殺死那個鎖表的語句。
線上實(shí)驗(yàn)后果會比較嚴(yán)重,就不貼真實(shí)的例子了。測試者請用自己搭建的數(shù)據(jù)庫。不要害人。
修復(fù)方案:
禁用mysql的sleep函數(shù);蛘咝薷乃膕leep上限,拒絕不合理的超長sleep,F(xiàn)實(shí)中很少用到這個sleep功能,就算遇到需要sleep的場景,也可以通過外部應(yīng)用來實(shí)現(xiàn)sleep。