CtfHub
良心网站 真是没得很!
题目类型
在CTF中主要包含以下5个大类的题目,有些比赛会根据自己的侧重点单独添加某个分类,例如移动设备(Mobile)
, 电子取证(Forensics)
等,近年来也会出来混合类型的题目,例如在Web中存在一个二进制程序,需要选手先利用Web的漏洞获取到二进制程序,之后通过逆向或是Pwn等方式获得最终flag
Web
Web类题目大部分情况下和网、Web、HTTP等相关技能有关。主要考察选手对于Web攻防的一些知识技巧。诸如SQL注入
、XSS
、代码执行
、代码审计
等等都是很常见的考点。
一般情况下Web题目只会给出一个能够访问的URL。部分题目会给出附件
Misc
Misc意为杂项,即不包含在以上分类的题目都会放到这个分类。题目会给出一个附件。选手下载该附件进行分析,最终得出flag
常见的题型有图片隐写、视频隐写、文档隐写、流量分析、协议分析、游戏、IoT相关等等。五花八门,种类繁多。
WEB训练场
WEB前置技能–http协议
请求方式
我还尝试了八种请求方式
。。。。
八种请求方式:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中。
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
题解是 把头改成CTFHUB
就可以!
302跳转
首先,让我们来了解一下,什么是302重定向。
百度百科定义如下:302重定向又称之为暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。一个暂时重定向是一种服务器端的重定向,能够被搜索引擎蜘蛛正确地处理。
302跳转的解决方法有两个
1、使用curl
命令 之间 curl 目标url
2、抓包审查
基础认证–Basic Authentication
这道题目是真的长知识
HTTP 基本认证
大体流程就类似于牛翠花和王二狗接头的过程。
1、翠花:走到一个人面前说,二狗带我去吃麻辣烫吧。2、二狗:请说出你的暗号。
3、翠花:天王盖地虎。
4、二狗:张亮麻辣烫走起。。。
映射到编程领域为:
***客户端(例如Web浏览器)***:服务器,请把/family/son.jpg 图片传给我。
GET /family/son.jpg HTTP/1.1
服务器:客户端你好,这个资源在安全区family里,是受限资源,需要基本认证,请带上你的用户名和密码再来
1
2 >HTTP/1.1 401 Authorization Required
>www-Authenticate: Basic realm= "family"服务器会返回401,告知客户端这个资源需要使用基本认证的方式访问,我们可以看到在 www-Authenticate这个Header里面 有两个值,Basic:说明需要基本认证,realm:说明客户端需要输入这个安全区的用户名和密码,而不是其他区的。因为服务器可以为不同的安全区设置不同的用户名和密码。如果服务器只有一个安全区,那么所有的基本认证用户名和密码都是一样的。
客户端: 服务器,我已经按照你的要求,携带了相应的用户名和密码信息了,你看一下
如果客户端是浏览器,那么此时就会弹出一个弹窗,让用户输入用户名和密码。
**Basic 内容为:
用户名:密码
后的base64 内容.假设我的用户名为Shusheng007
,密码为ss007
那么我的Basic的内容为Shusheng007:ss007
对应的base64 编码内容U2h1c2hlbmcwMDcldUZGMUFzczAwNw==
**,如下所示
1
2 >GET /family/son.jpg HTTP/1.1
>Authorization: Basic U2h1c2hlbmcwMDcldUZGMUFzczAwNw==服务器:客户端你好,我已经校验了你的用户名和密码,是正确的,这是你要的资源。
1
2 >HTTP/1.1 200 OK
>Content-type: image/jpg至此这个HTTP事务就结束了,非常简单的一个认证机制
而这道题目 他给了密码的文件
很明显是爆破
爆破点是
1 | GET /flag.html |
那么就爆破呗
然而我发现一个问题的存在
YWRtaW46YWtzZGphc2pka2E%3d
经常出现%3d
这样的问题
这个是字符编码的一个问题
需要你把攻击的payloads
下面的那个 URL-encode these characters
取消勾选
之后就得到答案了! 奥里给。。
信息泄露
备份文件下载
web源码泄漏
0x01信息泄露
有的时候运维或者说是部署人员工,当然也有可能是开发人员在打包项目的时候将。git也打包了而引起了,git的信息泄露,关于常用的其他信息泄露,各位看官可自行Google or 百度。这里贴一下git信息泄露利用的python脚本。下载完了之后利用python执行,python GitHack.py http://XXXXXXX/.git
这样将会在dis目录下生成以ip地址以及端口号命名的文件夹,大家进去看一下里面是否存在.git文件夹
0x03GIT命令使用
切换到该目录下面
使用git log 查看当前版本,使用git reset –hard 9d9fab3bd7e53c454dee1c9a7abc01e499882815还原到以前的版本。然后就可以查看到flag.
附录:常用git命令摘录自:http://www.cnblogs.com/lwzz/archive/2013/02/23/2921426.html
最基本的命令:
git clone 拷贝并跟踪远程的master分支。跟踪的好处是以后可以直接通过pull和push命令来提交或者获取远程最新的代码,而不需要指定远程分支名字。
git submodule init
git submodule update
参考示意图
HEAD 指向当前的commit 对象(可以想象为当前分支的别名),同时也用来表明我们在哪个branch上工作。所以当我们使用HEAD来操作指针的时候,其实就是不改变当前的commit的指向。
对照这张图来理解两段提交,工作区(working tree),暂存区(index)和 branch之间的关系
显示信息类命令
git ls-files -u 显示冲突的文件,-s是显示标记为冲突已解决的文件
git diff 对比工作区和stage文件的差异
git diff –cached 对比stage和branch之间的差异
git branch 列出当前repository下的所有branch
git branch –a 列出local 和remote下的所有branch
git ls-files –stage 检查保存在stage的文件
git log 显示到HEAD所指向的commit为止的所有commit记录 。使用reset HEAD~n 命令使HEAD指针向前移动,会导致HEAD之后的commit记录不会被显示。
git log -g则会查询reflog去查看最近做了哪些动作,这样可以配合git branch 恢复之前因为移动HEAD指针所丢弃的commit对象。如果reflog丢失则可以通过git fsck –full来查看没被引用的commit对象。
git log -p -2 对比最新两次的commit对象
log -1 HEAD
git log –pretty=oneline
git log –stat 1a410e 查看sha1为1a410e的commit对象的记录
git blame -L 12,22 sth.cs 如果你发现自己代码中 的一个方法存在缺陷,你可以用git blame来标注文件,查看那个方法的每一行分别是由谁 在哪一天修改的。下面这个例子使用了-L选项来限制输出范围在第12至22行
创建类命令
git brach branchName 创建名为branchName的branch
git checkout branchName 切换到branchName的branch
git checkout -b 创建并切换,也就是上面两个命令的合并
git brach branchName ef71 从commit ef71创建名为branchName的branch
撤销类命令
如果是单个文件
1.use “git reset HEAD
如果已经用add 命令把文件加入stage了,就先需要从stage中撤销
然后再从工作区撤销
2.use “git checkout –
git checkout a.txt 撤销a.txt的变动(工作区上的文件)
如果是多个文件
git chenkout .
如果已经commit 了,则需要
git commit –amend 来修改,这个只能修改最近上一次的,也就是用一个新的提交来覆盖上一次的提交。因此如果push以后再做这个动作就会有危险
$ git reset –hard HEAD 放弃工作区和index的改动,HEAD指针仍然指向当前的commit.(参照第一幅图)
这条命令同时还可以用来撤销还没commit的merge,其实原理就是放弃index和工作区的改动,因为没commit的改动只存在于index和工作区中。
$ git reset –hard HEAD^ 用来撤销已经commit的内容(等价于 git reset –hard HEAD~1) 。原理就是放弃工作区和index的改动,同时HEAD指针指向前一个commit对象。
git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动
提交类命令
git add 跟踪新文件或者已有文件的改动,或者用来解决冲突
git commit 把文件从stage提交到branch
git commit -a 把修改的文件先提交到stage,然后再从stash提交到branch
删除类命令
git rm –cached readme.txt 只从stage中删除,保留物理文件
git rm readme.txt 不但从stage中删除,同时删除物理文件
git mv a.txt b.txt 把a.txt改名为b.txt
Merge类命令
在冲突状态下,需要解决冲突的文件会从index打回到工作区。
1.用工具或者手工解决冲突
2.git add 命令来表明冲突已经解决。
3.再次commit 已解决冲突的文件。
$ git reset –hard ORIG_HEAD 用来撤销已经commit 的merge.
$ git reset –hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区的改动。
git reset –merge ORIG_HEAD,注意其中的–hard 换成了 –merge,这样就可以避免在回滚时清除working tree
.hg源码泄漏:
漏洞成因:hg init的时候会生成.hg,http://www.xx.com/.hg/,
工具:dvcs-ripper,(rip-hg.pl -v -u http://www.xx.com/.hg/)
.git源码泄漏:
漏洞成因:在运行git init初始化代码库的时候,会在当前目录下产生一个.git的隐藏文件,用来记录代码的变更记录等,没有删除这个文件,导致泄漏,http://www.xxx.com/.git/config
工具:GitHack,dvcs-ripper,(GitHack.py http://www.xxx.com/.git,rip-hg.pl -v -u http://www.xx.com/.git/)
.DS_Store源码泄漏:
漏洞成因:在发布代码时,没有删除文件夹中隐藏的.DS_store,被发现后,获取了敏感的文件名等信息,http://www.xxx.com/.ds_store
工具:dsstoreexp,(python ds_store_exp.py http://www.xxx.com/.DS_Store)
网站备份压缩文件:
在网站的使用过程中,往往需要对网站中的文件进行修改,升级,此时就需要对网站整或其中某一页面进行备份,当备份文件或修改过程中的缓存文件因为各种原因被留在网站web目录下,而该目录又没有设置访问权限,就有可能导致备份文件被下载,导致信息泄漏,给服务器安全埋下隐患。.rar, .zip, .7z, .tar.gz, .bak, .swp, .txt, .html,
工具:可以使用一些扫描软件,进行扫描,如awvs之类的
像.swp文件,就是vim源文件泄漏,/.index.php.swp或/index.php~ 可以直接用vim -r inde.php来读取文件
常见的网站源码备份文件后缀
- tar
- tar.gz
- zip
- rar
常见的网站源码备份文件名
- web
- website
- backup
- back
- www
- wwwroot
- temp
我做这道题目的时候,找到了flag_2768649.txt 不过我真没想要用URL去加载
回想起来 这毕竟是网站源码 那么我们去网站上查看嘛
SVN导致文件泄漏:
版本控制系统
工具:dvcs-ripper,Seay-Svn,(rip-svn.pl -v -u http://www.xxx.com/.svn/)
我遇到的题目类型
bak文件
vim
. DS_Store
利用dvcs-rip来操作 .svn泄露 和 .hg泄露
在泄露的时候可能文件中没有flag 但是给了文件名字
可以尝试利用curl看看能不能得到。
我打算在四月初花费三天重做一遍CTFhub,然后再写这篇文章!
- 本文标题:CTFHUB
- 创建时间:2020-03-02 10:22:51
- 本文链接:2020/03/02/CTFcomig/CTFHUB/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!