跟着从0到1这本书学习一下,大部分都笼统学过一些,但碍于不够系统,现在想要拾起来,从头再来罢了,欢迎各位一起监督学习

1.1举足轻重的信息搜集

信息搜集的分类

1
2
3
4
5
敏感目录

敏感备份文件

Banner识别

敏感目录泄露

通过敏感目录泄露,我们网袜给能获取网站的源代码和敏感的URL地址
如网站的后台地址等。

1.git泄露

【漏洞简介】:git是一个主流的分布式版本控制系统,开发人员在开发过程中经常会遗忘.git文件夹,导致攻击者可以从.git文件夹中的信息获取开发人员在开发过程中提交过的所有源码,进而导致服务器被攻击而沦陷

(1)常规git泄露

【使用工具】:scrabble:denny0223/scrabble: Simple tool to recover .git folder from remote server (github.com)

首先本地搭建web环境,这里使用的是自己的kali虚拟机

1.安装apache2服务

使用apt-get install apache2安装apache2的服务

image-20230128112331180

可以使用service apache2 start开启apache2服务
同样使用service apache2 status查看apache2服务是否开启

1
2
3
service apache2 start //开启服务
service apache2 status //查看服务状态
service apache2 stop //停止服务

如下图为开启状态

image-20230128112658874

使用浏览器打开127.0.0.1查看得到以下界面

image-20230128113218985

然后使用ifconfig查一下IP地址

image-20230128113404350

再次使用浏览器访问刚刚查到的自己的ip(上图白色部分位置)得到同样页面
image-20230128113549628

进行下一步

2.创建一个git_test文件夹,并搭建实验场景

进入var/www/html中创建一个git_test文件夹

image-20230128114513598

初始化git仓库 git init

image-20230128121207216

创建flag.php

1
2
3
touch flag.php //创建flag.php文件
vim flag.php //编辑flag.php文件,随便输入一些内容
git add flag.php // 添加flag.php到文件暂存区

image-20230128121238417

(ps:this is flag hhhh是我自己输入的内容)

然后提交修改git commit -m "flag"

image-20230128121311790

这里我没有设置邮箱和用户名,不过影响不大,实验场景搭建完成

3.获取scrabble工具,运行工具得到flag

此时回到当前用户目录cd ~

使用git clone https://github.com/denny0223/scrabble.git

将工具克隆到本地

image-20230128121342190

发现多了一个scrabble文件夹,进入,使用工具

1
2
使用方法:scrabble <url>
示例:scrabble http://example.com/

使用工具,目标为我们刚刚搭建的git_test

./scrabble http://127.0.0.1/git_test/

image-20230128120959386

使用命令ls得到flag.php
使用cat flag.php 命令得到flag

image-20230128122116935

(2)git回滚

【原理】:git作为版本控制工具,会记录每次提交(commit)的修改所以当存在git泄露时,敏感信息可能被删除或者被覆盖了,这时我们可以利用git的git reset命令恢复到以前的版本

【环境复现】:

我们重新提交一个新的版本的flag.php

1
2
3
4
echo "flag is old " > flag.php //修改flag.php的内容
cat flag.php //获取flag.php的内容
git add flag.php //添加flag.php到文件暂存区
git commit -m "old" //提交

image-20230128151641338

此时flag.php的内容为:

image-20230128152126614

【版本回调】:我们先使用scrabble工具获取源码(回到scrabble文件夹)

image-20230128154349821

(ps:突然发现这个工具用完就没了,不知道有什么解决方法,所以推荐下载一个压缩包,每次使用都解压一次,这里是删了重下的)

获取源码:

image-20230128154551483

再通过 git reset --hard HEAD^命令跳到上一版本(在git中,用HEAD表示当前版本,上一个版本是HEAD^),即可获取到源码

image-20230128154630452

另外可以使用 git log可以查看提交历史记录并可以使用git reset --hard [commit id]来回退到相应版本

image-20230128202835665

(ps:commit id为划线部分,可以只使用前几位,系统会自己匹配,如下图)

使用git reflog查看历史每一次命令,并且可以看到每次提交的commit id (精简版)搭配版本回退命令,可以达到类似的效果(如下图)

image-20230128160508603

命令总结:

1
2
3
git reflog //查看历史命令
git reset --hard xxx //回退版本 HEAD代表当前版本 HEAD^代表上一版本 HEAD~100表示回退100个版本
git log //查看提交历史记录
(3)git分支

【原理】:git允许使用多个分支,从而使用户可以把工作从开发主线上分离出来,以免影响开发主线,如果没有新建分支,那么只有一条时间线,即只有一个分支,默认为master。因此敏感文件可能藏在别的分支中,使用git log只能看到当前分支的提交历史,无法看到其他分支的信息,而大多数git泄露都不支持切换分支,因此需要用到新的工具GitHacker

这里书里没有过多赘述,并且描述并不详细,不过还是要自己复现一下,以加深印象

【环境复现】:使用git branch 可以查看分支,此时只有master

使用 git branch dev创建一个名为dev的分支(名字随意

再次查看分支,此时有两个分支:master和dev,此时master有*标并且颜色为绿色代表此时处在master分支,如下图:

image-20230128210339890

使用git checkout dev命令可以切换到dev分支

此时修改flag.php的内容为flag{new flag is here}

image-20230128210907463

git二连(加入暂存区,提交)如下图:

image-20230128211151702

使用git checkout master回到master页面。发现flag.php的内容仍为原来的,环境搭建完成!

image-20230128213658558

接下来进行复现漏洞:

首先安装工具python3 -m pip install -i https://pypi.org/simple/ GitHacker

image-20230128213221099

安装成功后便可以直接使用githacker命令了 githacker --url http://127.0.0.1/git_test/.git --output-folder result

1
2
3
githacker --url http://127.0.0.1/git_test/.git --output-folder result
//--url 后面跟url与scrabble不同的是,git hacker需要将.git路径加上
//--output-folder xxx 表示结果将要输出到result文件夹中

image-20230128214149062

执行命令后,在目录里生成了一个result文件夹,进入最里面的路径发现有一个flag.php打开发现内容为

image-20230128214350931

内容正是master分支下的flag.php的内容,使用git reflog看到是从tmp文件中clone出来的

image-20230128215450007

我们找到那个临时文件夹 使用git reflog命令可以看到所有的checkout信息

image-20230128215605655

之后就可以切换到dev分支找到flag