preg_replace() 函数# 这段PHP 代码会获取 3 个变量:pat、rep 和 sub 的值,然后进入一个 if-else 语句。isset() 函数在 PHP 中用来判断变量是否声明,此处如果这 3 个值都有传递就会执行preg_replace()函数。 preg_replace 函数执行一个正则表达式的搜索和替换,语法如下: Copy Highlighter
最先看到的就是preg_replace中的一块,同时还有一个/e,即将replacement当作php代码执行, mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject) 而‘/('.$re.')/ei'即($re),但是'strtolower("\1”)'中的\1又代表什么呢?查询后发现是regex学的不到家,此处的\1转义后即为\1在regex表...
输入的注释符会被 $replace 取代,也就是""空字符,相当于没有添加任何东西->失效。 2、绕过方法: (1)字符型: /?id=1' or '1'='1 (2)数字型因为不用注释符,所以不用考虑。 三、过滤 and 和 or 绕过 1、反注入形式: and 和 or 同样也是用preg_replace()函数来进行过滤,源代码如下: 2、绕过方法:...
preg_replace() 函数 这段PHP 代码会获取 3 个变量:pat、rep 和 sub 的值,然后进入一个 if-else 语句。isset() 函数在 PHP 中用来判断变量是否声明,此处如果这 3 个值都有传递就会执行preg_replace()函数。 preg_replace 函数执行一个正则表达式的搜索和替换,语法如下: mixed preg_replace ( mixed $pattern...
preg_replace函数 preg_replace()的第一个参数如果存在 /e 模式修饰符,则允许代码执行。 如果没有 /e 修饰符,可以尝试 %00 截断。 <?php preg_replace("/test/e", $_GET['a'], "just test"); ?> ?a=phpinfo(),运行结果: 四、变量覆盖 ...
6preg_replace 这个函数比较早,5.5中它已经被弃用了,但是你一样可以去使用它,但是在7.0之后,你就没办法去调用它,它已经不存在了。 7array_map 8Usort 9{php代码} 举栗子 price是中间可控的,我们这里就控制它。 我们传的是123,实际上echo里的语句是name的价格是123,分号后面是不存在的,实际传递值的时候,是不...
preg_match('/^O:\d+/')匹配序列化字符串是否是对象字符串开头。我们在反序列化中有两种方法绕过: 1.利用加号绕过 代码语言:javascript 代码运行次数:0 运行 AI代码解释 $a = 'O:4:"test":1:{s:1:"a";s:3:"abc";}'; //+号绕过 $b = str_replace('O:4','O:+4', $a); unserialize(ma...
preg_replace() #preg_replace('正则规则','替换字符','目标字符') #执行命令和上传文件参考assert函数(不需要加分号)。 #将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。 preg_replace("/test/e",$_POST["cmd"],"jutst test"); ...
我们再看代码,preg_replace()函数对匹配成功的字符串替换为NUILL,如果剩下的职业(;)那么就会通过这个正则。我们用一个代码来测试,我们传两个参数然后对这两个参数进行替换后打印看剩下的是什么值,就能很直观的看到这一点。 我们分别传入了echo();、echo(122);和echo(phpinfo()),可以看到参数一最终替换剩下一...
而preg_replace()函数里面的第一个和第二个参数存在一个代码执行漏洞,第一个参数的值是一个正则表达式,只要这个值等于:/(.*)/e,那么第二个参数就可以进行代码执行,且第三个参数可以是任意值。 这就是preg_replace的"/e"漏洞 这三个参数可以 通过get请求的参数传参,因此我们对三个get请求参数的值改成这样:...