CTFHub:信息泄露

目录遍历

目录遍历漏洞:目录遍历(又称为路径遍历攻击、目录爬升或者回溯),旨在访问存储在web根目录文件夹之外的文件和目录,通过操纵带有“点-点-斜线”序列及变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置文件和系统关键文件。但是系统访问控制限制了对于某些文件的权限。
可以使用工具进行扫描发现目录遍历的漏洞

由于配置错误导致网站的目录可被遍历,一般该类漏洞可以为后续利用提供一些信息上的帮助。

这里有个疑惑:当我使用目录穿越进行读取的时候发现无法读取flag.txt
目录穿越:
如果include的文件名中含有“/”,那么它会识别其为一个带目录的文件,只有最后一个”/“后的字符串对应的文件会被包含,只有最后一个”/“后的字符串对应的文件会被包含而前面的字符串都只是在指定目录,默认从当前目录开始追溯(也就是flag_in_here所在目录)。那么flag_in_here其实是一个目录,经过后面几个的…/最终追溯到根目录,flag.txt应该是在根目录。那么它会识别其为一个带目录的文件,只有最后一个”/“后的字符串对应的文件会被包含。但是此题我使用目录穿越进行做题时却无法读取。
当然也可以利用师傅们的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests,re
url = 'http://challenge-704e9952763228c0.sandbox.ctfhub.com:10800/flag_in_here'
def get():
for number1 in range(1,5):
for number2 in range(1,5):
address = url + '/' + str(number1) + '/' + str(number2)
response = requests.get(address)
indes = re.findall('.*?(flag.txt).*?',response.text,re.S)
for inde in indes:
if inde == 'flag.txt':
print(address)
return
get()

PHPINFO

phpinfo() 是php中查看相关信息的函数,当在页面中执行phpinfo()函数时,php会将自身的所有信息全部打印出来。在phpinfo中会泄露很多服务端的一些信息;例如安装的一些模块、网站绝对路径、服务器自身的操作系统、使用的组件版本等等,在phpinfo中获得的这些信息会为下一步的渗透/做题提供一些帮助

备份文件下载:网站源码

原理:当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
直接用dirsearch进行扫描即可发现www.zip

下载下来之后便可以发现flag_2812328917.txt的文件;添加到url栏后即可获得flag


当然也可以通过提示编写脚本进行扫描;这里贴一下师傅们的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
if __name__ == '__main__':

# url为被扫描地址,后不加‘/’
url1 = 'http://challenge-3c36914916e0b990.sandbox.ctfhub.com:10800'

# 常见的网站源码备份文件名
list1 = ['web', 'website', 'backup', 'back', 'www', 'wwwroot', 'temp']
# 常见的网站源码备份文件后缀
list2 = ['tar', 'tar.gz', 'zip', 'rar']

for i in list1:
for j in list2:
back = str(i) + '.' + str(j)
url = str(url1) + '/' + back
print(back + ' ', end='')
print(requests.get(url).status_code)

备份文件下载:bak文件

原理:
有些时候网站管理员可能为了方便,会在修改某个文件的时候先复制一份,将其命名为xxx.bak。而大部分Web Server对bak文件并 不做任何处理,导致可以直接下载,从而获取到网站某个文件的源代码

备份文件下载:vim缓存

当开发人员在线上环境中使用vim编辑器,在使用过程中会留下vim编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。
vim 交换文件机制:
第一次意外退出: .index.php.swp
第二次意外退出: .index.php.swo
第三次意外退出: .index.php.swn
第四次意外退出: .index.php.swm
因为我们不知道是第几次的意外退出,所以我们可以一个一个的试;
也可以使用dirsearch扫一扫看看有没有惊喜

记得.index.php前面的那个点,经过尝试我们知道是第一次的意外退出;接下来我们使用命令将该文件的信息提取出来

1
vim -r index.php(2).swp

备份文件下载:.DS_Store

老规矩使用dirsearch扫描一下看看是否有备份文件

.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
接下来使用工具进行提取;使用DS_Store文件利用工具Python-dsstore;命令为

1
python3 main.py index.DS_Store


接下来访问这个文件即可得到flag

Git泄露

咱们在Hgame week2中就有遇到关于Git泄露的考点 ;接下来来系统的学习一下Git泄露
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
Git是分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。
在.git文件夹中:

