点击后自动跳转~
既然说目录遍历,那就挨个点呗~
最终,在4/1里面找到了flag~
点击后显示phpinfo信息
翻一翻就出来了
浅谈ctf中phpinfo需要关注的点~
扫描目录~
将备份文件下载解压~
哇哦~
把文件名加到链接后面即可。
扫描目录~
找到备份文件~
由说明可知,flag在index.php源码中,那么备份文件应该是index.php.swp
我们访问链接,下载文件~
可以使用vim -r {your file name} 命令来恢复文件
我们直接访问~下载了备份文件
在linux中直接cat文件就可以
发现一个txt文件。打开~
当然也可以用脚本:https://github.com/gehaxelt/Python-dsstorearrow-up-right
用dirsearch扫描一遍,接着使用githack将泄露文件搞出来。
84C15A503A8EAF75D7561CE3C197495F cd进入dist内的源码文件夹。
查看还原的信息,使用git log查看历史记录。
28EDA5D23B4A42840321ED22DC214086 当前所处的版本为 remove flag,flag 在 add flag 这次提交中。与 add flag 这次提交进行比对。
命令如下
老样子githack进行处理源码泄露
进入扫描后的源码路径文件夹
执行git stash list :查看stash了哪些存储。
执行git stash pop
此时,目录下生成了新的文件
我们查看一下。
打开环境~
既然信息泄露,那就dirsearch扫一波目录~我们看到了,有一个git备份文件。
接着使用GitHack干一波~http://challenge-85d0e3d83147bf8e.sandbox.ctfhub.com/.git/arrow-up-right
搞定,回到GitHack的dist目录中可以看到扫描结果~
打开txt文件,发现flag~
提示为SVN信息泄露,flag在服务端旧版本中。首先进行手工判断是否存在/.svn 首先访问.svn/entries,下载后得到:
显示明文文件名等信息,再下载/.svn/wc.db后不能打开。直接上工具:SvnExploit 首先对/.svn目录下文件进行扫描:
50306A16-CE27-4244-AE61-BBE2489C1E3A 查看到存在flag_1637310845.txt文件,猜测为flag文件,下载整套源码:
FAE39F786BC92A53510141F8B35D79BF 在svnExploit文件夹下:
但只下载了当前版本的index.html源码,题目提示在就版本中,所以这里使用:dvcs-ripper:
已经将.svn文件下载到本地,查看其中目录:
239C0C33-47E9-42E3-BEE7-B899C7066733 9E203D811C91C998C1D24F7438545D43 1)什么是SVN?
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
2)漏洞成因
在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。 在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。
3)漏洞修复
方案一、不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替。
方案二、服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn和.git目录,下面示范为禁止访问点号开头的目录
Nginx的vhosts中配置
Apache的vhosts中配置
svn源码泄露漏洞(git同理)
在服务器上布署代码时。如果是使用 svn checkout 功能来更新代码,而没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。
一、.svn 目录
使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份
下面我以svn1.7及之后版本为例,讲解如何利用此漏洞下载整个网站源代码
二、分析.svn目录内容
我们看到的是一个名为 wc.db 的文件,用文本编辑器打开看到第一行有写 SQLite format 3 ,可以知道,这是一个SQLite数据库的文件,后面包含的信息,文本编辑器就先不看了。我们下载一个正经的SQLite查看软件来慢慢看--SQLite Studioarrow-up-right 。
在软件下载完之前,再看看此文件夹里的其他内容:
entries和format文件里面,只有个数字12,没什么参考意义;wc.db-journal文件是空的,也没什么价值;tmp目录里面也是空的;
pristine里面内容就多了,一堆00~ff的文件夹,每个文件夹里有若干个 .svn-base文件;用文本编辑器打开看一下,有些文件是代码,有些文件是乱码(大概是图片文件吧)。看来这个文件夹是整个项目文件的一份备份,只是一堆哈希过的文件名,似乎有点难下手啊。
毕竟是无规律的这一堆文件名,40位的哈希(36^40)这样的暴力穷举下载的话,即便是N多线程,时间成本上也是非常大的啊。而且得到是一堆无序文件,要整理成原来代码项目的样子,还得费好一阵功夫。
这样看来,是不是说.svn漏洞利用的价值很少?然而非也,少年,还记得刚才说的 wc.db 文件吗。现在SQLite Studio软件应该下载好了,我们就打开看看这里有什么来头吧
三、wc.db文件,有你想要的一切
用SQLiteStudio软件打开 wc.db文件,我们看到 NODES 表,看到 local relpath栏 和 checksum栏,明白了吗(滑稽.jpg)。checksum栏里的$sha1$后面的那串数字就是pristine文件夹里的那堆文件的文件名,pristine里的00~ff文件夹,其实是文件名的前两位,而local relpath就是原始的文件名。
现在,我们根据这个 wc.db 的NODES表,遍历这个表里的每一行,就可以下载到整个项目里的代码了,而且还能得到对应的真实文件名,可谓岂不快哉?
(下面截图为我自己的项目,仅作参考)
B59639A8-3B54-4E5E-AF03-579874AC1E93 除了NODES表以外,还可以看到一个 REPOSITORY表,里面存储了svn的项目路径和 uuid,如果没有做访问IP限制的话,你可以直接使用此信息取得此项目的SVN权限(下载、提交等)…
四、漏洞修复
方案一、不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替。
方案二、服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn和.git目录,下面示范为禁止访问点号开头的目录
Nginx的vhosts中配置
Apache的vhosts中配置
不只svn,git或者其他版本管理软件也存在类似的问题。
同样Mercurial也是一个版本控制软件,只不过是轻量级的,具体区别感兴趣可以去查一查。
先用dirsearch扫描的话,是可以扫出来有.hg的目录的。
使用dvcs-ripper下载hg文件:./rip-hg.pl -v -u http://challenge-c9173ec82c414081.sandbox.ctfhub.com:10080/.hg/
E539A33ACB81FC09C5DE0A371768CE40 进入下载的.hg目录中(图形界面ctrl+h可以显示隐藏文件),直接grep -r flag *搜索,发现flag的一点轨迹。
63D07C91-0903-46B9-A078-9AD9A5B14C9B 访问flag.txt