信息泄露-CTFHub
前言
本文是作者由CSDN博客迁移而来,原文地址:https://blog.csdn.net/2302_81178149/article/details/142724244
在众多的CTF平台当中,CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。
作者的CTFHub技能树汇总:
目录遍历
一、wp
挨个对里面的目录进行寻找,但是flag每次出现的位置都随机,多找找就可以发现,最终可以在某个目录中找到flag
二、题目考点
由于配置错误导致网站的目录可被遍历,一般该类漏洞可以为后续利用提供一些信息上的帮助
PHPINFO
一、wp
点击查看
用Ctrl+F查找flag必有的ctfhub{,找到flag。
(作者发现这里面有两个位置有flag,不过是一模一样的)
二、题目考点
phpinfo() 是php中查看相关信息的函数,当在页面中执行phpinfo()函数时,php会将自身的所有信息全部打印出来。在phpinfo中会泄露很多服务端的一些信息。
例如安装的一些模块、网站绝对路径、服务器自身的操作系统、使用的组件版本等等,在phpinfo中获得的这些信息会为下一步的渗透/做题提供一些帮助
备份文件下载
网站源码
一、wp
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
题目应该就是让我们找备份的“源代码”(实际过程中我们找的是源代码,但这里应该是flag),这个源代码可能备份在下面提示中
顾名思义,备份文件备份的都是文件,所以遍历一下上面的文件名及后缀。
在这里给出四种扫描方法:
1、御剑
御剑有点坑,将超时延长,并且只扫DIR(目录;显示文件列表),还得多扫几次才行。
所以御剑最好还是得自定义目录(把题目给的添加上去)。
2、dirsearch
暴力扫就可以,除了慢没啥缺点。
查看返回值,大部分都是503,返回200的表示可以访问
3、burpsuite
相对而言比较复杂,但是比较贴近题目,充分利用了题目的提示
抓包,发送到Intruder,
在GET/后面(即网站地址处)添加两个负载,一个文件名,一个扩展名,用cluster bomb,
爆破文件名,这里需要添加一个后缀:.(点)
(也可以在payload2备份文件格式的前面加前缀 . )
爆破扩展名, 注意两者都不用payload encoding
开始攻击,出货
注:载荷尽量自己写,作者直接复制题目提示的,发现不合规范,不出flag
4、最后一种方法,如果不怕麻烦,也可以自己一个个试(人工扫描)
二、题目考点
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。这里有诸多目录,要求从中找出有效文件
三、相关知识
1、御剑的使用
2、dirsearch的使用
3、备份文件的访问
不要忽视对网站备份文件的搜查,里面可能会有有用的信息
bak文件
一、wp
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
<法1>、
一进去就说flag在index.php中,在当前网址加上/index.php,没反应,考虑到是bak文件,输入/index.php.bak(要把题目提示结合起来考虑),下载了一个文件,用记事本打开,出flag
<法2>、
也可以用curl打开index.php.bak,殊途同归
<法3>、
用dirsearch也可以直接扫出来,这样是最简单的方法,扫出来在加到url上,也可以下载
二、题目考点
1、进一步考察web目录下的备份文件,这一题与网站源码一题一样,都是将源码备份,放在web目录下,不过这次是bak文件。
2、bak文件泄露:有些时候网站管理员可能为了方便,会在修改某个文件的时候先复制一份,将其命名为xxx.bak。而大部分Web Server对bak文件并不做任何处理,导致可以直接下载,从而获取到网站某个文件的源代码
三、相关知识
1、 bak 是一个 备份文件 ,是一个文件格式的扩展名。这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成。
很多软件都会创建一个备份文件,当软件不小心因为删除或者机器意外关闭时,可以通过软件当时创建的备份文件继续编辑,为软件使用者减少了较大工作和损失。
2、附加知识点:文件恢复打开
一般来讲 ,.bak文件作为备份文件,可以通过直接重命名,把bak替换成原文件的格式就可以恢复此文件并且正常打开了。
举个简单例子:在autocad文件移动的时候有时会产生.bak文件,比如现在有一个asdfjk.dwg文件的备份文件asdfjk.bak ,想要把备份文件恢复成正式文件 只需要对该备份文件重命名把bak替换为dwg就可以打开了 。
同样,如果是word文件的备份文件只要把bak换成doc就可以了。(其实可以改成任何文件格式)。但是,加密过的.bak文件是无法通过修改重命名来打开的,就是打开了也是乱码。
vim缓存
一、wp
当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。
<法1>、
直接在url上加上/index.php,毫无反应,再加上vim,也不好使。
在这里要知道vim异常退出时,会产生swp文件,但是输入/index.php.swp也不行,然后需要知道swp是隐藏文件,最前面要加点.
,应该输入/.index.php.swp
,成功下载文件,记事本打开,得到flag
<法2>、
利用curl访问(道理同上)即可直接看到flag,因为vim使用的缓存存储为一种固定格式的二进制文件。而我们一般编辑的时明问可见字符,在vim的缓存中这些可见字符会原样保留
<法3>、
这是最贴近题目的,之前的查看方式都会有乱码。
先用wget下载.index.php.swp
这里有两种打开方式
1)直接用vim打开下载的文件vim -r .index.php.swp
,回车
出flag
2)先恢复再打开,输入 vim index.php 去打开index.php,发现交换文件,按r恢复
出flag
二、题目考点
1、Vim异常退出后产生的文件
2、隐藏文件的访问
3、linux中vim的应用
参考文献:
三、相关知识
1、swp文件
1)vim中的swp是swap(交换分区)的简写,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。如果文件正常退出,则此文件自动删除。如果并没有对文件进行修改,而只是读取文件,是不会产生swp文件的。
2)在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容。以 index.php 为例:第一次产生的交换文件名为 .index.php.swp;
再次意外退出后,将会产生名为 .index.php.swo 的交换文件;
第三次产生的交换文件则为 .index.php.swn;
2、隐藏文件的访问
.swp是隐藏文件,因此最前面有.
,即 .index.php.swp
,(注意是index前面的点)。
3、vim编辑器的使用
vim -r
可以查看当前目录下所有的swp文件。
vim -r filename
可以恢复文件,这样上次意外退出没有保存的修改,就会覆盖文件。
.DS_Store
一、wp
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
<法1>、尝试访问url/.DS_Store
(用dirsearch可以直接扫出来),下载文件,记事本打开,看到 flag here!,但有好多空格,我们用记事本的编辑功能,然后点击替换,将空格替换成空,就是把所有的空格清除,得到下面的内容。
注:.txt后面一串字符,其中notuestr是注释的意思,这串字符的意思是“注释 flag 在这!”
所以我们只复制到.txt,尝试粘贴到url中访问,获得flag
<法2>、Curl也可以
没有空格,不需要去替换
<法3>、使用Linux系统打开文件
然后在url中访问
<法4>、工具Python-dsstore
使用Python-dsstore工具查看该文件
访问url/.DS_Store
,把下载下来的文件复制到Python-dsstore文件夹中,
然后在Python-dsstore文件夹处打开cmd,输入以下命令
python main.py 无标题.DS\_Store
注:这里“无标题.DS_Store”是作者下载的文件的名字,大家如果改名了或者名字不相同,应该用自己下载的文件的名字
二、题目考点
DS_Store 文件利用。
题目描述:DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
三、相关知识
1、工具Python-dsstore的应用
具体内容请看作者的另一篇文章:
2、linux常用指令
这里只讲cat及类似命令
cat 命令:用于查看文本文件的内容,后接要查看的文件名,通常可用管道与 more 和 less 一起使用
1 |
|
3、.DS_Store 是什么文件
.DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件们的图标位置或者是背景色的选择。
相当于 Windows 下的 desktop.ini。
Git泄露
Log
一、wp
看题目,很明显是git泄露
用dirsearch一扫,确实是git泄露
使用 GitHack 工具 clone 目标源代码到本地
相关文件被储存到了最后一行的地方,然后我们进入dist/challenge-037e8b2de8d972bf.sandbox.ctfhub.com_10800中
打开终端,执行 git log 查看历史记录
发现add flag这次提交很可疑,
<法1>
直接与 add flag 这次提交进行比对(写前几个字符就行),
1 |
|
出flag
<法2>
直接切换到 add flag (460a) 这个版本,
1 |
|
这个命令可以切换为之前的版本,输入完成后最后一个文件夹下会多出一个.txt文件,打开后就有flag。
二、题目考点
1、git泄露
2、查看历史记录 git log
3、切换版本 git reset
4、对比两次提交 (查看变更内容)git diff
三、相关知识
1、git教程
点此链接进行了解:
2、git log详解 (log日志)
git log
可以让我们查看提交commit,接下来我们来一起探索git log提供的参数。
1) --oneline
这个命令简化git log的默认的输出,仅仅输出commit hash 前7个字符串(不显示一大堆)和commit message.
git log默认会输出commit hash(提交对象的哈希值), author(提交人), date(提交时间), commit message(提交说明).
2) --stat
--stat
:是在git log 的基础上输出文件增删改的统计数据。
3)-p
-p
:控制输出每个commit具体修改的内容,输出的形式以diff的形式给出。
4 )git show
git show
命令同git log -p
输出类似,只不过它只显示一个commit的内容,如果不指定commit hash, 它默认输出HEAD指向commit的内容.
5 )git shortlog
这个命令用来输出汇总信息,以作者进行分类。
git shortlog -s
:可以用来统计每个作者的commit数量
git shortlog -n
:可以用来对统计的量进行倒序排列
6 )--pretty
我们可以用–pretty来自定义输出的信息
8 )限定log输出
直接在log命令之后,加 -n
参数即可,n表示你要输出的数量.
9) 限定指定日期范围的log
--after
和--before
10 )控制是否显示merge的commit
--merges
或者--no-merges
11) --decoreate
该参数用来控制log输出时,显示对应commit所属的branch和tag信息
3、GitHack的使用
具体内容点击此链接:
Stash
一、wp
不用dirsearch扫也可以看出是git泄露
直接用GitHack扫描,具体方式同上题
发现已经Clone success
题目是stash,优先考虑git的stash命令
执行git stash list
:查看stash了哪些存储;
执行git stash pop
:恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0}
出文件了,可以直接cat,也可去打开文件
出flag
二、考点
- stash 用于保存 git 工作状态到 git 栈,在需要的时候再恢复。
三、相关知识
git stash详解(Stash 翻译为藏匿,隐藏)
1、git stash
命令是干甚的
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行 git status 命令,就会发现当前是一个干净的工作区,没有任何改动。注:git stash 是本地的,不会上传到服务器上。
简单来说, **git stash
**这个命令可以将当前的工作状态保存到git栈,在需要的时候再恢复。
2、使用场景
由上点可推断出git stash的使用场景:
当在一个分支的开发工作未完成,却又要切换到另外一个分支进行开发的时候,可以先将自己写好的代码,储存到 git 栈,进行另外一个分支的代码开发。这时候 git stash命令就派上用场了!
3、使用
1)git stash
的相关命令
<1>git stash
保存当前的工作区与暂存区的状态,把当前的修改的保存到git 栈,等以后需要的时候再恢复,git stash 这个命令可以多次使用,每次使用都会新加一个stash@{num},num是编号
<2>git stash save '注释'
作⽤等同于git stash,区别是可以加⼀些注释, 执⾏存储时,添加注释,⽅便查找,例如git stash save ‘test’
<3>git stash pop
默认恢复git栈中最新的一个stash@{num},建议在git栈中只有一条的时候使用,以免混乱
注:该命令将堆栈中最新保存的内容删除
(即恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,就是stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num}
,比如应用并删除第二个:git stash pop stash@{1}
)
<4>git stash list
查看当前stash的所有内容
<5>git stash apply
将堆栈中的内容恢复到当前分支下。这个命令不同于 git stash pop。该命令不会将内容从对堆栈中删除,也就是该命令能够将堆栈的内容多次运用到工作目录,适合用与多个分支的场景
使用方法:git stash apply stash@{$num}
<6>git stash drop
从堆栈中移除指定的stash
使用方法:git stash drop stash@{$num}
<7>git stash clear
移除全部的stash
<8>git stash show
查看堆栈中最新保存的stash和当前⽬录的差异,显⽰做了哪些改动,默认show第一个存储
命令名 | 作用 |
---|---|
git stash |
隐藏当前的工作现场,此时,git status 的结果是 clean |
git stash list |
查看所有隐藏,每一行的冒号前面的字符串就是标识此隐藏的id |
git stash apply |
重新显示标识为 id 的隐藏 |
git stash drop |
git apply 恢复隐藏后,需要手动删除 list 列表中的记录 |
git stash pop |
恢复最新的进度到工作区 |
git stash pop stash@[stash_id] |
恢复指定的进度到工作区 |
2)使用流程
<1>执行 git stash
<2>查看刚才保存的工作进度 git stash list
(一般先使用 git stash list 查看有没有已经 stash 的记录,避免和自己的混淆,到时候使用时不知道是哪条记录)
保存注释的长这样:
可以看到 stash@{0} 是刚才保存的
<3> 这时候在看分支已经是干净无修改的(改动都有暂存到 stash)
<4> 现在就可以正常切换到目标分支,进行相应操作(假设要操作master分支)
<5> 其他分支处理完成,再切回来使用刚才的 stash, 还是先查看 暂缓列表
<6> 选择使用暂缓 git stash apply n
注:n 是序号,如下图红色箭头指示
这时就看到刚才保存的工作进度,已经原样恢复~大功告成!
Index
一、wp(基本同上)
用dirsearch一扫,发现git泄露(不用扫也可以)
再用GitHack扫
到相应的文件夹,发现直接就有txt文件,打开,出flag
二、相关知识
Index :索引
SVN泄露
一、wp
根据题目,显然是SVN泄露(其实应该先用dirsearch先扫的,这才是一个较完整的流程)
扫描发现有 .svn/ 目录,确认是 .svn 泄露。
进入dvcs-ripper所在目录,使用 dvcs-ripper 中的 rip-svn.pl
脚本进行 clone,将泄露的文件下载到本地目录中。(注:要先安装工具所需依赖库)
<法1>
这里由于是隐藏的,所以我们利用tree命令,用tree .svn
的命令查看.svn中的历史。(注:使用svn checkout
后,项目目录下会生成隐藏的.svn文件夹,Linux上用ls命令看不到,要用ls -al
命令,所以这里也可以用ls -al
命令,但没tree命令看的清晰)
网页提示说flag在服务端旧版本的源代码中,那么应该检查一下pristine文件是否存放flag
寻找 .svn/pristine/
中的文件,
先找bf中的,发现是源代码,再找de中的,发现flag
<法2> 也可以用ctrl+H显示隐藏文件夹,出现.svn文件夹
也找到pristine文件夹(tree命令可以显得更清晰点,或许可以帮到忙)
照常找到flag。
二、题目考点
svn 目录结构
三、相关知识
1、svn
Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。
简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
集中式管理的工作流程如下图:
Subversion使用服务端—客户端的结构,当然服务端与客户端可以都运行在同一台服务器上。在服务端是存放着所有受控制数据的Subversion仓库,另一端是Subversion的客户端程序,管理着受控数据的一部分在本地的映射(称为“工作副本”)。在这两端之间,是通过各种仓库存取层(Repository Access,简称RA)的多条通道进行访问的。这些通道中,可以通过不同的网络协议,例如HTTP、SSH等,或本地文件的方式来对仓库进行操作。
相比而下,经典的git开发过程:
2、svn与git
由上两图,我们推广出SVN和Git的区别:
1)SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器
SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。
Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch ,merge ,push,rebase,Git擅长的是程序代码的版本化管理。
2)GIT跟SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上,地下室,电梯里等,你仍然能够提交文件,查看历史版本记录,创建项目分支,等。对一些人来说,这好像没多大用处,但当你突然遇到没有网络的环境时,这个将解决你的大麻烦。
3)GIT把内容按元数据方式存储,而SVN是按文件
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。
4)分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
5)GIT没有一个全局的版本号,而SVN有
目前为止这是跟SVN相比GIT缺少的最大的一个特征。你也知道,SVN的版本号实际是任何一个相应时间的源代码快照。我认为它是从CVS进化到SVN的最大的一个突破。因为GIT和SVN从概念上就不同,我不知道GIT里是什么特征与之对应。
6)GIT的内容完整性要优于SVN:
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
3、dvcs-ripper工具的使用
1)运行示例(适用于 SVN):
1 |
|
It will automatically do svn revert -R .
它会自动执行 svn revert -R .
2)注意事项
使用svn checkout后,项目目录下会生成隐藏的.svn文件夹(Linux上用ls命令看不到,要用ls -al命令)。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份
具体内容请点此链接:Web安全常用工具 (持续更新)-CSDN博客
4、Linux常用的文件查看命令:
1)cat :由第一行开始显示文件内容;
2)tac:从最后一行开始显示,可以看出tac与cat字母顺序相反;
3)nl:显示的时候输出行号;
4)more:一页一页的显示文件内容;
5)less与more类似,但它可以向前翻页;
6)head:只看前几行;
7)tail:只看最后几行;
8)od:以二进制的方式读取文件;
9)vi/vim:文本编辑器,也可以打开文件查看内容,这个是使用最为广泛的工具
HG泄露
一、wp
这里提示我们用HG,还是使用dvcs-ripper,这次使用rip-hg.pl脚本进行 clone。(这里出了一个小错误,使用工具时并不是官方文档中说的rip-hg.pl,而是./rip-hg.pl)
发现直接执行 hg status 出错,工具 clone 的时候并没有 clone 完整。不要过分迷信工具。
使用tree命令列出刚刚下载的.hg网站目录
看到一个.txt,打开看看,发现历史版本add flag,感觉没啥用
利用正则匹配找一下flag(使用正则表达式进行关键字查找,具体方法见下图),也可以在这个文件夹下一个一个找,但这样低效;还可以和上一题一样直接在文件夹里找,但也太麻烦;
结合题目提示,不太好使的情况下, 试着手工解决,在浏览器里输入这个flag文件(这里就直接用curl了);
出flag
上图太小了,又重新截了一张,下图是上图的放大版
二、题目考点
.hg 文件结构
Mercurial 的使用
三、相关知识
1、HG泄露漏洞
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。
在 Mercurial 轻量级分布式版本控制系统中,本地既可以当做版本库的服务端,也可以当做版本库的客户端。版本库与工作目录不同,版本库存放了所有版本,而工作目录只是因为特定需要存放特定版本。与 SVN 系统不同,SVN 的版本库集中在一台服务器中。这也导致很多初次使用 Mercurial 系统的工作者,因为操作失误导致出现 HG 泄露漏洞的主要原因。
2、dvcs-ripper的使用
具体内容请看作者的另一篇文章:Web安全常用工具 (持续更新)-CSDN博客