CONTENTS
1 项目实验环境
测试渗透机:kali_linux-2020
链接:https://pan.baidu.com/s/1apN96nIcs1Fyx8YmFs24Xg
提取码:32ve
目标靶机:owasp_Broken_Web_Apps
链接:https://pan.baidu.com/s/1CMJ2aERmDGlXXkhUmjDmtA
提取码:9zsj
2 SQL注入概述
2.1 SQL注入简介
在owasp年度top 10安全问题中,注入高居榜首。SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序。而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
- 1.对于Web应用程序而言,用户核心数据存储在数据库中,例如MySQL、SQL Server、 Oracle ;
- 2.通过SQL注入攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作;
- 3. SQL注入即攻击者通过构造特殊的SQL语句,入侵目标系统,致使后台数据库泄露数据的过程;
- 4.因为SQL注入漏洞造成的严重危害性,所以常年稳居0WASP TOP10的榜首!
2.2 SQL注入的危害
- 拖库导致用户数据泄漏;
- 危害web等应用的安全;
- 失去操作系统的控制权;
- 用户信息被非法买卖;
- 危害企业及国家的安全!
3 SQL基础回顾
现实生产环境中mysql用的居多。对mysql没有基础的童鞋可以参考我这篇文章,简单了解一下mysql(主要了解mysql一些查询语句)。
https://blog.csdn.net/Until_U/article/details/105333489
下面补充一下:owasp的数据库账号:root 密码:owaspbwa
3.1 联合查询union
(1)联合查询常应用在SQL注入中,下面看一个例子,将下面的A和B这两个SQL语句联合,这样就可以执行查询到B里的内容。
A:select user,password from mysql.user;
B:select user_login,user_pass from wordpress.wp_users;
select user,password from mysql.user union select user_login,user_pass from wordpress.wp_users;
(2)需要注意的是union查询前后字段数必须相同,不一致的话就会报错,e.g.:
select user,password,host from mysql.user union select user_login,user_pass from wordpress.wp_user;
(3)判断union前后字段是否一致,可以猜字段数:
select * from dvwa.users union select 1;
select * from dvwa.users union select 1,2;
select * from dvwa.users union select 1,2,3;
select * from dvwa.users union select 1,2,3,4;
select * from dvwa.users union select 1,2,3,4,5;
select * from dvwa.users union select 1,2,3,4,5,6;
猜到之后就可以利用union查询了,多余的字段不想查询可以用数字代替:
select * from dvwa.users union select user_login,user_pass,1,2,3,4 from wordpress.wp_users;
3.2 information_schema数据库
mysql中默认有information_schema数据库,这个类似于数据字典,存放数据库中所有的数据库和表及columns等。
这个数据库中我们主要先关注tables和columns这两张表。
(1)查询数据库库名、表名(tables),下面几句SQL语句执行下熟悉下:
select * from information_schema.TABLES\G
select distinct table_schema from information_schema.TABLES;
select TABLE_SCHEMA,TABLE_NAME from information_schema.TABLES\G
select TABLE_SCHEMA,GROUP_CONCAT(TABLE_NAME) from information_schema.TABLES group by TABLE_SCHEMA\G
mysql> select TABLE_NAME from informatio