信息搜集学习
跟着从0到1这本书学习一下,大部分都笼统学过一些,但碍于不够系统,现在想要拾起来,从头再来罢了,欢迎各位一起监督学习
1.1举足轻重的信息搜集
信息搜集的分类
1 | 敏感目录 |
敏感目录泄露
通过敏感目录泄露,我们网袜给能获取网站的源代码和敏感的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的服务
可以使用service apache2 start
开启apache2服务
同样使用service apache2 status
查看apache2服务是否开启
1 | service apache2 start //开启服务 |
如下图为开启状态
使用浏览器打开127.0.0.1查看得到以下界面
然后使用ifconfig查一下IP地址
再次使用浏览器访问刚刚查到的自己的ip(上图白色部分位置)得到同样页面
进行下一步
2.创建一个git_test文件夹,并搭建实验场景
进入var/www/html
中创建一个git_test文件夹
初始化git仓库 git init
创建flag.php
1 | touch flag.php //创建flag.php文件 |
(ps:this is flag hhhh是我自己输入的内容)
然后提交修改git commit -m "flag"
这里我没有设置邮箱和用户名,不过影响不大,实验场景搭建完成
3.获取scrabble工具,运行工具得到flag
此时回到当前用户目录cd ~
使用git clone https://github.com/denny0223/scrabble.git
将工具克隆到本地
发现多了一个scrabble文件夹,进入,使用工具
1 | 使用方法:scrabble <url> |
使用工具,目标为我们刚刚搭建的git_test
./scrabble http://127.0.0.1/git_test/
使用命令ls
得到flag.php
使用cat flag.php
命令得到flag
(2)git回滚
【原理】:git作为版本控制工具,会记录每次提交(commit)的修改所以当存在git泄露时,敏感信息可能被删除或者被覆盖了,这时我们可以利用git的git reset
命令恢复到以前的版本
【环境复现】:
我们重新提交一个新的版本的flag.php
1 | echo "flag is old " > flag.php //修改flag.php的内容 |
此时flag.php的内容为:
【版本回调】:我们先使用scrabble工具获取源码(回到scrabble文件夹)
(ps:突然发现这个工具用完就没了,不知道有什么解决方法,所以推荐下载一个压缩包,每次使用都解压一次,这里是删了重下的)
获取源码:
再通过 git reset --hard HEAD^
命令跳到上一版本(在git中,用HEAD表示当前版本,上一个版本是HEAD^),即可获取到源码
另外可以使用 git log
可以查看提交历史记录并可以使用git reset --hard [commit id]
来回退到相应版本
(ps:commit id为划线部分,可以只使用前几位,系统会自己匹配,如下图)
使用git reflog
查看历史每一次命令,并且可以看到每次提交的commit id (精简版)搭配版本回退命令,可以达到类似的效果(如下图)
命令总结:
1 | git reflog //查看历史命令 |
(3)git分支
【原理】:git允许使用多个分支,从而使用户可以把工作从开发主线上分离出来,以免影响开发主线,如果没有新建分支,那么只有一条时间线,即只有一个分支,默认为master。因此敏感文件可能藏在别的分支中,使用git log只能看到当前分支的提交历史,无法看到其他分支的信息,而大多数git泄露都不支持切换分支,因此需要用到新的工具GitHacker
这里书里没有过多赘述,并且描述并不详细,不过还是要自己复现一下,以加深印象
【环境复现】:使用git branch
可以查看分支,此时只有master
使用 git branch dev
创建一个名为dev的分支(名字随意)
再次查看分支,此时有两个分支:master和dev,此时master有*标并且颜色为绿色代表此时处在master分支,如下图:
使用git checkout dev
命令可以切换到dev分支
此时修改flag.php的内容为flag{new flag is here}
git二连(加入暂存区,提交)如下图:
使用git checkout master
回到master页面。发现flag.php的内容仍为原来的,环境搭建完成!
接下来进行复现漏洞:
首先安装工具python3 -m pip install -i https://pypi.org/simple/ GitHacker
安装成功后便可以直接使用githacker命令了 githacker --url http://127.0.0.1/git_test/.git --output-folder result
1 | githacker --url http://127.0.0.1/git_test/.git --output-folder result |
执行命令后,在目录里生成了一个result文件夹,进入最里面的路径发现有一个flag.php打开发现内容为
内容正是master分支下的flag.php的内容,使用git reflog
看到是从tmp文件中clone出来的
我们找到那个临时文件夹 使用git reflog
命令可以看到所有的checkout信息
之后就可以切换到dev分支找到flag