兄弟们浅做一下社区评级very hard难度的靶场,话不多说直接开始我们的每日一扫,运气不错我们发现了git泄露,果断尝试git-dumper去拉一下文件
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 f2:5a:a9:66:65:3e:d0:b8:9d:a5:16:8c:e8:16:37:e2 (ECDSA)
|_ 256 9b:2d:1d:f8:13:74:ce:96:82:4e:19:35:f9:7e:1b:68 (ED25519)
80/tcp open http Apache httpd
|_http-title: Did not follow redirect to http://bitforge.lab/
|_http-server-header: Apache
| http-git:
| 192.168.165.186:80/.git/
| Git repository found!
| .git/config matched patterns 'user'
| Repository description: Unnamed repository; edit this file 'description' to name the...
|_ Last commit message: created .env to store the database configuration
3306/tcp open mysql MySQL 8.0.40-0ubuntu0.24.04.1
| ssl-cert: Subject: commonName=MySQL_Server_8.0.40_Auto_Generated_Server_Certificate
| Not valid before: 2025-01-15T14:38:11
|_Not valid after: 2035-01-13T14:38:11
| mysql-info:
| Protocol: 10
| Version: 8.0.40-0ubuntu0.24.04.1
| Thread ID: 19
| Capabilities flags: 65535
| Some Capabilities: SupportsCompression, LongColumnFlag, Speaks41ProtocolOld, LongPassword, Support41Auth, SupportsTransactions, IgnoreSigpipes, FoundRows, Speaks41ProtocolNew, IgnoreSpaceBeforeParenthesis, ConnectWithDatabase, DontAllowDatabaseTableColumn, InteractiveClient, ODBCClient, SwitchToSSLAfterHandshake, SupportsLoadDataLocal, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments
| Status: Autocommit
| Salt: ])w\x0D\x02x\x19Sj-Xn1p\x086>.+g
|_ Auth Plugin Name: caching_sha2_password
|_ssl-date: TLS randomness does not represent time
9000/tcp closed cslistener
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
这里我是使用创建一个虚拟环境,进行git-dumper的一些库的下载,要不然常规下载我的kali会报错
python3 -m venv /path/to/venv
source /path/to/venv/bin/activate
这里就是创建环境成功的图片

直接拉取我们可以发现两个文件index.php和login.php文件,单纯去看只能发现两个域名,其他啥也没有,果断使用git log看一下历史变动记录(这里的操作如果你打过oscp官方指定靶场会很熟悉)

然后就是用git show查看具体文件变更,如果不知道查看哪个文件可能有用,博主的建议是挨个看,就会发现中间两个文件内容差不多都有用户名和密码露出,第一个和第四个文件都无可以展示的内容,所以我就不展示了,嘿嘿

这里就是我们获得的域名,在之前的git爬取的文件中所记录的,添加到hosts文件中
当我们访问这个plan子域名时候,我们会跳转到这个登录界面,然后我们发现了该服务的版本号(这里基本我们就可以确定突破口大概在这里)然后我们拿之前获得的票据去登录发现不成功,遂暂时放弃
然后我们用这个票据尝试登录mysql,发现可以成功登录,但是这里还需要注意的一点是跟上一个靶场一样我们要加个-ssl=0,要不然会报错,然后就是正常的文件查询了(这里的第一个库里面没东西,第二个不用看,第三个禁止读取,所以我们只能看第四个了),很顺利的我们读到了admin的票据
果断尝试hash破解,结果如图所示发现破解不了,那么看似好像没路了,但实则不然,靶场的第一个难点来了,在破解不了的情况,我们可以尝试替换一下hash(这里考你会不会mysql的替换名命令),但是我们不知道这里用的是什么加密方式,遂暂时放弃
那没办法只能去跑一下plan的目录了,看看能不能看到一些有用的消息,结果如图所示我们跑出不少有用的目录,这里我比较感兴趣的是/includes目录,如果你简单学过一点点php代审,就会知道我为啥会先去看这个目录了

进入这个includes目录后发现了一堆可读文件,挨个点点,搜索一下关键字pass,看看能不能找到加密方式,结果一不小心发现了默认admin加密后的值,那还能说什么呢,果断复制粘贴保存下来

然后再回到数据库中使用updata命令对用户admin的密码尝试替换
UPDATE planning_user SET password='df5b909019c9b1659e86e0d6bf8da81d6fa3499e' WHERE user_id='ADM';
然后正如我所想,可以替换admin用户的命令,所以当你破解不了hash的时候,不妨试试updata命令

再回到之前的登录界面,直接输入admin:admin成功登录,证明票据成立

然后就是搜索这个版本的服务的exp,发现一个rce的漏洞,但是就是需要用户名和密码,正好符合我们之前的苦心,果断复制粘贴下来

这里使用exp的时候,需要注意一下攻击的路径,要不然他上传不了后门文件

在成功执行后,我们可以获得一个交互shell,只不过这个是不完整的,我们需要构造一个新的反弹shell,这里经过测试发现还是python3的反弹shell命令好用,其他常规的弹不成功

然后就是我们选择的反弹shell的端口,最好选靶机开放的端口,这个靶机设置防火墙了,其他端口弹不出来,一开始我还以为我的命令出现问题了,毕竟好久没遇到端口限制的靶机了

因为端口限制,所以直接远程执行linpeas会出现访问不到的情况,这个时候我们只能上传linpeas脚本了(呜呜呜,偷不了懒了)

这里也是很顺利的发现了一个jack的票据

话不多说直接su jack,成功拿到jack权限,顺利读到第一个flag,然后就是用jack权限再跑一遍linpeas,发现了jack底下有个sudo提权的方法

那多的不说,少的不唠我直接看看这个文件是干啥的,发现是个bash脚本,他会cd到一个目录底下,然后运行flask,那看到这个消息我们肯定也要去看一下这个目录底下有啥东西,然后紧接着我们便会看到一个python文件,而且还是我们jack权限可以改的,那虽然咱不知道他是咋关联到的,但是我猜测是劫持一类的方法,所以我们果断写个pytho脚本进行替换

这里是就是常规重命名加上传我们的恶意文件,然后sudo执行一下这个脚本
这里我们也是成功收到root权限的shell,完美结束

总结:
这个靶场不是很难,猜测作者想要考验git一些命令和mysql的update命令的使用,至于内网我纯靠经验猜测,因为他的那些脚本都没办法更改,能改的地方只有那一个python脚本,也算是瞎猫碰见死耗子,但是博主还是要嘴硬一下,这个靶场一点也不难,嘿嘿。
链接:
CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.