Безопасный доступ к панели и SSH через Web-Knokking
Posted: Sun May 02, 2021 8:12 pm
VestaCP — это панель-"дуршлаг" для уязвимостей. Хотя бы потому, что любой пользователь на хостинге может вызывать в PHP через EXEC команды CLI-интерфейса панели: exec(/usr/bin/sudo /usr/local/vesta/bin/v-*…) и делать с сервером абсолютно всё что угодно. Ну и по умолчанию при создании сайтов и некоторых других моментов предлагаются самые небезопасные варианты. Поэтому сначала немного подкрутим гайки для безопасности:
- Первым делом отключаем в PHP.ini опасные функции:
Code: Select all
disable_functions=pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,show_source
- Меняем для каждого сайта Web-шаблон для APACHE2 в панели с default на basedir. Вообще этот опасный шаблон не должен использоваться по умолчанию и по идее его быть не должно. Если уже используется любой другой шаблон, отличный от default, то всё должно быть в порядке.
- 1-ю часть назовём, например, Hidden.php и положим в /usr/local/vesta/web
Code: Select all
<?PHP $ip=getenv('QUERY_STRING'); if(filter_var($ip,FILTER_VALIDATE_IP)) { exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "2" "ACCEPT" "'.$ip.'" "8083" "TCP"',$output,$return_var); exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "11" "ACCEPT" "'.$ip.'" "22" "TCP"'); echo'<h1><center>'.$ip.'<br>'.gethostbyaddr($ip).'<br>'; #print_r($output);print_r($return_var); } ?>
- 2-часть назовём как угодно и положим на любой сайт на сервере в public_html в /home
Code: Select all
<?PHP $curl=curl_init('https://localhost:8083/Hidden.php?'.getenv('REMOTE_ADDR')); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false); echo curl_exec($curl); ?>