当前位置: 首页 > news >正文

玄机——某医院系统被脱库

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 靶机介绍
    • 1. 首次发起端口扫描的IP是
    • 2.审计流量和日志快速定位扫描次数最多的IP
    • 3.审计流量和日志快速定位扫描次数第二的IP
    • 4.哪个IP使用了AWVS扫描器
    • 5. 还有个IP也使用了扫描器进行主机+WEB扫描,提交其扫描次数(以wireshark数量为主)
    • 6.运维人员发现有IP进行了WEB登录爆破,提交其IP
    • 7.运维人员发现有IP进行了WEB登录爆破,提交其爆破次数
    • 8.运维发现数据库疑似被写入了垃圾用户(批量注册)请提交其IP
    • 9. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交注册成功数量
    • 10.请提交攻击者登录成功admin用户的IP及密码,以&连接
    • 11.数据库疑似被脱库,你需要找到漏洞点,如漏洞文件
    • 12.找到攻击者获取医院数据(患者身份信息的数量)


靶机介绍

应急加固-医院脱库应急处理
来源公众号:州弟学安全
登录账号密码:administrator/Zhoudi666
某医院系统疑似被攻击,攻击者常规手段获取到了后台账号密码,在此之前攻击者使用多个IP进行> 扫描,你作为安全服务工程师需要分析其流量包和日志来快速审计,每个IP的扫描特征并快速归类,并思考在常规渗透中,攻击者是怎么获取到的管理员密码进行登录的后台
此外除了已有需要提交的题目,你还需要做的是

  1. 根据桌面已有的工具进行分析
    根据桌面已有的文档模板进行编写报告进行整个流程的梳理(后期给客户进行汇报)
  2. 修复出现的相关漏洞(无论使用任何方法),保证业务系统正常运行
  3. 看看系统中自己能不能挖出其他漏洞

下载地址:
123网盘:https://www.123684.com/s/oJnajv-EzWnh
玄机:https://xj.edisec.net/challenges/140

参考文章:州弟学安全(公众号)


靶机系统:Windows server 2019
文件类型:OVA
大小:8G左右
已有工具:WPS、wireshark、phpstudy、Google浏览器、ZUI流量分析工具等
请确保你的电脑硬盘有足够的空间

题目:

  1. 首次发起端口扫描的IP是
  2. 审计流量和日志快速定位扫描次数最多的IP
  3. 审计流量和日志快速定位扫描次数第二的IP
  4. 哪个IP使用了AWVS扫描器
  5. 还有个IP也使用了扫描器进行主机+WEB扫描,提交其扫描次数(以wireshark数量为主)
  6. 运维人员发现有IP进行了WEB登录爆破,提交其IP
  7. 运维人员发现有IP进行了WEB登录爆破,提交其爆破次数
  8. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交其IP
  9. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交注册成功数量
  10. 请提交攻击者登录成功admin用户的IP及密码,以&连接
  11. 数据库疑似被脱库,你需要找到漏洞点,如漏洞文件
  12. 找到攻击者获取医院数据(患者身份信息的数量)

1. 首次发起端口扫描的IP是

这里我们进入靶机,发现页面被锁定,按键盘也没有用:
在这里插入图片描述

不多说——>虚拟机——>发送ctrl+Alt+Del

在这里插入图片描述

进入后可以找到一个流量包,根据题目首次发起端口扫描的IP是

  • 思路:
    • (1)首先根据时间排序,找到最先发起端口扫描的IP地址
    • (2)端口扫描的特征:SYN 半扫描不会完成三次握手,为排除正常建立连接的 SYN 包
    • (3)可使用tcp.flags.syn == 1 && tcp.flags.ack == 0,表示只显示 SYN 标志位为 1 且 ACK 标志位为 0 的数据包。

在这里插入图片描述

可以发现最开始有192.168.27.3使用54977端口去对192.168.37.2进行端口扫描(被访问不同的端口),可认为这个IP是一个可疑IP

flag{192.168.27.3}

2.审计流量和日志快速定位扫描次数最多的IP

根据题目,要去扫描次数最多的IP,那么我们就要知道有哪些IP,访问的次数分别是多少?如何实现呢?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
答:扫描最多,那么肯定会访问到404页面;但由于不知道当前系统使用的是404还是302,301或者自定义的状态码,所以要进行尝试;

(1)这里就会用到我们之前接触过的工具 ZUI;它 的一大优势在于,当我们导入流量包后,它能自动把流量数据拆解成五元组信息
(2)更方便的是,在将流量数据转化为日志格式后,我们可以对这些数据进行快速的聚合分析和查询操作,整个过程几乎不需要等待加载,效率非常高。
(3)之前学校挖矿应急响应也使用过。

