CTFHub:信息泄露
目录遍历
目录遍历漏洞:目录遍历(又称为路径遍历攻击、目录爬升或者回溯),旨在访问存储在web根目录文件夹之外的文件和目录,通过操纵带有“点-点-斜线”序列及变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置文件和系统关键文件。但是系统访问控制限制了对于某些文件的权限。
可以使用工具进行扫描发现目录遍历的漏洞
由于配置错误导致网站的目录可被遍历,一般该类漏洞可以为后续利用提供一些信息上的帮助。
这里有个疑惑:当我使用目录穿越进行读取的时候发现无法读取flag.txt
目录穿越:
如果include的文件名中含有“/”,那么它会识别其为一个带目录的文件,只有最后一个”/“后的字符串对应的文件会被包含,只有最后一个”/“后的字符串对应的文件会被包含而前面的字符串都只是在指定目录,默认从当前目录开始追溯(也就是flag_in_here所在目录)。那么flag_in_here其实是一个目录,经过后面几个的…/最终追溯到根目录,flag.txt应该是在根目录。那么它会识别其为一个带目录的文件,只有最后一个”/“后的字符串对应的文件会被包含。但是此题我使用目录穿越进行做题时却无法读取。
当然也可以利用师傅们的脚本
1 | import requests,re |
PHPINFO
phpinfo() 是php中查看相关信息的函数,当在页面中执行phpinfo()函数时,php会将自身的所有信息全部打印出来。在phpinfo中会泄露很多服务端的一些信息;例如安装的一些模块、网站绝对路径、服务器自身的操作系统、使用的组件版本等等,在phpinfo中获得的这些信息会为下一步的渗透/做题提供一些帮助
备份文件下载:网站源码
原理:当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
直接用dirsearch进行扫描即可发现www.zip
下载下来之后便可以发现flag_2812328917.txt的文件;添加到url栏后即可获得flag
当然也可以通过提示编写脚本进行扫描;这里贴一下师傅们的脚本
1 | import requests |
备份文件下载: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 | hooks:存放一些shell脚本 |
git的基本使用:
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
1 | # git init |
漏洞利用工具: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