sql sql复习

news2025/5/17 23:40:41

虽然之前学习过sql,但由于重在赶学习进度,没有学扎实,导致自己刷题的时候有的地方还是模模糊糊,现在主要是复习,补一补知识点。

今日靶场:

NSSCTF

云曦历年考核题

在做题之前先回顾一下sql注入的原理,以便在做题的过程中更快的找到解题方法。

其实最简单粗暴的讲sql注入就是利用题目会把用户输入的语句加入SQL语句进行拼接,导致攻击者构造的恶意语句被迫执行,然后达到攻击者想要的目的。

SQL语句的结构

例如一个简单的SQL语句如下:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

这里就有两个用户注入点:两个单引号内的部分 'admin' 和 'password'

然后用户在admin处输入这个:

' OR '1'='1

上面的SQL语句就被改动了:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'password';

可以看到,OR  '1'='1' 是一个永远为真的条件,这将导致查询返回所有用户的信息。

当然,在做CTF Web题的时候返回我们攻击者需要的信息是最好的事儿,因为这是目的。

但是题目当然不可能这么简单,一定会对我们的语句进行过滤、转义或者验证,此时页面就会出现报错,那也没关系,因为我们还是可以根据题目报错或者页面的响应然后对我们输入的语句进行校正,以达到在绕过限制的同时让它在SQL语句中被执行的目的。

会出现报错

比如在上面的例子中,SQL语句是这样的:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

 当然了,刚刚是假设SQL语句就是那一句固定样式的情况,然而现实中很多题目肯定也不可能就那么一个固定的SQL语句,不然就一个固定样式多没意思。那还有些什么样式呢?比如双引号的:

SELECT * FROM users WHERE username = "admin" AND password = "password123";

那我们输入  '  OR '1'='1  肯定要报错的了,因为拼接进去这样:

SELECT * FROM users WHERE username = "' OR '1'='1" AND password = "password123";

" ' OR '1'='1"  这一堆妖魔鬼怪  OR '1'='1"  当然不符合SQL语法,此时页面一报错也可以知道原SQL语句的注入点闭合方式为  "  "    这也是所说的判断闭合方式。

而刚刚假设的SQL语句也是固定为字符型注入的情况(这样说是因为数字值1加了引号如 '1'='1'后被字符串化了,此刻数字1变成了字符'1'),事实还有数字型注入,但数字型注入方式不用引号闭合,因此不用判断闭合方式。

不会出现报错

这种情况就只能看执行sql注入语句后的结果有没有达到目的了,没有达到目的是不会出现报错的

当然了,刚刚是假设SQL语句就是那一句固定样式的情况,然而现实中很多题目肯定也不可能就那么一个固定的SQL语句,不然就一个固定样式多没意思。那还有些什么样式呢?比如双引号的:

SELECT * FROM users WHERE username = "admin" AND password = "password123";

那我们输入  '  OR '1'='1  肯定要报错的了,因为拼接进去这样:

SELECT * FROM users WHERE username = "' OR '1'='1" AND password = "password123";

" ' OR '1'='1"  这一堆妖魔鬼怪 当然不符合SQL语法, 但也可以知道原SQL语句的注入点闭合方式为  "  "    这也是所说的判断闭合方式。

做sql题步骤:

判断列数order by)  >>>  联合查询数据库名(用database()查table_schema  >>>  查表名(从table_schema中查table_name)  >>>  查列名从table_name中查column_name)  >>>  查具体数据

NSSCTF

【SWPUCTF 2021 新生赛】ez_sql

提示安全的传参即POST传参

得到一个假的flag

传参 1'  报错,看引号部分是字符型注入

把引号注释掉又恢复正常了

注意这里我发现注释符 --+ 和  --  都被过滤掉了

诶嘿,在判断列数时发现我 order by 被它截断了

说明or被过滤了 ,而且,它给我空格也删了(过滤了)

那就要找绕过方法了

去网上找了一下

替换 order by 的,用 group by:

替换空格的,用 /**/ :

替换后继续查询,发现绕过

加第2列

3列

第4列就没有了

所以总的只有三列

接下来联合查询

结果 union 也被过滤了

双写union绕过

但是发现没有返回我想要的信息,这样的话就会想到之前的报错信息提到的LIMIT子句:

