今天开个新坑吧!其实这个坑是我从很早之前就一直想入的,但苦于一直没有合适的机会。但在现在,做数据网管已有一段时间,且对基础业务相对熟练以后,便具备了向这个方向靠拢的绝佳机会。于是找来了CTF做一个入门,先看看比较简单的CTF入门题单,看看以我当前的知识储备能不能解出来,也算是对于网络安全方向的一次初步探索。
题单
题单是攻防世界的Web方向入门题单,链接是https://adworld.xctf.org.cn/challenges/problem-set-index?id=25。
题目内容包括以下10道题目。
| 题目编号 | 题目名称 |
|---|---|
| GFSJ0474 | view_source |
| GFSJ0475 | get_post |
| GFSJ0476 | robots |
| GFSJ0477 | backup |
| GFSJ0478 | cookie |
| GFSJ0479 | disabled_button |
| GFSJ0480 | simple_js |
| GFSJ0481 | xff_referer |
| GFSJ0482 | weak_auth |
| GFSJ0484 | command_execution |
| GFSJ0485 | simple_php |
GFSJ0474 view_source
题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
我们进入靶机,发现页面中只有一句话,同时这个页面屏蔽了右键功能。

这个其实问题不大,只要F12即可,或者显示->开发者->开发者工具即可。

打开开发者工具,我们会发现Flag就在这里等着我们呢!

cyberpeace{c3e796156c7ad83ffe6eb19a009dbd77}我们把这个flag输入,解题成功!
GFSJ0475 get_post
题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
这道题目的描述都提示了我们,需要使用get和post请求来进行相关操作。我们进入靶机,可以看到它其实已经给了我们提示:

建议安装浏览器扩展HackBar,具备丰富功能。

然后点击EXECUTE,就会看到这样的页面:

所以我们接下来要通过POST方法发个请求:

看得出来我换到了Firefox浏览器,并且用了Firefox的HackBar扩展。可以使用2.1.3版本的,这个是免费使用的。这样我们就得到了FLag!本题搞定!
GFSJ0476 robots
题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
这道题很明显是需要我们找到robots.txt这个文件的,这是用于限制爬虫行为的文件。所以,获取靶场之后直接在根目录下输入/robots.txt就可以了:

然后我们看到了这个文件:f1ag_1s_h3re.php,也就是说只要我们来访问这个文件,就能找到flag的位置了!
接下来我们直接在根目录下访问这个文件。

顺利找到flag,本题搞定。
GFSJ0477 backup
题目描述:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
进入靶场,实际上页面已经提示得非常清楚了!

这个文件名是什么呢?可以直接搜索一下,这个文件的备份叫做index.php.bak。所以我们试着直接访问这个文件,会发现直接把这个文件给我们下载下来了。那就可以直接打开这个文件了:

如果使用macOS自带的文本编辑打开请注意,需要在设置里关闭将HTML自动打开为网页的选项,这样才能直接显示源代码。我们这样就得到了flag,本题搞定!
GFSJ0478 cookie
题目描述:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
这个题目也很直白地告诉了大家需要找cookie。

Cookie就是访问网站时会存放在浏览器当中的、包含用户相关信息的键值对。主要用于会话管理、个性化设置以及追踪和记录。
如果我们打开F12追踪网络,可以轻松地发现Cookie的存在:

这个告诉了我们请访问cookie.php文件,所以我们去访问一下:

然后它提示我们看HTTP的响应消息,在响应头里有一个字段叫做Flag,这个就是我们要找的内容!本题搞定!
值得注意的是,服务器会通过Set-Cookie的方法来设置存放在浏览器当中的Cookie,然后浏览器再把这个Cookie通过请求头的方式发送给服务器,这就是通过Cookie进行交互的方案。
GFSJ0479 disabled_button
题目描述:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
实际上这个很简单,通过F12把按钮禁用给恢复掉就可以按下去了。

把这个disabled=""删掉就可以按下去了。

找到flag!本题搞定!
GFSJ0480 simple_js
题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
这个题目看起来和js有关,我们先进靶场看看:

