玄机-应急加固-医院脱库应急处理
玄机-应急加固-医院脱库应急处理
登录账号密码:administrator/Zhoudi666
某医院系统疑似被攻击,攻击者常规手段获取到了后台账号密码,在此之前攻击者使用多个IP进行扫描,你作为安全服务工程师需要分析其流量包和日志来快速审计,每个IP的扫描特征并快速归类,并思考在常规渗透中,攻击者是怎么获取到的管理员密码进行登录的后台
此外除了已有需要提交的题目,你还需要做的是
根据桌面已有的工具进行分析
根据桌面已有的文档模板进行编写报告进行整个流程的梳理(后期给客户进行汇报)
修复出现的相关漏洞(无论使用任何方法),保证业务系统正常运行
看看系统中自己能不能挖出其他漏洞
注:思路仅供参考,学习举一反三
账号是administrator,密码是Zhoudi666
连接半天没连上,最后发现是windows主机而非linux主机
1.首次发起端口扫描的IP是
192.168.37.3
肉眼看就能看出来了,192.168.37.3
对192.168.37.2
的敏感端口进行扫描,且时间最早
或者使用过滤器筛出所有SYN 扫描尝试
1 | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
时间最早的就是192.168.37.3
2.审计流量和日志快速定位扫描次数最多的IP
192.168.37.3
不管是审计流量还是审计日志,都需要先找到一个特征值
特征值:对于被攻击方而言,漏扫常见的特征值为404 not found
或者是其他waf掉后的回显页面。
本题中,手动尝试去拼接一个不存在的文件,得到的结果为404 not found
,可以推测扫描次数多的ip必然存在大量的404 not found
回显。
审计流量:
使用zui
,统计所有ip请求后的状态码为404的次数
发现最多的是192.168.37.3
或者是使用wireshark也可以做到快速统计
统计
-> 端点
-> IPv4
-> all address
进入统计页面,输入筛选条件:发起请求后得到的response
的status_code
为404
的
日志审计:
access.log
日志,也是批量筛选特征值404 not found
。写正则,统计次数
3.审计流量和日志快速定位扫描次数第二的IP
192.168.37.1
根据上题,得到答案为192.168.37.1
4.哪个IP使用了AWVS扫描器
192.168.37.1
Awvs在请求的Url,Headers, Body三项里随机包含了能代表自己的特征信息,且都包含字符串”acunetix”
wireshark
中筛选http
,后直接筛选字符串包含acunetix
的流量,发现ip
为192.168.37.1
5. 还有个IP也使用了扫描器进行主机+WEB扫描,提交其扫描次数(以wireshark数量为主)
4812
筛选进行syn扫描的流量并且ip不为192.168.37.3
和192.168.37.1
1 | tcp.flags.syn == 1 && tcp.flags.ack == 0 && ip.addr != 192.168.37.3 && ip.addr != 192.168.37.1 |
得到ip为192.168.37.100
,且可以确定该ip进行了主机扫描
然后筛选192.168.37.100
发起的http
请求,且状态码为404的。
1 | http && ip.addr == 192.168.37.100 && http.response.code == 404 |
发现大量请求,可以确定该ip进行web扫描。
题目要求提交扫描次数,统计一下源ip为192.168.37.100
,目的ip为192.168.37.2
1 | ip.addr == 192.168.37.100 && ip.dst == 192.168.37.2 |
得到答案为4812
6. 运维人员发现有IP进行了WEB登录爆破,提交其IP
先找到登录路径,路径为login.php
统计,注意!!!在zui
中,内容被查询才可以被限定
例如:
1 | count() by id.orig_h,uri,method | uri == "/login.php" | method == "POST" |
但是没有查询,就限定,就查不到东西
发现192.168.37.87
访问了106次/login.php
,几乎就可以确定是这个ip进行web登录爆破了
192.168.37.87
7. 运维人员发现有IP进行了WEB登录爆破,提交其爆破次数
爆破次数为
1 | http && ip.addr == 192.168.37.87 && http.request.method == POST && http.request.uri == "/login.php" |
106
8. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交其IP
先找特征值,发现请求的路由为register.php
在zui
里面筛选z
1 | count() by id.orig_h,uri,method | uri == "/register.php" | method == "POST" |
几乎可以确认批量注册的ip为192.168.37.177
192.168.37.177
9. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交注册成功数量
- 看流量,确定批量注册的ip
- 确定注册时间区间
- 注册开始时间以及特征开始算起,如果短时间,大批量的注册以及登录等相同的行为特征,那么可以判定为恶意用户
已知批量注册的ip为192.168.37.177
。
得到该ip首次注册时间为:
已知发起请求的后端文件为register.php
,发现插入数据库为users
在users表中看见,相匹配的时间点
筛选
1 | select count(*) from users where created_at >= '2025-04-30 09:59:00'; |
本题较为简单,没有做任何混淆,账户名称都是按顺序来的。所以可以直接得出答案为57。
假设我批量注册成功的用户没有特征,就是随机乱码,那我该怎么确认这是个批量注册?又该怎么确认注册成功的数量啊?根据时间吗?那万一那个时间段就有正常用户注册呢?
按照时间区间配合IP,查询这段时间内注册的用户以及对应ip,统计这些IP配合情报平台来确定。假设攻击者使用代理池?那就需要结合其他特征来判断,例如存在恶意行为?登录后做了相同的明显的批量化操作的动作?
10. 请提交攻击者登录成功admin用户的IP及密码,以&连接
先找特征值
使用上方注册的用户账密尝试登录,zhangsan51:zhangsan123
,发现302
跳转到了index
页面
猜测admin
用户登录也存在302
跳转,在后端的login.php
文件中发现,重定向路径为admin/index.php
筛选admin/index.php
流量
1 | http.request.uri == "/admin/index.php" |
往前走一个流
由此可得,攻击者ip为192.168.37.200
,密码为zhoudi123
192.168.37.200&zhoudi123
11. 数据库疑似被脱库,你需要找到漏洞点,如漏洞文件
搜索到了该cms的默认配置文件,泄露了数据库账密,且存在密码复用。
但该系统的数据库只能本地连接,所以无法直接连接数据库。
查看192.168.37.200
的流量
1 | count() by uri,status_code,id.orig_h | status_code!=404 | id.orig_h == 192.168.37.200 |
其中有一个路由被请求了79
次,/admin/settings.php
筛选该路由
1 | http.request.uri == "/admin/settings.php" |
追踪tcp流,翻到
往下翻,都是。可以判定为sql注入
settings.php