审计dvwa高难度命令执行漏洞的代码

本文详细解释了如何使用PHP代码审计DVWA(DamnVulnerableWebApplication)中的一个高难度命令执行漏洞,涉及`trim`、`str_replace`、`array_keys`和`stristr`等函数的应用,以及通过`php_uname`检测操作系统来执行不同命令。
摘要由CSDN通过智能技术生成
  1. 审计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:½

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

池央_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值