一、CTFHub
(一、)web基础知识和签到
1、CTF简介
右键查看源码,即可找到flag
2、竞赛模式
右键查看源码,即可找到flag
3、比赛形式
右键查看源码,即可找到flag
4、题目类型
右键查看源码,即可找到flag
5、签到
进入环境,一眼就可以看到flag了
基础知识主要介绍了什么是ctf,ctf的竞赛模式、比赛类型和题目类型,对初学者十分友好,明确了ctf的概念
(二、) web前置技能模块
1、请求方式
以下是最常见的几种HTTP请求方式:
-
GET:请求从服务器检索特定资源。GET请求应该只检索数据而不产生其他效果。例如,访问一个网页或查询一个API。
-
POST:向服务器提交数据以创建新资源或执行操作。POST请求通常用于表单提交,上传文件,或者提交数据到数据库。
-
PUT:将指定资源的状态更改为请求中提供的状态。PUT请求通常用于更新资源。
-
DELETE:删除指定的资源。
-
HEAD:请求获取与GET请求相同的响应,但没有响应体。主要用于检查资源是否存在,以及获取资源的元数据。
-
OPTIONS:描述目标资源的通信选项。用于跨域资源共享(CORS)中,请求服务器通信权限。
-
PATCH:对资源进行部分修改。与PUT不同,PATCH只更新资源的部分内容。
-
CONNECT:将请求连接转换为一个透明的TCP/IP隧道,常用于SSL加密服务器的链接(使用SSL和TLS协议)。
-
TRACE:回显服务器收到的请求,主要用于测试或诊断。
打开环境,我们用bp来抓包
在截断变更请求方法,将GET改为CTFHUB (原因:CTF*B实际上是指CTFHUB,在某些CTF比赛中,题目可能会提示使用特定的HTTP方法来获取flag,而这里的CTFB就是指CTFHUB这种自定义的HTTP方法。在实际的HTTP协议中,并没有CTFHUB这样的方法,它是一个特定于比赛环境的自定义方法。)
然后点击放包,就可以得到flag了
2、302跳转
打开环境,发现界面没有变化
当服务器接收到一个包含302状态码的请求时,它会在响应头中包含一个Location
字段,该字段指示了重定向的目标URL。客户端(通常是Web浏览器)会解析响应,并自动发起新的请求到目标URL,从而完成重定向过程
打开bp抓包,将抓到的包发给重向器,就可以得到flag
3.、Cookie欺骗、认证、伪造
Cookie是一种由服务器发送到客户端(通常是用户的浏览器)的小块数据。它被用来存储有关用户会话的信息,并在用户浏览网站时保持状态
打开环境,可以看到只有管理员能获得flag
使用bp进行抓包
发现标蓝的admin=0,admin一般表示管理员,在这种情况下,我们可以尝试修改admin的值,使它等于1
将包放回,就得到了flag
4、基础认证
在HTTP中,基本认证(Basic Authentication)是一种简单的认证机制,用于在客户端和服务器之间传输用户凭证(通常是用户名和密码)。基本认证的工作原理如下:
认证请求:当客户端尝试访问需要认证的资源时,服务器会返回一个状态码为401(未授权)的HTTP响应,并在响应头中包含一个WWW-Authenticate
字段,提示客户端需要进行认证。
客户端响应:客户端接收到401响应后,通常会提示用户输入用户名和密码。用户输入凭证后,客户端会将这些凭证编码为Base64格式,并在随后的请求中通过Authorization
请求头发送给服务器。
凭证编码:用户名和密码被组合成一个字符串,格式为username:password
,然后使用Base64编码。Base64编码是一种编码方法,可以将二进制数据转换为ASCII字符串。
服务器验证:服务器接收到包含Base64编码凭证的Authorization
请求头后,会解码这些凭证,并与存储的用户凭证进行比较。如果匹配,服务器会允许客户端访问资源;如果不匹配,服务器会再次返回401响应,要求客户端重新认证。
下载附件,可以看到一些字符,猜测要用密码爆破
密码爆破,也称为暴力猜解,是一种通过逐个尝试所有可能的密码组合来破解用户密码的方法,本质上是利用了穷举法(枚举法)。
然后我们打开环境,可以看到点击click这里有flag
点击可以看到它需要输入密码和账号,先随便输,发现没有效果
那就尝试随便输一个数字来抓包,我输入的是aaa bbb
看到basic,猜测是base64,找个工具来解密一下
可以发现解码的结果是我输入的用户名和密码,那我们大概就能知道输入用户名和密码的格式了:用户名:密码
右键发送给测试器,选择狙击手在标橙的位置点击添加
在BurpSuite的狙击手(Sniper)模式中,添加§符号的原因是为了标记出有效负荷的位置。在Intruder模块的位置(Positions)选项卡中,使用一对§字符来标记出有效负荷的位置,这两个符号直接包含了模板文本的内容。当把一个有效负荷放置到一个给出的请求的特殊位置上时,就把这§符号放到这个位置,然后在两个符号之间的出现的文本都会被有效负荷替换。当有个特殊位置没有为一个给出的请求安排有效负荷时(这只适用于狙击手攻击类型),那个位置的§字符会被删除,出现在它们之间的文本不会变化
Authorization: Basic
YWFhOmJiYg==(不固定)
是HTTP请求头中的一个字段,用于基本认证(Basic Authentication)。在这种认证方式中,客户端将用户名和密码拼接成username:password
的格式,然后对拼接后的字符串进行Base64编码,得到的结果放在Authorization
请求头中,以Basic
为前缀。服务器接收到请求后,会解码Base64部分,以获取用户名和密码,并进行验证。
再将下载的附件传送到有效载荷选项【简单列表】
在有效载荷处理添加前缀 和 base64的编码
取消有效载荷编码的✔️,点击开始攻击,会看到一个的状态和其他的不同查看它的响应,即可获得flag
5、HTTP响应包源代码查看
按住F2,查看源代码,即可找到flag
补充一些查看源代码的方式:
-
在浏览器中,可以通过右键点击网页空白处,然后选择“查看页面源代码”或“查看源代码”来查看。
2.使用快捷键Ctrl+U
(在Windows/Linux上)或Command+Option+U
(在Mac上)也可以快速查看源代码。
(三、)web信息泄露模块
1、目录遍历
目录遍历(也称为路径遍历)是一种安全漏洞,攻击者利用这种漏洞来访问或操作文件系统中未授权的文件和目录。这种漏洞通常发生在Web应用程序中,当应用程序使用用户提供的输入来构建文件路径时,而没有正确地验证或清理这些输入。
我们可以一个一个的查看目录,就可以找到flag相关的文件,就可以找到flag了
2、PHPINFO
phpinfo() 是 PHP 中的一个内置函数,主要用来显示配置的 PHP 信息。但是很多时候网站测试者因为没有及时删除配置信息页面,导致服务器信息泄露被不法分子利用渗透。 phpinfo() 函数可以查看 php 的所有信息,其中含有编译选项、扩充配置、版本和服务器信息、环境变量、操作系统版本信息、服务器路径、HTTP 标头等信息。
打开页面源码,即可找到flag
或者直接在原网页也能找到flag
3、备份文件下载
①bak文件
bak
文件是一种常见的备份文件格式,它的全称是 "backup",即备份的意思。这类文件通常由软件或系统自动创建,用于在原始文件损坏、丢失或被意外修改时进行恢复。对于其他类型的 .bak
文件,通常可以通过直接重命名把 .bak
替换成该文件的格式就可以恢复此文件并且正常打开。
打开环境我们可以知道,flag在index.php这个文件中
可以通过访问index.php.bak得到一个文件,打开即可获得flag
②vim缓存
Vim 是一个高度可配置的文本编辑器,Vim 在编辑文档过程中如果异常退出,会产生缓存文件,通常以 .
开头,后缀为 .swp
、.swo
、.swn
等。例如,对于文件 index.php
,交换文件可能是 .index.php.swp
打开环境可以看到flag在indev.php中
输入 .index.php.swp
可以获得一个swp文件,用记事本打开可以看到flag
Vim 缓存相关的命令和操作:
-
查看缓存文件(交换文件):
Vim 在编辑文档过程中如果异常退出,会产生缓存文件,通常以.
开头,后缀为.swp
、.swo
、.swn
等。例如,对于文件index.php
,交换文件可能是.index.php.swp
。 -
恢复缓存文件:
使用vim -r
命令可以查看交换文件,并尝试恢复文件内容。例如,vim -r index.php
可以恢复index.php
的交换文件。 -
删除缓存文件:
恢复文件后,需要删除交换文件以避免下次打开文件时出现提示。可以使用rm -rf .index.php.s*
命令删除所有相关的交换文件。 -
处理多个缓存文件:
如果同一个文件产生了多个交换文件,它们的后缀会不同,例如.swp
、.swo
、.swn
等。Vim 会根据文件名和退出时的状态来区分这些交换文件。 -
强制删除缓存文件:
如果你确定不再需要恢复缓存文件,可以使用:bdelete
命令在 Vim 中强制删除缓冲区,即使有未保存的更改。 -
隐藏缓冲区:
如果你想要切换到另一个缓冲区,但当前缓冲区有未保存的更改,可以使用:bnext!
或:bprev!
命令强制切换,将当前缓冲区设置为隐藏。 -
列出所有缓冲区:
使用:ls
命令可以列出所有打开的缓冲区。 -
跳转到指定缓冲区:
使用:buffer {num}
命令可以跳转到指定编号的缓冲区
③.DS_Store
.DS_Store
文件是 macOS 系统自动生成的一个隐藏文件,全称为 "Desktop Services Store"。它主要用于存储 Finder 窗口的显示设置信息,包括文件夹图标的排列顺序、文件夹视图的显示样式(如图标视图、列表视图等)以及窗口的大小和位置。这个文件的目的是为了让用户在打开同一个文件夹时,能够看到上次关闭时的界面布局
打开环境,在地址栏输入.DS_Store获取文件
使用记事本打开,可以看到很多乱码,还有一个flag here,猜测乱码和flag有关
尝试在地址栏输入2ce97450ae1a513bbdc7162aa4376e14.txt ,得到flag
"noteustr" 在这个上下文中是一个注释标记,用来表示后面的内容是注释,而不是文件名的一部分。在处理文件名或URL时,应该忽略注释标记及其后面的内容。因此,当看到 "noteustr" 时,可以认为它是告诉你后面的内容不是实际的文件名或路径的一部分,而是用来提供额外信息或注释的
④网站源码
dirsearch
主要用于对目标网站的目录和文件进行暴力扫描,以发现可能存在的敏感文件或目录。dirsearch
的几个作用:
-
目录和文件枚举:
dirsearch
可以对目标URL进行扫描,尝试列出网站的所有目录和文件。这对于发现可能包含源码备份的文件(如.zip
、.tar.gz
、.rar
等)非常有用。通过指定扩展名(-e
参数),可以更有针对性地搜索可能包含源码的文件类型。 -
发现敏感文件: 在网站源码泄露的情况下,开发人员可能不小心将备份文件放在了可公开访问的目录下。
dirsearch
可以帮助发现这些文件,如www.zip
、backup.zip
等,这些文件可能包含网站的完整源码。 -
状态码分析:
dirsearch
会返回每个请求的状态码,通过分析这些状态码(如200、403、404等),可以判断哪些路径是有效的,哪些可能包含敏感信息。状态码200通常表示请求的文件或目录存在,这可能是发现源码泄露的关键。 -
自动化扫描: 相比于手动尝试不同的文件名和路径,
dirsearch
提供了自动化的扫描过程,可以节省大量时间,特别是在面对复杂的网站结构时。 -
辅助其他攻击手法: 发现敏感文件或目录后,
dirsearch
的结果可以辅助其他攻击手法,如文件包含攻击、目录遍历攻击等,进一步深入挖掘网站的安全漏洞。
打开环境,看见一堆后缀名,好像也没什么用,感觉可以用蚁剑连一下,没做出来,然后上网看见可以用dirsearch做,试了一下
输入python dirsearch.py -u http://challenge-7a39c2cc63b1a115.sandbox.ctfhub.com:10800/ -e*
文件扫描得到
把www.zip放进地址栏里试一下,得到一个zip文件
解压缩可以看见三个文件,一个和flag相关的,打开什么也没有
那就再试试把三个文件放进地址栏里看看,结果就得到了flag
4、Git泄露
Git泄露是指在使用Git版本控制系统时,由于配置不当或操作失误,导致敏感信息(如密码、密钥、源代码等)被意外地上传到公开的代码仓库或其他公开可访问的地方,从而被未授权的人获取到的情况
①Log
在Git版本控制系统中,log
指的是提交历史记录,即项目中所有提交(commit)的日志。
第一使用工具dirsearch
扫描目标网站,查找暴露的.git
目录。可以发现扫描的过程报错了,因为缺少模块,当所有模块补齐是可以扫到暴露的.git目录。
第二使用工具githack
输入git log后可以看到add flag,将与add flag有关的commit输入git diff 即可得到flag
基础命令
git init
:初始化一个新的 Git 仓库。git clone [url]
:克隆一个远程仓库到本地。git add [file]
:将文件添加到暂存区。git commit -m "[message]"
:提交暂存区文件到仓库,并添加提交信息。git status
:查看仓库状态,包括文件的更改和暂存状态。git log
:查看提交历史。git diff
:显示当前文件和暂存区或最后一次提交的差异。git reset [file]
:将文件从暂存区撤回。git rm [file]
:删除文件,并跟踪这个改变。git mv [old_file] [new_file]
:移动或重命名文件,并跟踪这个改变。git diff
:显示工作目录中已修改但尚未暂存的文件差异
分支管理
git branch [branch-name]
:创建一个新分支。git checkout [branch-name]
:切换到指定分支。git merge [branch-name]
:将指定分支合并到当前分支。git branch -d [branch-name]
:删除指定分支。git branch --merged
:列出所有已经合并到当前分支的分支。
远程仓库
git remote add [name] [url]
:添加远程仓库。git remote rm [name]
:移除远程仓库。git fetch [name]
:从远程仓库获取数据。git pull [name] [branch]
:从远程仓库拉取数据并自动合并。git push [name] [branch]
:将本地分支的更改推送到远程仓库。
标签管理
git tag [tag-name]
:创建一个新的标签。git tag -d [tag-name]
:删除本地标签。git push [name] --tags
:将所有本地标签推送到远程仓库。git checkout [tag-name]
:切换到指定标签。
撤销和回退
git revert [commit]
:创建一个新的提交来撤销某次提交的更改。git reset --hard [commit]
:将HEAD、索引和工作目录都回退到指定的提交。git reset --soft [commit]
:将HEAD回退到指定的提交,但保留工作目录和索引的状态。git reset --mixed [commit]
:将HEAD回退到指定的提交,保留工作目录的状态,但重置索引。
其他常用命令
gitignore
:配置文件,用于指定不需要跟踪的文件和目录。git stash
:临时存储当前工作进度,以便进行其他工作。git config
:配置 Git 设置。git clean
:清除未跟踪的文件
②stash
在 Git 中,stash
允许你临时保存当前工作目录的状态,包括未提交的更改和暂存区的更改,然后你可以回到一个干净的工作目录。
使用dirsearch进行扫描
发现git漏洞,打开Kali进入githack
输入git stash list 命令查看所有的stash记录,看到和flag相关,再用git stash pop
命令恢复stash中的内容,打开dist中的地址文件,可以发现多了一个txt文件,打开即可找到flag
1、保存当前更改到stash:git stash
2、保存当前更改到stash并添加消息:git stash save “message”
3、查看所有stash列表:git stash list
4、应用最近的stash内容:git stash apply
5、应用特定的stash内容:git stash apply stash@{n}
6、删除最近的stash内容:git stash drop
7、删除特定的stash内容:git stash drop stash@{n}
8、保存并清理stash内容:git stash push -m “message”
9、查看特定stash的差异:git stash show -p stash@{n}
10、创建新分支并应用stash内容:git stash brabch <branch name> stash@{n}
11、清理所有未引用的stash内容:git stash clear
③ Index
在 Git 中,索引(Index) 通常指的是 暂存区(Staging Area)。
使用dirsearch进行扫描
发现git漏洞,打开Kali进入githack
输入git log后可以看到add flag,将与add flag有关的commit输入git show即可得到flag
5、 SVN泄露
SVN泄露是指在使用Subversion(SVN)版本控制系统管理代码时,由于配置不当或操作失误,导致.svn
目录被暴露在Web服务器上,从而允许未授权的访问者下载源代码和其他敏感信息。
使用dvcs-ripper工具来检测和利用SVN泄露漏洞
在.svn文件夹中查看下载好的文件
ls -al
用于列出目录内容的详细信息
切换到svn目录
ls
:列出当前目录中的文件和子目录。
cat
:用于查看文件内容
管道操作符 |
:将前一个命令的输出作为后一个命令的输入
grep
:用于搜索文本
因为只找到和flag相关的文件, 使用curl命令访问可以文件检查网页源代码是否存在flag
均显示404,切换到pristine文件,
因为网页提示说flag在服务端旧版本的源代码中,那么应该检查一下pristine文件是否存放flag
在版本控制系统(如Git、SVN等)中,pristine
文件可能指的是存储在版本库中的原始文件副本,这些文件没有被本地修改或污染。
在此目录内容的详细信息中发现几个文件名,尝试去里面找一下flag,在18 里找到了
(四、)密码口令
1、弱口令
打开bp进行抓包
右键发送给测试器,点击clear,清除 §,在password出加上 §,选择狙击手
设置字典,点击开始攻击
找到长度最长或最短的,即可找到flag
2、默认口令
“默认口令”通常指的是设备或软件在出厂时设置的预设密码,这些密码在没有被用户更改之前都是相同的
所以直接搜素亿邮邮网关的默认口令,在一个个试就可以得到flag
二、NSSCTF
1、[LitCTF 2023]梦想是红色的 (初级)
下载附件发现是核心价值观编码,找一个工具就可以获得flag了
三、BUUCTF在线测评
wireshark
用wireshark打开下载的流量包,搜索password,就可得出flag
在Wireshark中输入"password"这个关键词,主要用途是帮助用户过滤和查找包含密码信息的数据包。具体来说,这个操作可以帮助用户在捕获的网络流量中快速定位到可能包含密码信息的HTTP请求。