也就是说LIMIT是表示所在页数,这样的话我换一页试试:limit 1,1

哦豁,可以看到返回位数是第2列和第3列,但要注意的是第三列前提示的才是True flag,所以应该查询第3列

给  database()  换个位:

得到数据库名 NSS_db

接下来爆表名

说明又有字符被过滤了

仔细一看就是 information少了or嘛

进行双写绕过,但是发现语句最后被截断了,

欧欧欧原来是忘了加括号(加了括号才代表查询的是第3列的表名,和不加括号是完全不一样的)

加括号:

欧喉,返回长度超过一行

这个我熟啊,我记得是有这么个东西:

使用聚合函数 group_concat 来将多行数据合并为一行(用它包裹住table_name即可)

包裹执行

得到两个表名 NSS_tb  users

接下来查列名

查具体数据

得到flag

ok,恭喜自己又掉进出题佬的圈套(提交了好几次发现还是不正确)

后来才意识到被骗了 ,true flag反而是false,而真正的flag应该在Flag:这一栏

emmm我真的是,怎么这么多坑

但是发现仅仅只替换为第2列回显时任然是一样的flag,可能是两列目录不一样,所以光换位还不行,需要换位重新做一遍。。

做就做谁怕谁

可以看到数据库名是一样的:

表名也是一样的 :

耶?怎么列名也一样??? :

这样的话就说明是目录查错了(flag根本不在flll444g目录下)

试试Secr3t

这次该对了吧 昂?

[LitCTF 2023]这是什么? SQL! 注一下!

搜什么

先注入万能密码试试

发现只是切换了页面,并没有报错或其他提示,说明是盲注

 试了一些字符发现照样只是换了页面,没有进入,应该是有字符被过滤了

那就先注个简单点的1,再进行fuzz模糊测试判断一下哪些字符是被过滤了

进行爆破

好像看似也没过滤什么

结果搞了半天不是盲注,下滑鼠标发现SQL语句和回显

那这样就没什么难度了

注1看看

可以看到一个嵌套数组 ,正确排版应该是这样:

Array (
    [0] => Array (
        [username] => tanji
        [password] => OHHHHHHH
    )
)

这个可以不用管它,注意到包裹1的是六个括号(((((()))))),这样就需要把括号给闭合掉

没有结果了,加个注释符注释掉后面6个反括号又有结果了

(由于题目有稍不雅的图,被屏蔽了,所以改了截一半)

判断列数

第3列无结果,说明只有两列

联合查询

发现返回结果有点长,应该是id=1的值和联合查询均返回了,那把id=1的值个影藏掉,看着有点费眼睛(id=1改为-1)

 

这次就只返回联合查询的值了

继续查数据库名

注意到username是第1列返回,psassword是第2列返回

猜测flag应该在password下,所以数据库名查第2列

得到数据库名ctf

继续查表名

-1))))))union select 1,(select table_name from information_schema.tables where table_schema='ctf')#

得到表名users

接续查列名

但是查了好几次都是没有返回值

我还以为是过滤了column,但是测试过后发现并没有

再后来想到有可能列名比较多,不是没有返回值而是返回值太多导致无法显示,所以用group_concat来输出所有,然后的确出了很多列名

查询第一个数据,但发现是无用的flag

接下来这个奥:

查询所有数据库:

id=-1)))))) union select 1,schema_name from information_schema.schemata #

 执行

我嘞个,有点多,还好吧,注意到ctftraining这个数据库

直接从头查询

又忘了group_concat

得到flag了吧终于

取数据!!!

特喵的,到这一步又忘了一个东西,虽然列名叫flag,但表中的字段可能包含数据库名而不仅仅是表名,所以应该差ctftraining.flag 

最后终于是出flag了

云曦历年考核:

24年秋期末考

admin

开启题目是个登录界面:

提示查看普通用户

那就试试admin登录

出现 js 弹窗提示错误,说明这个这个账户已经存在

注意到有一个 sign up 的注册界面,那就先注册一个看能不能登录进去

设置账户名 adminin  密码为666

 

注册成功后登录

发现进来了     有一个按钮,但点了以后是一个假的flag

诶但是点完以后关闭了 js 弹窗时发现 URL 地址多了一个参数值 id=1

