- 审计dvwa高难度命令执行漏洞的代码
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = trim($_REQUEST[ 'ip' ]);
// Set blacklist
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
trim
trim() 是 PHP 中的一个内建函数,用于从给定字符串中移除前导和后缀空白。它需要一个或两个参数:
- 第一个参数是必需的,并指定要被修剪的输入字符串。
- 第二个参数是可选的,并允许您指定要从字符串两端修剪的特定字符集合。
如果未提供第二个参数,则 trim() 函数将从两侧修剪掉下列字符:\t, \n, \r, \0, \x0B, (空格)。例如:
$text = "\t Hello World \n";
echo trim($text); // 输出: "Hello World"
text 字符串两侧都有不同的空白字符。调用 trim() 函数会删除这些多余的空白,只留下核心文本内容。
str_replace
str_replace() 是 PHP 中的一个内置函数,用于搜索一个字符串并替换其中的一部分或全部匹配项。
该函数接受三个参数:
- 第一个参数是要在其中执行搜索和替换操作的字符串。
- 第二个参数是要查找的模式或子字符串。
- 第三个参数是要替换找到的内容的新字符串。
$text = 'Hello world';
echo str_replace('world', 'Universe', $text); // 输出: 'Hello Universe'
在原字符串 'Hello world' 中找到了 'world' 子字符串,并将其替换为 'Universe'
array_keys
array_keys() 是 PHP 中的一个内置函数,用于从关联数组中检索所有的键名。
该函数接受两个参数:
- 第一个参数是要从中获取键名的关联数组。
- 第二个参数是可选的,用于指定要在关联数组中查找的值。如果提供此参数,array_keys() 将返回对应于该值的所有键名。
$array = array('name' => 'John Doe', 'age' => 42, 'location' => 'New York');
print_r(array_keys($array, 'New York')); // 输出: Array ( [2] => location )
找到与 'New York' 相对应的键名。通过提供该值作为第二个参数,我们可以轻松地获取到了相应的键名 location。
stristr
stristr() 是 PHP 中的一个内置函数,用于查找字符串在另一字符串中第一次出现的位置。如果成功,则返回字符串的其余部分(从匹配点)。
该函数接受两个参数:
- 第一个参数是要搜索的目标字符串。
- 第二个参数是要在目标字符串中搜索的模式或子字符串。
与 strstr() 函数不同的是, stristr() 不区分大小写。
$string = 'hello world';
$substring = 'world';
if ($position = stristr($string, $substring)) {
echo substr($position, strlen($substring));
} else {
echo 'Substring not found.';
}
// 输出: ' '
在字符串 $string 中查找子字符串 $substring 。因为找到了匹配项,所以 substr() 函数从匹配点起始返回剩余的字符串。
如果未找到子字符串,则 stristr() 函数返回 FALSE 或者空字符串
php_uname
php_uname() 是 PHP 的内置函数,它可以返回底层操作系统的信息。这包括操作系统名称、版本号、机器架构、主机名等信息。
此函数接受一个可选的单字符参数,用于指定要返回的信息类型。以下是可用选项:
- 'a': 返回所有可用信息,以 's n r v m' 的形式返回一个字符串。
- 's': 返回操作系统的名称(例如 Linux 或 Windows)。
- 'n': 返回主机名。
- 'r': 返回操作系统的发行版。
- 'v': 返回操作系统的版本。
- 'm': 返回机器架构(例如 x86_64)。
echo php_uname();
在本地计算机上运行这段代码,你应该会看到类似于以下的输出:
Linux localhost.localdomain 3.10.0-1062.12.1.el7.x86_64 #1 SMP Thu Sep 5 16:10:½