靶场命令执行漏洞测试

原创 2023-07-13 21:02
文章的分类 教程分享

刚刚我出了一个DVWA靶场的搭建教程,因为我搭建的比较快,省去了很多步骤,网上都有教程,这里就不一一阐述了!
大家有兴趣可以自己前去学习研究!
下面我来给大家演示一下DAWA的命令漏洞执行过程!

1.先打开Command Injection

简单

2023-07-13T12:52:39.png

尝试ping一下本地是正常的,这里给大家普及一下命令知识

命令1|命令2 无论命令1是否执行成功,命令2将被执行
命令1;命令2 无论命令1是否执行成功,命令2将被执行
命令1&命令2 无论命令1是否执行成功,命令2将被执行
命令1||命令2 仅在命令1执行失败时,才执行命令2
命令1&&命令2 仅在命令1执行成功时。才执行命令2

在普及一下常见的指令

whoami 查看当前用户名
ipconfig 查看网卡信息
shutdown -s -t 0 关机
net user 用户名  密码 /add 添加一个新用户
dir 查看文件目录
type 文件名  查看文件内容

好了,下面我们执行一下试试

2023-07-13T13:01:43.png

当我们执行127.0.0.1|whoami时,即可发现漏洞
看一下源代码

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    $target = $_REQUEST[ 'ip' ]; //把ip赋值给$target

    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    echo "<pre>{$cmd}</pre>";
}
?>

中级

我们来升级一下策略

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    $target = $_REQUEST[ 'ip' ];
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    echo "<pre>{$cmd}</pre>";
}
?>

这里看一下代码就知道了,这里只屏蔽了&&和;,其他指令一样正常使用,比如我们用|

2023-07-13T13:08:04.png

一样正常显示,我们在升级一下难度

困难

我们直接看一下代码,这是一般开发者可能会手误打出来的

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    $target = trim($_REQUEST[ 'ip' ]);
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }
    echo "<pre>{$cmd}</pre>";
}
?>

看到这一行是不是以为都被屏蔽了?仔细看一下第三行
'| ' => '',
这里会发现|后面多了个空格,我们来试试去掉空格

2023-07-13T13:11:54.png

so easy 拿下,既然命令可以使用,剩下的教程交给你们自由发挥,这里上一下正确代码

正确代码

<?php
if( isset( $_POST[ 'Submit' ]  ) ) {
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );
    $octet = explode( ".", $target );
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
        echo "<pre>{$cmd}</pre>";
    }
    else {
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}
generateSessionToken();
?>


THE END


分享
赞赏
精选留言 写留言