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模块尚未发现问题,以后说不定也存在着或多或少的问题呢。
领取专属 10元无门槛券
私享最新 技术干货