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

代码审计

打开dvwa靶场,先把难度调到high,在点击“Command injection”进入命令执行漏洞靶场

查看代码

 
<?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>";
}
 
?>

1.trim

1.含义:
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
功能除去字符串开头和末尾的空格或其他字符。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,
2.发生错误时返回空字符串()。如果任何参数的值为NULL,Trim() 函数返回NULL。
3.在Java中,使用Trim函数需要调用String类的trim()方法。
4.该方法会返回一个新的字符串,并且会去掉原字符串开头和结尾的空格、回车、换行符等不可见字符。
5.调用方式:string.trim()
6.trim是一个去字符串空格的方法,返回的是一个新的字符串。
7.trim不需要传参,直接是对当前调用对象进行处理,二是需要一个返回值,函数里面的this指的就是调用对象,因此不需要进行传参。

var str = " Hello World! ";
console.log("原字符串: ", str);
str = str.trim();
console.log("删除两侧空格后: ", str);
 这段代码首先定义了一个包含两侧空格的字符串。然后我们调用了trim()函数来删除这个字符串两侧的空格,并将结果存储回原来的变量中。最后,我们在控制台打印出原字符串和删除两侧空格后的字符串。

2.str_replace


str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

规则:
1)如果搜索的字符串是数组,那么它将返回数组。
2)如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
3)如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
4)如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。
语法:str_replace(find,replace,string,count)。其中,count:对替换数进行计数的变量。
 

<?php
 
// 定义原始字符串和要替换的子串
$original_string = "Hello, world!";
$search_for = "world";
$replace_with = "Dolly";
 
// 使用str_replace()函数进行替换
$new_string = str_replace($search_for, $replace_with, $original_string);
 
// 打印出新字符串
echo $new_string;
 
?>


这段代码首先定义了一个原始字符串和两个要替换的子串。然后我们调用了str_replace()函数,将原始字符串中的“world”替换成“Dolly”,并将结果存储到新的变量中。最后,我们在页面上打印出新的字符串。

3.array_keys


array_keys是一个PHP内置函数,用于获取数组中所有的键名。它的基本语法如下:

array_keys(array)
 其中,array是要从中获取键名的数组。该函数会返回一个新的数组,其中包含了输入数组中所有键名的值。如果没有提供任何参数,则返回NULL。

<?php
 
// 定义一个数组
$array = array(
    "name" => "John",
    "age" => 30,
    "city" => "New York"
);
 
// 获取数组中所有的键名
$key_names = array_keys($array);
 
// 打印出键名
print_r($key_names);
 
?>


这段代码首先定义了一个包含多个元素的数组。然后我们调用了array_keys()函数,获取这个数组中所有的键名,并将结果存储到一个新的数组中。最后,我们在页面上打印出这个新的数组,可以看到它包含了原始数组中的所有键名。

4.stristr


stristr是一个PHP内置函数,用于在字符串中搜索指定的子字符串,忽略大小写,并返回找到的第一个子字符串及其后面的字符串。它的基本语法如下:

stristr(string,substring,start)
其中,string是要搜索的原始字符串,substring是要查找的子字符串,start是开始搜索的位置,默认为0。 

<?php
 
// 定义原始字符串和要搜索的子串
$original_string = "Hello, world!";
$search_for = "world";
 
// 使用stristr()函数进行搜索
$found_string = stristr($original_string, $search_for);
 
// 打印出找到的子串
echo $found_string;
 
?>


这段代码首先定义了一个原始字符串和要搜索的子串。然后我们调用了stristr()函数,从原始字符串中搜索子串,并将找到的部分存储到新的变量中。最后,我们在页面上打印出找到的子串。 你可以尝试运行这段代码,看看输出的结果是否符合预期。

5.php_uname


php_uname是一个PHP内置函数,用于获取运行PHP的系统的详细信息。它的基本语法如下:

php_uname([mode])
其中,mode是一个可选参数,用来指定要返回哪种类型的系统信息。如果不提供该参数,函数将返回所有可用的信息;否则,mode应该是一个单个字符,指定要返回的信息类别,具体取决于不同的操作系统。

<?php
 
// 调用php_uname()函数获取系统信息
$system_info = php_uname();
 
// 打印出系统信息
echo $system_info;
 
?>


这段代码首先调用了php_uname()函数,获取了运行PHP的系统的详细信息,并将结果存储到了一个新的变量中。然后,我们在页面上打印出了这个变量,可以看到它包含了系统类型、版本号、主机名等信息。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值