??常见的网站源码备份文件后缀:
??有些时候网站管理员可能为了方便,会在修改某个文件的时候先复制一份,将其命名为xxx.bak。而大部分Web Server对bak文件并不做任何处理,导致可以直接下载,从而获取到网站某个文件的源代码。
??方法:将例如index.php.bar
文件重命名index.php
,再打开。
??当vim异常退出时,都会生成一个用于备份缓冲区内容的swp临时文件,来记录了用户在非正常关闭vim编辑器之前未能及时保存的修改,用于文件恢复。假如原文件名为index.php
.index.php.swp
.index.php.swo
.index.php.swn
方法:同上,改文件名为index.php
再打开。
??.DS_Store
是 Mac OS 保存文件夹的自定义属性的隐藏文件,通过.DS_Store可以知道这个目录里面所有文件的清单。直接访问xxx/.DS_Store
可以下载该文件,但是无法读取,要想读取该文件,需要用到ds_store_exp.py,用法:python ds_store_exp.py <url>/.DS_Store
。
再访问该脚本扫描到的文件/文件夹。
.git目录
:使用git init
初始化git仓库的时候,生成的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。.git/config
:Git仓库的配置文件.git/config
:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的paren
除了上述文件,还有其他文件。
??git
信息泄露的原因:当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
??判断是否存在git泄露?
使用curl
访问目标网址下的xxx/.git
、xxx/.git/config
或者xxx/.git/HEAD
,看是否有内容返回。
说明存在git信息泄露,再使用githacker。使用githacker的目的是去github上下载网站源码。
下载网站源码:python2 Githack.py http://challenge-b600332c47be484d.sandbox.ctfhub.com:10800/.git
进入相应的目录,直接使用git log
查看日志
当前所处的版本为
remove flag
,flag 在add flag
这次提交中
方法一:直接与 add flag (dc33)
这次提交进行比对,命令如下:git diff dc33(add flag)
方法二:直接切换到add flag (dc22)
这个版本。命令如下:git reset --hard dc33(add flag)
??知识点:git 泄露 .git/refs/stash
,stash
用于保存 git 工作状态到 git 栈,在需要的时候再恢复。使用stash命令可以恢复文件。
下载网站源码:python2 Githack.py http://challenge-ccc966c169231c6b.sandbox.ctfhub.com:10800//.git
进入到相应文件夹,执行 git stash list
查看是否有stash:
此处存在
stash
git stash pop
弹出git栈中的文件。
flag就在txt文件中。
> 可以将stash
栈理解为一个放被删除的文件的栈,就相当于一个回收站。
??SVN(subversion)是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就用用于多个人共同开发同一个项目,实现的共享资源,实现最终集中式的管理。在使用 SVN 管理本地代码过程中,使用svn checkout
功能来更新代码时,项目目录下会自动生成隐藏的.svn
文件夹,其中包含重要的源代码信息;
造成SVN源代码漏洞的主要原因是管理员操作不规范,在发布代码时未使用导出功能,而是直接复制代码文件夹到WEB服务器上,导致.svn
被暴露于外网环境,黑客对此可进一步利用:
.svn/entries
文件,获取到服务器源码、svn服务器账号密码等信息;.svn/wc.db
数据库文件获取到一些数据库信息;.svn
目录下还包含了以.svn-base
结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。entries
和format
文件,数据只有个数字12。wc.db-journal
空文件tmp
空目录pristine
里是一些00~ff的名称的文件夹,每个文件夹里有若干哈希过的.svn-base备份文件。wc.db
文件用SQLiteStudio软件打开 wc.db文件,在 NODES 表中,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名。说明存在svn泄露
.svn
文件夹,命令如下:rip-svn.pl -u <url>/.svn
。注意要安装perl
环境。pristine
文件夹中找备份文件。??当开发人员使用 Mercurial(hg)
进行版本控制,对站点自动部署。在初始化项目时,HG会在当前文件夹下创建一个.hg 隐藏文件夹
,其中包含代码和分支修改记录等信息。
可以先使用curl <url>/.hg
测试一下:
之前.svn也是301,说不定存在hg泄露。
使用dvcs-ripper下载网站源码,命令如下:rip-hg.pl -v -u <url>/.hg/
使用tree .hg
查看文件夹结构:
递归查找子文件目录下的关键词flag:grep -r flag
进入cd .hg/store/fncache
,这里应该是保存网站源码缓存的地方,可以看到有index.html
和50x.html
。
故访问http://challenge-e04eb8044f3c9d3e.sandbox.ctfhub.com:10800/flag_1807820070.txt
.