路径遍历攻击(也称为目录遍历)旨在访问存储在Web根文件夹之外的文件和目录。通过操纵带有“点-斜线(…)”序列及其变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件。需要注意的是,系统操作访问控制(如在微软Windows操作系统上锁定或使用文件)限制了对文件的访问权限。这种攻击也称为“点-点斜线”、“目录遍历”、“目录爬升”和“回溯”。
常用的自动化扫描工具有 nmap,这里只是一个简单例题,可以找到flag.txt在文件夹3/3里面 ctfhub{88b149b346fb302de0450995974715be4fa603ec}
phpinfo函数能够输出服务器PHP当前状态的大量信息,其来中包含了PHP的编译选项、启用拓展、php版本信息、服务器信自息、环境变量配置、HTTP头和PHP授权信息。
可以看到在PHP Variables里找到了FLAG。ctfhub{3a6c5b87dd92ce11b479a004e4ca36b43ce00144}
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
可以使用dirsearch扫描
python3 dirsearch.py -u http://challenge-91f1f5e6a791ab02.sandbox.ctfhub.com:10080/ -e *
import requests
url = "http://challenge-d43c376975fe79c9.sandbox.ctfhub.com:10080/"
a = ['web','website','backup','back','www','wwwroot','temp']
b = ['tar','tar.gz','zip','rar']
for i in a:
for j in b:
pos = url + i + '.' + j
r = requests.get(pos)
print(i)
print(j)
print(r)
最后发现在www.zip中,下载附件得到地址,访问这个地址,得到flag
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
使用dirsearch扫描
python3 dirsearch.py -u http://challenge-d4234042e1d43e96.sandbox.ctfhub.com:10080/ -e *
发现bak文件:http://challenge-04e00dc531ed053a.sandbox.ctfhub.com:10080/index.php.bak,下载打开得到ctfhub{c815ebc9b93ada54b4723aac5e2a4d22a9f187eb}
临时文件是在vim编辑文本时就会创建的文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
以 index.php 为例 第一次产生的缓存文件名为 .index.php.swp
第二次意外退出后,文件名为.index.php.swo
第三次产生的缓存文件则为 .index.php.swn
注意:index前有 " . "
访问http://challenge-343d9fadf93a2a2f.sandbox.ctfhub.com:10080/index.php.swp下载查看得到ctfhub{8f4301704447f3106de94198e6913197cb3571a2}
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
访问http://challenge-980bb942573f0bff.sandbox.ctfhub.com:10080/.DS_Store获得DS_Store二进制文件,在linux系统中cat DS_Store
所以访问http://challenge-980bb942573f0bff.sandbox.ctfhub.com:10080/e94c0e2ee5abb58c71363b97f6d1329e.txt,得到ctfhub{b0652300aa41e9c54bddbf6c2a31235bf0cabd2b}
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
git中的Log功能可以查看提交历史。
根据提示,使用dirsearch发现有一些带有git名字的目录有内容,然后用Githack工具下载到本地,再git log,进行对比即可得到flag。这里我踩了一个坑就是Githack的版本,我下的是这个:
https://github.com/BugScanTeam/GitHack.git
ls -a是查看隐藏文件。git diff查看git提交的不同处。
和log那道题的套路一样。git stash list
查看所有保存的记录列表,git stash pop
,从 git 栈中弹出来一个文件,这个文件的内容就是 flag
和前两题做法一样,git文件夹下载到本地后里面这个txt里面就是flag。
当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。
Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。
看了别人题解后推荐这个工具吧https://github.com/kost/dvcs-ripper
安装Perl模块:
sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
下载dvcs-ripper工具: git clone https://github.com/kost/dvcs-ripper
dvcs-ripper工具用法: ./rip-git.pl -v -u http://www.example.com/.svn/
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份
可以先去wc.db找,cat wc.db | grep flag
,没有。
最后我是在缓存文件夹pristine的c7目录找到了flag。
当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。
同样Mercurial也是一个版本控制软件,只不过是轻量级的,具体区别感兴趣可以去查一查。
使用dvcs-ripper下载hg文件:./rip-hg.pl -v -u http://challenge-5e8292bf8a7e5669.sandbox.ctfhub.com:10080/.hg/
进入下载的.hg目录中(图形界面ctrl+h可以显示隐藏文件),直接grep -r flag *
搜索,发现flag的一点轨迹。
访问它,得到flag。