一.浏览器打开sqli.com/sqli-1.php
源码
如果加and 1=1 页面显示正常,加and 1=2页面不正常或者错误,同样说明存在SQL注入;如果不加单引号页面显示正常,而加了单引号以后,页面显示不正常或者错误,则说明网页存在SQL注入
修改源码,添加第14行
访问http://localhost/phpmyadmin/,如果需要输入密码,账号输入root,密码为空,然后点击执行登录, 然后点击左边的sqli,在右侧的new这一行选择浏览,再选择SQL。
执行
通过and 1=1和and 1=2来判断网页是否存在SQL注入的原理
去phpmyadmin里验证,分别执行这2条语句
访问http://sqli.com/sqli-1.php?id=1 or 1=1
二.我们希望的是能够通过注入,获取一些网站管理员不希望我们知道的数据,比如管理员的账号密码。
通过union操作符就可以达到我们的目的,union可以合并两条或者多条select语句的查询结果,它的语法如下:
Select column-1,column-2,…,column-N from table-1 union select column-1,column-2,…,column-N from table-2
使用union有一些限制: 1.两个查询返回的列数必须型相同。2.两个select语句对应列所返回的数据类型必须是相同或者是兼容的
执行show create table new来查看建表语句
可以点击选项,选中完整内容。
可以看到这个表有3列,然后来测试用order by子句来测试列数量,从1开始,每次查询加1,加到报错为止
因为这里一共只有3列,但是你要根据第4列来进行排序,当然就会报错了。
注入页面进行测试。
执行
我们可以执行一些数据库函数
三.
修改sqli-1.php源文件,16、17、18行
再次访问上述链接
构造如下语句 1 union select 1, table_name,3 from information_schema.tables where table_schema='mysql'
访问后返回该表中所有的列名。
1 union select 1, User, Password from mysql.user
进入phpmyadmin确认一下
进入mysql终端看一下,到底有多少条记录。