preg_match函数绕过

本文探讨了一段PHP代码中关于错误报告的设置和一个可能的代码执行漏洞。当`$_GET['code']`未定义时,代码会高亮显示自身,而当存在该变量时,通过preg_match验证后,可以执行`eval`函数。文章重点在于如何绕过字母和数字的限制,通过异或操作构造出合法的字符,最终实现动态函数执行来获取shell。这涉及到PHP的安全性和代码注入防御策略。
摘要由CSDN通过智能技术生成
<?php
error_reporting(0);
if(!isset($_GET['code'])){
    highlight_file(__FILE__);
}else{
    $code = $_GET['code'];
    if(preg_match("/[A-Za-z0-9_$@]+/",$code)){
        die('fighting!'); 
    }
    eval($code);
}

1.绕过数字和字母

首先,我们常见的CTF题代码如下,主要是绕过数字和字母。

1.绕过 preg_match("/[A-Za-z0-9]+/",$code)

在这里插入图片描述

上面这段代码绕过方法如下:

要是用非字母、数字的字符经过各种变换,最后能构造出 a-z 中任意一个字符,并且字符串长度小于40。然后再利用 PHP允许动态函数执行的特点,拼接一个函数,然后执行这个函数getshell。

在PHP中,两个字符串执行异或操作以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或结果是这个字母即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值