CTFHUB
liduoan.efls Engineer

image

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协议

请求方式

image

我还尝试了八种请求方式

。。。。

八种请求方式:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
HEAD
向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中。
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

题解是 把头改成CTFHUB就可以!

image

302跳转

首先,让我们来了解一下,什么是302重定向。

百度百科定义如下:302重定向又称之为暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。一个暂时重定向是一种服务器端的重定向,能够被搜索引擎蜘蛛正确地处理。

302跳转的解决方法有两个

1、使用curl命令 之间 curl 目标url

2、抓包审查

image

基础认证–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
2
3
4
5
6
7
8
9
10
GET /flag.html HTTP/1.1
Host: challenge-4fd44b39b91d3871.sandbox.ctfhub.com:10080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://challenge-4fd44b39b91d3871.sandbox.ctfhub.com:10080/
Authorization: Basic YWRtaW46§admin§ §admin§这个就是爆破点
Connection: keep-alive
Upgrade-Insecure-Requests: 1

那么就爆破呗

然而我发现一个问题的存在

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 …” to unstage
如果已经用add 命令把文件加入stage了,就先需要从stage中撤销

然后再从工作区撤销
2.use “git checkout – …” to discard changes in working directory

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,然后再写这篇文章!