在这里插入图片描述
使用语句,进行筛选:

count() by status_code | sort -count() # 得到所有的状态码数量
count() by id.orig_h,status_code |where status_code==404

在这里插入图片描述

可以发现404的次数最多;
随后再查找那个IP访问的次数最多:

在这里插入图片描述
话不多说,明眼人都看得出来,到wireshark验证一下:

可以分别看看192.168.37.3192.168.37.1这两个IP的流量情况:

ip.addr==192.168.37.3
ip.addr==192.168.37.1

在这里插入图片描述
在这里插入图片描述
可以看到大多数时候,192.168.37.3都与192.168.37.2进行通信;

在这里插入图片描述
这么看扫描次数最多的还是192.168.37.3,再看192.168.37.1是有很多UDP协议的其它流量使用的,比如DHCP,ssdp和一些其它出网的协议,因为在仿真的过程中,它是作为网关的。

问题来了:有些师傅问,统计次数有什么用?
别忘了我们的专题是学习安全服务,统计次数多用于HW和一些日常重保和应急响应中,最终汇报给客户工作的报告中需要提及到详细的流程以供复盘。

所以结果:

flag{192.168.37.3}

3.审计流量和日志快速定位扫描次数第二的IP

根据之前的结果,可以得知192.168.37.1 是排第二的IP地址

在这里插入图片描述
结果为:

flag{192.168.37.1}

4.哪个IP使用了AWVS扫描器

常见的AWVS扫描器特征

  • 域名 / 标识:acunetix、bxss.me
  • 特征描述:“请求头以及 url 中包含 acunetix” ,这是识别与 AWVS 相关流量或请求的特征点,常用于安全检测中识别 AWVS 工具发起的扫描等操作 。

所以我们可以去匹配他的这些关键字:

http contains "acunetix"
http contains "bxss.me"

在这里插入图片描述
在这里插入图片描述

可以看到,没有意外,都是192.168.37.1这个IP进行扫描;

这里的知识点主要学习对于安服在常规日常值守的情况下,对于互联网资产或内部突发扫描,可以及时对扫描器进行做特征识别,来研判是否为误报,每个工具(无论扫描还是shell管理都有自己的特征)

flag{192.168.37.1}

5. 还有个IP也使用了扫描器进行主机+WEB扫描,提交其扫描次数(以wireshark数量为主)

根据题目,注意到说的是“主机+web扫描”,那么还是按照题目1的方法进行筛选,看看和192.168.37.3一样进行主机扫描的还有哪个?

tcp.flags.syn == 1 and tcp.flags.ack == 0 and ip.addr != 192.168.37.3

可以看到主要有一下IP值得注意:
在这里插入图片描述

(1)针对192.168.37.100行为分析:

在这里插入图片描述
发现他不断访问着8080端口,正常的扫描行为则是扫描多个不同的端口,所以暂时可排除嫌疑;

(2)针对192.168.37.1行为分析:
在这里插入图片描述
同理;

(3)针对192.168.37.177行为分析:
在这里插入图片描述
(4)针对192.168.37.200行为分析:
在这里插入图片描述
(5)针对192.168.37.100行为分析,也是终于有了发现:

在这里插入图片描述
很明显这就是端口扫描的特征;
已知192.168.37.100确定存在端口扫描的特征,那么筛选一下是否存在漏洞扫描特征(相比于192.168.37.1和192.168.37.3数量不是很多)

id.orig_h==192.168.37.100 |status_code==404

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到wireshark里输入ip.src==192.168.37.100 and http

