dvwa解题(1)Ping a device

选择上来先看source

LOW

复制代码
<?php

// 检查是否提交了表单
if (isset($_POST['Submit'])) {
    // 获取输入的目标 IP 地址
    $target = $_REQUEST['ip'];

    // 确定操作系统并执行 ping 命令
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 如果是 Windows 操作系统
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 如果是类 Unix 操作系统
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将 ping 命令的输出显示给最终用户
    echo "<pre>{$cmd}</pre>";
}

?>
复制代码

这个是low等级,可以看到没做过滤,直接加命令

MED

接下来是

med等级

复制代码
<?php

// 检查是否提交了表单
if (isset($_POST['Submit'])) {
    // 获取输入的目标 IP 地址
    $target = $_REQUEST['ip'];

    // 设置黑名单(用于防止命令注入)
    $substitutions = array(
        '&&' => '',   // 移除 &&
        ';'  => '',   // 移除 ;
    );

    // 从输入中移除黑名单中的任何字符
    $target = str_replace(array_keys($substitutions), $substitutions, $target);

    // 确定操作系统并执行 ping 命令
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 如果是 Windows 操作系统
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 如果是类 Unix 操作系统
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将 ping 命令的输出显示给最终用户
    echo "<pre>{$cmd}</pre>";
}

?>
复制代码

可以看到过滤了&&和;

直接用  |  解决

 当然也有

 这个是利用过滤将;删除之后剩余的&&

HIGH

复制代码
<?php

// 检查是否提交了表单
if (isset($_POST['Submit'])) {
    // 获取输入的目标 IP 地址,并去除首尾的空格
    $target = trim($_REQUEST['ip']);

    // 设置黑名单,定义需要移除的特殊字符
    $substitutions = array(
        '&'  => '',   // 移除 &
        ';'  => '',   // 移除 ;
        '| ' => '',   // 移除 |
        '-'  => '',   // 移除 -
        '$'  => '',   // 移除 $
        '('  => '',   // 移除 (
        ')'  => '',   // 移除 )
        '`'  => '',   // 移除 `
        '||' => '',   // 移除 ||
    );

    // 从输入中移除黑名单中的任何字符
    $target = str_replace(array_keys($substitutions), $substitutions, $target);

    // 确定操作系统并执行 ping 命令
    if (stristr(php_uname('s'), 'Windows NT')) {
        // 如果是 Windows 操作系统
        $cmd = shell_exec('ping ' . $target);
    } else {
        // 如果是类 Unix 操作系统
        $cmd = shell_exec('ping -c 4 ' . $target);
    }

    // 将 ping 命令的输出显示给最终用户
    echo "<pre>{$cmd}</pre>";
}

?>
复制代码

对IP进行了很细致的过滤,但是只要是过滤就得出现绕过

这里的代码发现有

'| '

会修改|加空格,那么只要我们命令里没用空格就可以解决

 还有“ | | ”这里有空格也可以绕过

 

PHP是世界上最好的语言

复制代码
<?php

// 检查是否提交了表单
if (isset($_POST['Submit'])) {
    // 检查 Anti-CSRF 令牌
    checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');

    // 获取输入
    $target = $_REQUEST['ip'];
    $target = stripslashes($target);

    // 将 IP 拆分成 4 个八位
    $octet = explode(".", $target);

    // 检查每个八位是否为整数
    if (
        (is_numeric($octet[0])) &&
        (is_numeric($octet[1])) &&
        (is_numeric($octet[2])) &&
        (is_numeric($octet[3])) &&
        (sizeof($octet) == 4)
    ) {
        // 如果所有 4 个八位都是整数,重新组合 IP
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // 确定操作系统并执行 ping 命令
        if (stristr(php_uname('s'), 'Windows NT')) {
            // Windows
            $cmd = shell_exec('ping ' . $target);
        } else {
            // *nix
            $cmd = shell_exec('ping -c 4 ' . $target);
        }

        // 反馈给最终用户
        echo "<pre>{$cmd}</pre>";
    } else {
        // 操作失败。告知用户有错误
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// 生成 Anti-CSRF 令牌
generateSessionToken();

?>
复制代码

 

posted @   逆世混沌  阅读(79)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 狂迪 卢广仲
狂迪 - 卢广仲
00:00 / 00:00
An audio error has occurred.

作词 : 卢广仲/討海人/黄少雍

作曲 : 卢广仲

在我眼前消失不见

今天的什么都不对

楼下的店听见熟悉的音乐

谁离开我谁爱着我

剩下一半的小火锅

别乱牵拖直到你出现

满天星光月亮出来了

神魂颠倒这是真的吗

管不住我自己的步伐

戒不掉你致命的魔法

谁教我蜿蜒的弹跳

谁教我崎岖的舞蹈

我爱你你知不知道

OH Dónde estás Bongria

想要见面有点抱歉

下午才跟你晚上约

请放轻松看着公园的落叶

摇摇晃晃我的形状

一边海洋一边天堂

你拉着我这一步叫做永远

满天星光月亮出来了

神魂颠倒这是真的吗

管不住我自己的步伐

戒不掉你致命的魔法

谁教我蜿蜒的弹跳

谁教我崎岖的舞蹈

我爱你你知不知道

OH Dónde estás Bongria

我丢掉太多的不必要

朝着有你的方向跑

跑到你眼前逗你笑

听到电影里的配乐响起

全场只为了等你说一句

说欸你要不要跟我一起

去教堂

Yes I do希望你也一样

先说好一起永保安康

每一天蜿蜒的弹跳

每一天崎岖的舞蹈

我爱你你知不知道 OH

如果爱我让我看见你

的脚