首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

suPHP安全那点事儿

suPHP安全那点事儿

#Author:walker@双螺旋

0x00起因

前段时间测试的时候遇到了一个网站,配置为,有注入,管理员用户名和密码很容易就拿到手了,后台也有上传漏洞,但是getshell搞得我头疼,因为传上去的shell全部爆500且没有详细信息,不过在这套cms的官网恰好也存在这个注入,而且上传php同样报500,不过官网报错有详细信息,下面详细聊一聊为什么报500。

如果Apache没有开启详细报错

如上图所示,没有详细信息,也不知道为什么报500,所有已知的目录测试过了,都是500,当时猜测大概是权限问题,具体的原因无从得知,直到看到了官网的报错。

在这套cms官网Apache开启详细报错下是这样的:

谷歌了下是这样解释的:

https://my.getstarted.com.au/knowledgebase/56/500-Error-File-is-writeable-by-group.html

意思就是说上传的php文件的权限高于suPHP指定的最高权限,所以不能被正常执行因而报了500;一般情况下suPHP允许php脚本的最高权限是,文件夹最高权限是。

通过Google发现不少人也遇到同样的问题,若真是这个suPHP权限配置问题,只有找套源码看看有没有其他突破口。于是在网上找了个服务器环境及cms版本号一样的目标,利用同样的注入顺利的拿到了shell,顺利脱下了一套源码,这个后面绕过的时候再说,先来了解下suPHP是个什么东西。

0x01什么是suPHP

suPHPis a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter.

简单的来说,suPHP就是一个可以使PHP脚本只以属主的身份被执行的工具(也就是说非规定属主的PHP脚本就无法正常被执行),通常作为Apache的附加模块来运行。网上搜了搜,国外的虚拟主机上用的还是挺多的。 但实际上并非只是同属主这么简单,还有更多的坑,下面会详细的讲。

0x02本地环境搭建

suPHP搭建教程:https://www.binarytides.com/install-suphp-ubuntu/

0x03本地测试

由于suPHP是配合Apache来使用的,所以重要的配置过程在于suPHP和Apache的两个配置文件的配置。

suPHP配置文件:

其中最主要的是19-22行,这里规定了文件是否可以被本组成员或者其他组的用户执行。上面报的500错误就是因为和的值为

当和值为(需要重启Apache),php脚本就可以正常被执行。

Apache配置文件

编辑

第6行指定php文件的属主和属组,我这里指定的用户和组都为。

本地测试效果如下:

本地创建666.php,并指定他的属主和属组都为walker

当和的值为(default)时,php文件可以以其他属主的身份执行,但是下图可以看到666.php依然不可以正常被执行:

这是因为前文提到的,一般情况下suPHP允许PHP脚本的最高权限是,文件夹最高权限是,当前666.php的权限为666,显然高于suPHP所允许的最高权限,当把权限降低就可以正常被执行了:

所以这里也就能得出答案,为什么在之前的目标网站中,为什么上传的shell都报了500,因为在目标网站中利用上传漏洞上传的php shell,属主应该是没有权限问题(就是apache的权限),所以要么是我传上去的要么是,后者的情况就不贴图了。 那么问题来了,如何绕过呢?

0x04如何绕过

当时想了很久没有头绪,就花了点时间审计了脱下来的源码,发现了几个漏洞,其中一个本地文件包含漏洞让我一下有了眉目。如果以网站中正常的php文件来包含我上传的shell,理论上,shell应该能以suPHP所允许的权限执行。

本地测试

创建include.php

当666.php权限为666,和的值为(default)时,确实可以正常执行666.php。

这样也就顺利拿下了目标网站。

0x05总结

suPHP的限制主要体现在两个方面:

文件的属主和属组是否与配置文件中规定的一致。在实际渗透测试中,一般情况下属主都是web服务器的身份和权限,和suPHP的配置文件大多情况下都不会有差别。

写入文件的权限和目标文件夹的权限是否在suPHP所允许的权限范围内,默认情况下分别是和。

结合其他漏洞例如文件包含可以绕过限制。suPHP属于一个php扩展,逆向加载的.so模块尚未发现问题,以后说不定也存在着或多或少的问题呢。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180507G0W4PB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券