看起来需要输入一个password,但是怎么找到呢?F12看看。
在head里发现了这样一段代码:
1 | function dechiffre(pass_enc){ |
我们先大概读一读这个代码。其实这个函数很有问题,首先dechiffre函数获取一段字符串,这个字符串除了获取长度以外,好像什么用都没有!你看,后面的处理全都是用pass做的,说明你输入的东西没有任何作用。相当于它一直在处理pass这个硬编码的字符串。我们看这个pass很像ASCII码,所以不妨做个转换,得到FAUX PASSWORD HAHA,它还开了嘲讽!而我们不管输入什么,最终的输出都是这段嘲讽文字。所以说我们不能被困在上面看似复杂的逻辑中。但是我们关注到底下有一段十六进制,看看有没有突破口。
我们先把十六进制转换成十进制,得到:55,56,54,79,115,69,114,116,107,49,50。这个看起来又像是ASCII码的组合了,所以我们再次转换,得到:786OsErtk12。难道这个就是flag吗?再结合前面的提示,我们拼装成Cyberpeace{786OsErtk12},提交,正确!本题搞定!
回顾这道题目,首先就是要判断出来上面的代码一直都在误导你,然后找到可疑的十六进制串,再对它进行一次十六进制转ASCII,发现是个十进制串,再次执行十进制转ASCII,并包装上开头的字符串,就得到了本题的flag。
GFSJ0481 xff_referer
题目描述:X老师告诉小宁其实xff和referer是可以伪造的。
我们首先要明确什么是XFF和Referer。
XFF(X_Forwarded_For)
这个请求头用于识别通过HTTP代理或者负载均衡器连接到Web服务器的客户端原始IP地址。例如:
1 | X-Forwarded-For: 203.0.113.195, 70.41.3.18, 150.172.23.5 |
表明客户端真实 IP 是 203.0.113.195,经过了两个代理服务器(70.41.3.18 和 150.172.23.5)。
但是XFF是可以伪造的,不能完全信任。
Referer
Referer 请求头告诉服务器当前请求是从哪个页面链接过来的(即来源页面 URL)。例如:
1 | Referer: https://www.google.com/search?q=网络安全 |
表明这个页面是通过https://www.google.com/search?q=网络安全找到的。
解题
明确了这两个背景知识,我们就可以解题了。

这个简单,我们直接伪造一个XFF,就能让它的源IP是这个了!

伪造之后直接EXECUTE,如下:

说明我们还需要修改一下referer。改!

得到了flag,本题搞定!

GFSJ0482 weak_auth
题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。
难道是弱密码?我随手懵了一个admin、123456:

竟然直接进来了?!

看来就是弱密码暴力破解,本题搞定!
但是实际上本题不应该靠猜,而是应该靠密码本去暴力撞。不过本博客是体验博客,所以弱口令这个的规范做法还会单开一个文章来详细讲讲!
GFSJ0484 command_execution
题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
我们进入靶场,发现是个ping功能。

我们试一下ping一个127.0.0.1,看看什么反馈:

看起来是执行了一个系统的命令。那如果我利用&&执行多个命令,且他又没做安全措施,那不就炸了?

我们发现这里的确存在问题!我们可以执行其他命令了!那这样就很危险了!
我们接下来可以试着执行一下搜索flag的命令,即find / -name "*flag*",看看有没有对应文件。

然后我们在最底下发现了这么个文件:/home/flag.txt,就它了!

找到flag了!本题搞定!
GFSJ0485 simple_php
题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
这道题看起来是需要在给定的php代码中寻求突破口,看看能不能撞出来我们想要的东西。题目中给到了这样的代码:
1 |
|
哪怕我不懂PHP,我也应该具备解出来这道题的能力——在计算机和网络领域我并不是零基础。我们发现,这段代码会接收两个变量a和b,然后对a和b做了一些逻辑判断,并返回两个flag变量。
a需要是0,同时还不能是false,这要怎么做?这涉及到PHP的一个特性,那就是弱类型比较。也就是说,如果a是”0”,就既可以满足$a==0,又满足$a本身不是false。
而b呢,不许是纯数字,还要大于1234。这涉及到PHP的另一个特性,那就是如果b是一串数字+一些字母,那就满足既不是纯数字,又在这个比较中大于1234。这些利用到的PHP特性会在后面专门学习,这里仅做一个了解。
所以我们可以构造请求了:

找到flag了!本题搞定!
结语
就在刚刚,我把CTF的Web入门题单的题目过了一遍,绝大多数自己就能直接做出来,毕竟还是有不少在网络领域的基础知识的积累。而有的题目需要参考一下其他人的Writeup或者了解一些额外的知识。但无论如何,我认为通过CTF去学习网络安全,对我目前的阶段来说,比直接系统性学习要更实在得多——我具备相关的基础,但缺乏实战经验。而无论这个题单多么简单,迈出这一步去写了第一个属于自己的Writeup就是好的。我也期待能够以今天的这次探索和这篇博文作为我进入网络安全领域的敲门砖,更期待着以后能够探索到更精彩的世界。