在这里插入图片描述
发现有着目录遍历,任意文件读取的特征;(相比于192.168.37.1和192.168.37.3,只有100有着这些特征

(1)所以大概筛选一遍,只有192.168.37.100存在这个问题,进行了主机服务和web服务以及漏洞扫描的特征,那么他的扫描次数来统计一下:ip.src192.168.37.100&&ip.dst192.168.37.2
(2)最终结果是4812次

flag{192.168.37.100}

6.运维人员发现有IP进行了WEB登录爆破,提交其IP

思路:先打开桌面的phpstudy,去网页127.0.0.1登录账号,看页面会跳转到哪个接口

在这里插入图片描述

输入账号密码,然后按F12查看响应:

在这里插入图片描述
在这里插入图片描述

所以我们可以知道,攻击者呀进行web登录爆破,必然会进入到 /login 页面进行操作,所以到流量包中,我们可以去筛选关键字;

使用的POST方式进行的请求,那么直接筛选一下:

count() by id.orig_h,uri,method| uri=="/login.php" | method=="POST"

在这里插入图片描述

去wireshark查看一下192.168.37.87这个IP:

 http.request.uri=="/login.php" and http.request.method=="POST"

在这里插入图片描述
在这里插入图片描述

可以看到清一色的 /login.php 页面登录,还有几个不同的IP地址;
通过流量分析192.168.37.87确实存在爆破行为,然后192.168.37.200也存在爆破行为,但是爆破有特征,最后还登录成功了,所以存在爆破行为的是:192.168.37.87&192.168.37.200

192.168.37.87&192.168.37.200

7.运维人员发现有IP进行了WEB登录爆破,提交其爆破次数

已知以上两个IP存在爆破行为,那么直接进行筛选就行:

(ip.src==192.168.37.87 || ip.src==192.168.37.200) && http.request.uri=="/login.php" && http.request.method=="POST"

在这里插入图片描述

同理,用ZUI也是一样:

count() by id.orig_h,uri,method,http| uri=="/login.php" | method=="POST"

在这里插入图片描述

flag{112}

8.运维发现数据库疑似被写入了垃圾用户(批量注册)请提交其IP

批量注册的危害:
垃圾用户会占用数据库存储和服务器资源,拖慢系统性能;导致业务数据统计失真,干扰运营决策;可能被用于薅取福利、发送垃圾信息,破坏用户体验和平台声誉;还可能成为后续攻击的跳板,增加安全风险与运维清理成本,甚至引发合规问题。

这里回到靶机,可以看到网页跳转的url接口是: /register.php

在这里插入图片描述
在这里插入图片描述
与登陆时的页面同理,操作不再赘述;

count() by id.orig_h,uri,method,http| uri=="/register.php" | method=="POST"

在这里插入图片描述
到wireshark去验证:

在这里插入图片描述

所以,批量注册的IP是

192.168.37.177

9. 运维发现数据库疑似被写入了垃圾用户(批量注册)请提交注册成功数量

注意: 批量注册请求不代表注册成功数量,所以我们需要去数据库中校验表,在此之前需要知道是哪个数据表;

注册走的是insert语句,直接在register搜索insert关键字就行,可以看到是users表

在这里插入图片描述
在这里插入图片描述
进入php的数据库管理工具:

在这里插入图片描述
从第一个请求的时间往后看,然后对比users表内的时间往后数;

在这里插入图片描述
在这里插入图片描述

可以看到后面有规律的用户,直接看数量就行了;

剩下是官方的原解释:

zhangsan0-zhangsan57一共是58个用户,有些师傅会说,你这太简单了,如果人家批量注册,不同IP,不同用户名你怎么办?


好的,这个情况下就根据注册开始时间以及特征开始算起,如果短时间,大批量的注册以及登录等相同的行为特征,那么可以判定为恶意用户,如:某购物站分别使用代理IP进行注册机注册,且注册用户名,密码无规则或强规则,以及登录后分别做了相同操作的,可以判定为恶意用户,我记得腾讯之前有个叫做防水墙的安全工具是专门针对这一类的,当然了这些需要判断行为特征记录到日志中,需要结合非常多的特征,不单单是判断行为就足够,这样会误封很多账号,所以在对抗薅毛行为的情况下是十分心累的。

在此环境中我们可以通过sql语句进行查询:

SELECT COUNT(*)  
FROM users  
WHERE username LIKE '%zhangsan%';

在这里插入图片描述

加上条件:

SELECT COUNT(*)  
FROM users  
WHERE created_at >= '2025-04-30 09:59:00';

在这里插入图片描述

flag{57}

10.请提交攻击者登录成功admin用户的IP及密码,以&连接

根据题目,可以知道攻击者的账号是admin,之前登录时不是知道了账号密码的payload以及请求方式为POST吗,所以可以根据关键词进行筛选;

http contains "username" and http.request.uri =="/login.php" and http.request.method == "POST"

在这里插入图片描述
可以看到有一百多条记录,还是要继续过滤:

在这里插入图片描述


窍门“:正常情况下,登录成功会进行302跳转,那么就需要筛选状态码了;

http.response.code == 302

但是这样还是不能很清晰的看到,因为有很多请求可能也是302状态码,所以直接url看/admin/index.php,因为302跳转到这个地址(在熟悉业务系统的情况下可以这么做,实际情况下需要进行测试然后分析流量)

输入命令进行尝试:

http.request.uri=="/admin/index.php"

在这里插入图片描述
分别点击进行查看:

在这里插入图片描述
毋庸置疑,就是192.168.37.200登录成功的了,因为可以看到192.168.37.3应该是扫描目录到admin/index了然后未授权跳转到登录页面了,所以才302状态码的,而192.168.37.200则是200状态码,代表登录成功了,那么直接追一下流量,看到登录密码为zhoudi123

11.数据库疑似被脱库,你需要找到漏洞点,如漏洞文件

首先,认识到脱库一般都与sql语句有关,执行sql操作;

回看之前的 /login.php 登录页面,发现了某些规律:

在这里插入图片描述
在这里插入图片描述

为什么攻击者会这么有规律的输入账号密码呢?

肯定不是爆破的,有位师傅在我之前已经写出来WP了,但是也确实没想到怎么获取到密码的,假设在此之前爆破的是同一个人,为什么突然爆破账号就有规律了呢?

其实很多人还是忽略了一点,在攻击之前,渗透测试的信息收集,攻击者是否找到了一些信息?还记得之前多次说过信息收集的地方吗?使用Google,GitHub,gitee进行搜集,我们在逆向思路的适合一定要走攻击者的路子

在这里插入图片描述
gitee中模糊搜索关键字看到了有这个系统,至于源码是什么背景下被上传的自行分析,但在生产环境下这肯定是严重事件问题

在这里插入图片描述

1)可以看到账户的默认信息,所以就证明了攻击者有规律的爆破是根据这里来的,那么攻击者使用的是zhoudi123而不是admin123登录成功的,这个密码哪里来的呢?
2)还记得之前提到的渗透测试中密码复用技术吗?我不知道细心的师傅有没有发现数据库密码也是zhoudi123

