disable_functions bypass - php-fpm/FastCGI

chevron-right从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)arrow-up-righthashtag

支持HackTricks的其他方式:

PHP-FPM

PHP-FPM被认为是标准PHP FastCGI的优秀替代品,提供了对于高流量网站特别有益的功能。它通过一个监控一组工作进程的主进程运行。对于PHP脚本请求,是Web服务器启动FastCGI代理连接到PHP-FPM服务。该服务有能力通过服务器上的网络端口或Unix套接字接收请求

尽管代理连接起到中介作用,但PHP-FPM需要在与Web服务器相同的机器上运行。它使用的连接虽然基于代理,但与传统的代理连接不同。收到请求后,PHP-FPM中的可用工作进程处理请求 - 执行PHP脚本,然后将结果转发回Web服务器。工作进程处理完请求后,会再次变为可用状态,以处理即将到来的请求。

但是什么是CGI和FastCGI?

CGI

通常,从Web服务器传输到浏览器的网页、文件和所有文档都存储在特定的公共目录中,例如home/user/public_html。当浏览器请求特定内容时,服务器会检查该目录并将所需文件发送给浏览器

如果服务器上安装了CGI,则还会在那里添加特定的cgi-bin目录,例如home/user/public_html/cgi-bin。CGI脚本存储在此目录中。目录中的每个文件都被视为可执行程序。访问目录中的脚本时,服务器会将请求发送到负责该脚本的应用程序,而不是将文件内容发送到浏览器。在输入数据处理完成后,应用程序将输出数据发送给Web服务器,后者将数据转发给HTTP客户端。

例如,当访问CGI脚本http://mysitename.com/cgi-bin/file.plarrow-up-right时,服务器将通过CGI运行适当的Perl应用程序。脚本执行生成的数据将由应用程序发送到Web服务器。另一方面,服务器将数据传输给浏览器。如果服务器没有安装CGI,浏览器将显示**.pl**文件代码本身。(解释来自这里arrow-up-right

FastCGI

FastCGIarrow-up-right是一种更新的Web技术,是改进的CGIarrow-up-right版本,主要功能保持不变。

FastCGI的开发是因为Web应用程序的快速发展和复杂性,以及为了解决CGI技术的可伸缩性缺陷。为了满足这些要求,Open Marketarrow-up-right推出了FastCGI - 具有增强功能的CGI技术的高性能版本

disable_functions绕过

可以利用FastCGI运行PHP代码,避开disable_functions的限制。

通过Gopherus

triangle-exclamation

使用Gopherusarrow-up-right可以生成一个有效负载发送到FastCGI监听器并执行任意命令:

然后,您可以获取经过URL编码的有效负载并解码它,然后转换为base64,[例如使用cyberchef的这个配方](http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNweUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAwarrow-up-right). 然后将base64粘贴到这段php代码中:

PHP exploit

triangle-exclamation

代码来自这里arrow-up-right

使用前面的函数,您会发现函数**system仍然被禁用**,但**phpinfo()显示disable_functions空的**:

因此,我认为您只能通过php .ini配置文件设置disable_functions,而PHP_VALUE不会覆盖该设置。

这是一个用于利用fastcgi协议绕过open_basedirdisable_functions的php脚本。 它将帮助您绕过严格的disable_functions以通过加载恶意扩展实现RCE。 您可以在这里访问:https://github.com/w181496/FuckFastcgiarrow-up-right,或者在这里找到一个稍微修改和改进的版本:https://github.com/BorelEnzo/FuckFastcgiarrow-up-right

您会发现这个利用与之前的代码非常相似,但是它不是尝试使用PHP_VALUE绕过disable_functions,而是尝试加载外部PHP模块以使用变量PHP_ADMIN_VALUE中的参数extension_dirextension执行代码。 注意1:您可能需要使用与服务器相同的PHP版本重新编译扩展(您可以在phpinfo的输出中检查):

triangle-exclamation

PHP-FPM远程代码执行漏洞(CVE-2019–11043)

您可以利用phuip-fpizdamarrow-up-right来利用此漏洞,并使用此docker环境进行测试:https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043arrow-up-right。 您还可以在这里找到有关漏洞的分析herearrow-up-right

最后更新于