这个应该就是提示,因此直接利用参数 id 进行sql注入

传id=1跳转到假的flag html界面

加单引号报错,字符型注入,且闭合方式为单引号

加注释符--+,页面正常

说明上面用的这些符号都没被过滤,防止1的值覆盖查询结果,改为-1开始查询列数

才到第2列就不认识了,说明只有1列

联合查询

得到数据库名 TGlu

查表名

得到User和flag

但根据做题的经验来看,500分的题flag应该不会在flag目录下,直接用User查询列名

(或者说登录的sql注入题查询用户名和密码应该首选User或users目录)

看叭,得到用户名和密码的列名

接下来分别给它们爆出来就好了

先查用户名

可以看到有两个用户,而后面那个adminin明显是我们注册的,所以前面的admin就是管理员的

接下来查密码

不用说,666是我注册用的密码,所以前面那部分就是管理员的

现在就用管理员的账户和密码直接返回原页面登录即可到后台拿到flag

登录,get  flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

介绍一下什么是 AI、 AGI、 ASI

1. AI(人工智能):工具化的“窄域智能”​​ 定义​: AI 是能够执行特定任务的智能系统,依赖大量数据和预设规则,​缺乏自主意识和跨领域通用性。 特点​: ​任务专用​:如图像识…

利用 Amazon Bedrock Data Automation(BDA)对视频数据进行自动化处理与检索

当前点播视频平台搜索功能主要是基于视频标题的关键字检索。对于点播平台而言,我们希望可以通过优化视频搜索体验满足用户通过模糊描述查找视频的需求,从而提高用户的搜索体验。借助 Amazon Bedrock Data Automation(BDA)技术&…

模拟jenkins+k8s自动化部署

参考 Jenkins+k8s实现自动化部署 - 掘金 手把手教你用 Jenkins + K8S 打造流水线环境 - 简书 安装插件 调整插件升级站点 (提高插件下载速度) 默认地址 https://updates.jenkins.io/update-center.json 新地址 http://mirror.xmission.com/jenkins/updates/update-center.json …

MySQL——十一、主从复制

主从复制是指将主数据库的DDL和DML操作通过二进制日志传入从库服务器中,然后在从库上对这些日志重新执行(重做),从而使得从库和主库的数据保持同步。 优点: 主库出现问题,可以快速切换到从库提供服务实现读…

如何让 Google 收录 Github Pages 个人博客

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 如何确认自己的网站有没有被 google 收录 假设网址是:https://cyrus-studio.github.io/blog 搜索:site:https://cyrus-studio.github…

servlet-api

本次内容总结 1、再次学习Servlet的初始化方法 2、学习Servlet中的ServletContext和<context-param> 3、什么是业务层 4、IOC 5、过滤器 7、TransActionManager、ThreadLocal、OpenSessionInViewFilter 1、再次学习Servlet的初始化方法 1&#xff09;Servlet生命周期&…

根据输入的数据渲染柱形图

背景&#xff1a;根据不同季度的销售额&#xff0c;生成对应的柱形图&#xff0c;直观的看出差异 效果&#xff1a; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatibl…

Java SpringBoot项目JPA查询数据demo

目录 一、前置1、IDEA创建SpringBoot项目2、基础设置、配置 二、JPA查询数据1、配置SQL server连接2、创建实体类QueryEntity.java生成Getter and Setter 3、创建Repository接口QueryRepository.java 4、创建Service服务类QueryService.java 5、创建Controller控制器类QueryCon…

vue2集成可在线编辑的思维导图(simple-mind-map)

最近要求做一个可在线编辑的思维导图&#xff0c;经过层层调研和实测&#xff0c;最简单的思维导图导图实现还得是simple-mind-map组件 simple-mind-map中文文档 当前我使用的是vue2项目&#xff0c;目前没试过是否支持vue3&#xff0c;但是看官网描述他们也给了有vue3的demo项…

如何在Windows右键新建菜单中添加自定义项,将notepad添加到新建菜单

一、简介 Windows 右键新建菜单的核心管理机制隐藏在注册表的 HKEY_CLASSES_ROOT 根键中。这里存在两种关键注册表项&#xff1a;文件扩展名项和文件类型项&#xff0c;它们共同构成了新建菜单的完整控制体系。 以常见的.txt文件为例&#xff0c;系统通过以下机制实现新建菜单…

