XCTF-Web新手区刷题-WriteUp
前言
本文章主要是博主刷的题目+题解,供参考:)
view_source-(★)

跳转主页后直接F12查看源码发现注释的部分就是flag。
get_post-(★)
获取场景F12进入开发者模式进去HackBar功能(Google商店的扩展插件)

在url给网址添加上要求的Get请求,然后点击Execute执行

再点击 Use POST method 写入对应的Post要求然后执行

flag就出来了。
robots-(★)
打开靶机地址,发现什么都没有,F12发现flag也不在,此题需要使用robots协议的知识
robots 协议(robots.txt)是一种网站用来告知搜索引擎哪些页面或路径可以抓取、哪些不应抓取的约定规则。但是,这个robots协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照。

我们访问robots.txt,发现了一个不让访问的地址,但是我们可以访问到,
所以我们接着访问

最后发现flag就在这里。
backup-(★)
发现需要寻找备份文件,然后我们这里使用kali里面的dirsearch工具扫描即可
Kali中的dirsearch安装步骤:sudo apt updatesudo apt install dirsearch

执行后发现了一个index.php的备份文件,进行访问

然后会下载一个bak文件


打开后发现flag就在这里。
cookie-(★)
Tip:
Cookie 是网站存储在用户浏览器中的一小段数据,用于在多次请求之间识别用户并保存状态信息(如登录状态、偏好设置)。

打开靶机网站后,点击应用找到Cookie然后查看到有一个cookie.php,然后我们进行访问

让我们看响应,然后我们在网络处进行查看

随后发现Flag。
disabled_button-(★)

拿到题目后发现flag确实如题目所说的不能点击的按钮,查看cookie发现没有东西,然后查看代码部分,发现按钮部分是一个表单的格式

发现是disabled,我们直接将其删除即可,发现flag可以点击了

点击后出现flag

我们还可以在HackBar中发现这是发送了一个Post请求

Note
在 HTML 中,disabled 是一个布尔属性。对于这类属性,浏览器并不关心你给它赋了什么值,它只关心这个属性是否存在,只要标签内出现了 disabled 这个单词,浏览器都会统一理解为:这个插件是被禁用的。
simple_js-(★★★)
打开靶机网站,发现要求输入一个密码,我们肯定是不知道的,然后随便填后出现串提示

这里知道密码是错的,然后还被嘲讽了,我们点击F12进入开发者模式查看代码

发现head标签里面这么大一串 js 代码,分析一下,发现下面有一个window.prompt的窗口提示,显然是与我们刚进来时一样的,然后会有一个alert,其中执行dechiffre函数,传入的是我们输入的值,我们继续看这个函数

发现其中的形参传进去后给了tab变量,后面赋值情况全都是被tab2给覆盖了,所以这个函数结果与形参根本没有关系,同样和我们的输入也没有关系。

随后我们发现这里有一长串编码的字符串,在python中打印出来是这样的


发现是一串ASCII码值,我们只需要写一个脚本把 “,” 分离出来,然后再把ASCII码转换为字母就可以了。

最后结果如下:

直接将这个用规定Flag格式包裹起来提交即可。
xff_referer-(★★)
Note
X-Forwarded-For(XFF):XFF 是代理在转发请求时,为了让后端服务器知道“请求最初来自谁”而附加的请求头。
HTTP Referer:用于告知服务器当前请求是从哪个页面跳转或发起的 HTTP 请求头。
打开靶机

发现有一串信息,根据题目可知道和 xff 有关,因为可以用 xff 来知道最初一定来自该指定 ip 地址

使用HackBar在此处添加上 xff 然后执行

发现中间的文字改变了,又要求必须来自某一个网址,而这恰好又和 referer 相关

添加后点击执行

提交该flag即可。
weak_auth-(★)
打开靶机网址

发现是一个登录界面,我们先随便输入试一下


然后发现需要我们以 admin 的用户名形式进行登录,我们再次以 admin 用户名,密码随便输入试一下


密码不正确,我们可能需要对密码进行爆破得到结果

首先我们得在 SwitchyOmega 插件中将代理服务器设置为一个本地回环的地址,便于我们进行抓包,此处我已经设置好了
然后我们打开 BurpSuite

点击代理选项卡,然后点击代理设置查看代理监听器

设置为我们的本地回环地址

然后退出来将拦截开启

回到页面将代理开启,此时为本地回环,然后再随意输入一个密码

发现 burp 已经抓到了,并且能看到我随便输入的密码为123

右键将它发给 Repeater

然后在 Repeater 中点击发送

右边说我们需要一个字典,所以坐稳了本题是需要进行爆破了

返回代理部分,然后将其发到 intruder 部分

在 payload 区域将自己准备好的字典加载上去

将 payload 加载到指定位置,此处就是 password 后面,然后点击 Attack 开始攻击

爆破结束通过长度排序,发现密码为123456

选中后查看响应,发现flag
command_execution-(★★)
打开靶机地址

发现和ping命令有关,我们随便ping一下

这里我们ping一下本地回环,发现执行成功了,通过命令格式发现 -c 这种一般是Linux的命令格式

我们使用管道符 | 来进行操作,发现可行
Note
Linux中的管道符 | :将前一个命令的输出直接传递给下一个命令作为输入。

使用 ls /来查看根目录,没有有用信息,继续尝试家目录,因为一般 flag 或者重要信息一般会藏在根目录或者家目录中

使用 ls /home 发现 flag 就在家目录下

最后使用 cat /home/flag.txt 查看命令,查看对应家目录下的 flag 文本,得到flag。
simple_php-(★)
打开靶机地址
发现一串

发现是一段简短的php代码,对代码进行分析,看到判断部分,发现是一个 松散比较

我们可以通过PHP 类型比较表查看相关信息,
这里我们让a弱等于0为true的都可以,这里我们选择false

以GET形式传入变量后发现前半段的flag已经出现了,我们继续分析变量b
此处涉及了一个 is_numeric函数
Note
is_numeric:检测变量是否是数字或数字字符串
所以if判断如果简单思考发现也是矛盾的

我们这里输入数字大于了1234,但是在函数 is_numeric 处就已经退出了,那如果不能为数字,后续的数字比较判断就不能执行

所以这里也涉及了php的特性,我们可以在这个大于1234的数字后面加上一个字符,函数 is_numeric 不会认为这是一个数字所以会放行,然后比较的时候只会对数字进行比较,比较到a时候就截至,此时大于1234,故flag出现。
总结
本套题主要覆盖了以下 Web 安全核心漏洞类型:
- 信息泄露:view_source / robots / backup
- 前端绕过:disabled_button / simple_js
- 协议层问题:get_post / cookie / xff_referer
- 认证问题:weak_auth
- 高危漏洞:command_execution / simple_php
适合作为 Web CTF 入门训练靶场。