在这里插入图片描述

这也就证明了攻击者尝试了密码复用进入了管理员后台,但是为什么攻击者不直接连接数据库呢?

在这里插入图片描述
有可能数据库配置权限只能本地。

已知是脱库,那么大概率和SQL有关了,我们使用ZUI进行筛选一下:

count () by uri,status_code,id.orig_h|status_code!=404|id.orig_h==192.168.37.200

在这里插入图片描述
在这里插入图片描述

上图看到settings.php竟然被请求了79次,这非常不正常,直接wireshark看看:

http.request.uri=="/admin/settings.php"&&http.request.method=="POST"

在这里插入图片描述
随便点击进去,可以发现参数存在sql注入特征:

在这里插入图片描述
在这里插入图片描述

既然在打SQL注入,那么漏洞点是username,看看这个settings.php里面的这一块语句

在这里插入图片描述
可以看到username会直接被拼接到语句中进行执行,存在SQL注入,那么攻击者在之前获取到了源代码,审计出漏洞也很合理,所以漏洞文件是settings.php/admin/settings.php

--

12.找到攻击者获取医院数据(患者身份信息的数量)

暂未学到没有思路,以后补充。欢迎在评论区指点。

http://www.lryc.cn/news/579716.html

相关文章:

  • 板凳-------Mysql cookbook学习 (十一--------3)
  • 项目中数据库表设计规范与实践(含案例)
  • OS15.【Linux】gdb调试器的简单使用
  • 力扣网编程第80题:删除有序数组中的重复项(简单)
  • springsecurity---使用流程、加密机制、自定义密码匹配器、token字符串生成
  • 【STM32实践篇】:I2C驱动编写
  • Vue如何处理数据、v-HTML的使用及总结
  • 8分钟讲完 Tomcat架构及工作原理
  • Node.js与Webpack
  • 前端面试专栏-算法篇:17. 排序算法
  • Spring SseEmitter 系统详细讲解
  • XILINX FPGA如何做时序分析和时序优化?
  • 手机内存融合是什么意思
  • Redis—哨兵模式
  • C++之路:类基础、构造析构、拷贝构造函数
  • 算法学习笔记:5.后缀数组——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • MySQL 学习 之 你还在用 TIMESTAMP 吗?
  • Functionize 结合了 AI 与云平台的现代化自动化测试工具
  • MySQL 8.0 OCP 1Z0-908 题目解析(16)
  • curl for android
  • 高通QCS8550部署Yolov10模型与性能测试
  • ADC笔试面试题型和详细解析下
  • 蒙特卡洛方法:随机抽样的艺术与科学
  • c++ 的标准库 --- std::
  • {{ }}和v-on:click
  • 重学React(二):添加交互
  • 前端单元测试覆盖率工具有哪些,分别有什么优缺点
  • 鸿蒙操作系统核心特性解析:从分布式架构到高效开发的全景技术图谱
  • 深度学习-逻辑回归
  • 异步Websocket构建聊天室