CS016-4-unity ecs

【37】将系统转换为任务 Converting System to Job 【Unity6】使用DOTS制作RTS游戏|17小时完整版|CodeMonkey|【37】将系统转换为任务 Converting System to Job_哔哩哔哩_bilibili a. 将普通的方法&#xff0c;转化成job。第一个是写一个partial struct xxx&#xff1b;第二…

微信小程序第三方代开发模式技术调研与实践总结

🚀 微信小程序第三方代开发模式技术调研与实践总结 📖 前言 随着企业对私有化品牌运营诉求的增加,许多大型客户希望将原本由 SaaS 平台统一提供的小程序迁移至自有主体(AppID)下运行,同时又希望继续沿用 SaaS 平台的业务服务与数据托管方式。微信开放平台提供的“小程…

upload-labs通关笔记-第8关 文件上传之点绕过

目录 一、点绕过原理 二、deldot()函数 三、源码分析 四、渗透实战 1、构建脚本test8.php 2、打开靶场 3、bp开启拦截 4、点击上传 5、bp拦截 6、后缀名增加点 7、发包并获取脚本地址 8、访问脚本 本文通过《upload-labs靶场通关笔记系列》来进行upload-labs靶场的渗…

PCL PolygonMesh 与 TextureMesh 源码阅读与简单测试

Title: PCL PolygonMesh 与 TextureMesh 源码阅读与简单测试 文章目录 I . PolygonMesh1. PolygonMesh 结构体2. Vertices 结构体与点云索引3. 测试 PolygonMesh II. TextureMesh1. TextureMesh 结构体2. TexMaterial 结构体3. 纹理坐标与纹理坐标索引4. 测试 TextureMesh 以下…

量子算法:开启计算新时代的技术密码

摘要 量子算法是利用量子力学特性&#xff08;如叠加态、纠缠、干涉&#xff09;设计的计算模型&#xff0c;在特定问题上相比经典算法具有指数级加速优势。本文深入探讨了量子算法的核心原理、代表性算法及其在多个领域的应用&#xff0c;分析了量子算法面临的挑战与未来发展…

多线程代码案例-1 单例模式

单例模式 单例模式是开发中常见的设计模式。 设计模式&#xff0c;是我们在编写代码时候的一种软性的规定&#xff0c;也就是说&#xff0c;我们遵守了设计模式&#xff0c;代码的下限就有了一定的保证。设计模式有很多种&#xff0c;在不同的语言中&#xff0c;也有不同的设计…

CSS实现文本自动平衡text-wrap: balance

不再有排版孤行和寡行 我们都知道那些标题&#xff0c;最后一个单词换行并单独站在新行上&#xff0c;破坏了视觉效果&#xff0c;看起来很奇怪。当然&#xff0c;有老式的 手动换行或将内容分成不同部分。但您听说过text-wrap: balance吗&#xff1f; 通过应用text-wrap: bal…

mac M芯片运行docker-desktop异常问题

虽然mac已经迭代到m4了&#xff0c;但官方的docker-desktop运行仍然有问题&#xff0c;包括但不限于&#xff1a; 命令行docker找不到docker-desk打不开docker-desktop闪退容器起不来 尝试不同版本后&#xff0c;看到了其他可以在mac跑docker的开源方法&#xff0c;更简单、轻…

事件响应策略规范模版

事件响应策略 一、事件分级定义 根据事件对业务的影响程度和紧急程度,将事件分为 4个等级(P1-P4),明确各级事件的判定标准:、 二、响应时效承诺 响应时间(从事件确认到首次回复) P1 事件:15 分钟内响应(724 小时电话 / 工单优先接入) P2 事件:30 分钟内响应(工…

MGX:多智能体管理开发流程

MGX的多智能体团队如何通过专家混合系统采用全新方法,彻底改变开发流程,与当前的单一智能体工具截然不同。 Lovable和Cursor在自动化我们的特定开发流程方面取得了巨大飞跃,但问题是它们仅解决软件开发的单一领域。 这就是MGX(MetaGPT X)的用武之地,它是一种正在重新定…