1
2
3
4
5
6
7
8
hooks:存放一些shell脚本 
info:存放仓库的全局性排除文件信息
logs:保存所有更新的引用记录
objects:存放所有的git对象
refs:存储指向分支的提交对象的指针
config:仓库的配置信息
index:暂存区(二进制)
HEAD:映射到ref的引用

git的基本使用:
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# git init
初始化一个 Git 仓库,在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变

# git init batmanfuture
初始化后,会在 batmanfuture 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中

# git add
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交
# git commit -m '初始化项目版本'

# git clone
使用 git clone 从现有 Git 仓库中拷贝项目

# git config
git config --list 显示当前的 git 配置信息
git config -e 编辑 git 配置文件
git config -e --global 针对系统上所有仓库

# git status
查看仓库当前的状态,显示有变更的文件

# git diff
比较文件的不同,即暂存区和工作区的差异

# git log
查看历史提交记录

# git pull
下载远程代码并合并

# git push
上传远程代码并合并

# git fetch
从远程获取代码库

漏洞利用工具:GitHack(这里注意是使用python2的版本使用)

Git泄露:Log

依旧是先扫描一下,发现存在git泄露

此时便需要使用GitHack工具clone目标源代码到本地

然执行git命令得到flag

Git泄露:Stash

老规矩依旧是先扫描一下此时依旧是git泄露

接着使用GitHack将目标源码到本地;然而当我们继续使用git show的命令时发现无法得到flag

并且当我继续看到历史版本之后,我想重建历史版本然后进行查看;发现依旧没有;

1
git reset --hard 297fbbc0d77fe7e96e968375654fab42bbf6af1d


此时我们留意到有一个文件被删除了

执行 git stash list 发现有 stash;执行 git stash pop 发现从 git 栈中弹出来一个文件,这个文件的内容就是 flag

或者cat .git/refs/stash 找到 stash 对应的 hash;也可以获得flag

原理:stash 用于保存 git 工作状态到 git 栈,在需要的时候再恢复。

Git泄露:Index

依旧是先扫一扫

此题和log一样的命令即可得出flag

SVN泄露

当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。与git两者之间最核心的区别就是git属于分布式控制系统,SVN属于集中式控制系统。简单来说前者就是以每一台主机都当成一台服务器,而后者则是只有一台服务器来维护和控制代码。
漏洞成因:
在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客使用此漏
洞可以下载整套网站的源代码。在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但是一些
网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。
老规矩扫一扫

使用 dvcs-ripper 工具中的 rip-svn.pl 脚本进行 clone.

1
./rip-svn.pl -v -u


可以先tree .svn 看看大概

然后看到有个pristine文件(原始文件);此时猜测flag在这个文件之中;接下来就是linux的命令获得flag了

HG泄露

当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就会引起
hg泄露漏洞。
老规矩扫一扫;此时发现hg泄露

此时还是使用dvcs-ripper工具

1
./rip-svn.pl -v -u


看到一堆文件,我也不知道在哪,我们可以用这个命令,来查找哪里含有flag.
grep 命令用于查找文件里符合条件的字符串,这个r的意思是递归的对目录下的所有文件(包括子目录)进行 grep
即是利用正则匹配进行查找flag

1
grep -r flag

此时可以利用curl命令将结果显示在屏幕上

小结

以上的内容我觉得在CTF中可以称为信息收集;信息收集往往是第一步;我们可以通过dirsearch进行扫描看看是否有信息泄露;为下一步的解题做好准备。接下来以buu两道入门题来练练手
N1BOOK:[第一章 web入门]常见的搜集
打开后已经提醒我们是敏感文件并让我们进行信息收集

此时我们通过dirsearch进行扫描发现了备份文件下载中的.DS_Store泄露

进行kali使用工具进行提取发现没有我们想要的flag

接着发现可以进行目录遍历

进行访问获得flag2:s_v3ry_im 继续往下看仍然有发现可以使用robots协议进行一个读取

最终获得flag1:n1book{info_1
此时继续往下看又发现了vim泄露

此时发现了第三个flag:flag3:p0rtant_hack}

N1BOOK:[第一章 web入门]粗心的小李
使用dirsearch进行扫描发现是git泄露

使用GitHack工具进行克隆到本地;然后使用git命令即可获得flag