目录
一、环境
二、开始做题
三、总结原理
四、如何防护
一、环境
我们这里用蚁剑自带的靶场第一关来解释
docker制作一下即可
二、开始做题
首先环境内很明显给我们已经写好了webshell
同样我们也可以访问到
我们使用这个蚁剑把这个webshell连上
我们发现命令不能执行,系统命令被禁用掉了
我们可以写一个phpinfo
看一下禁用函数,基本上它全都禁用了包括system,并且mail函数都禁用了,(正常来说php不能禁用mail【创建新进程调用sedmail,调用系统服务getuid】put_env【环境变量LD_PRELOAD】,error_log)但没禁用error_log这个函数,所以还是有漏网之鱼的
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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,dl,mail,system
去蚁剑插件市场
可以加载系统进程error_log写入进程后执行,但是我们必须依赖sendmail
如果对方没有sendmail,我们用的是__attribute__(__)bypass_disable_function ,这种方法只要能创建新进程就可以劫持
bypass disable_function总结学习 - tr1ple - 博客园 (cnblogs.com)
我们用插件上传脚本,其实就是我之前写的流量转发脚本
创建副本,文件名修改后重新连接
虚拟终端可以执行
它的原理依然是加载.so文件
其实执行的就是这个,意思也就是转发到一个新的php进程上面,-n我不在使用php.ini,-s创建一个新的webserve
最终
三、总结原理
首先disable_function不能禁用mail和error_log这两个函数,因为putenv可以创建环境变量,可以把LD_PRELOAD环境变量创建出来,加载我们创建的一个.so文件,而我们的mail函数在执行的时候会创建一个新进程调用sendmail,sendmail会创建系统服务getuid,而我们创建的恶意的.so文件恰好就劫持了mail调用诸多函数的其中一个比如getuid,会提前执行我们的恶意函数,自然也就执行了
四、如何防护
禁用putenv,不能设置环境变量,自然不能劫持系统函数了