好奇
对于网络信息安全挺感兴趣的.
SQL注入漏洞基础
- SQL 注入漏洞的原理
- SQL 注入漏洞的分类
- SQL 注入的利用技巧
SQL 注入攻击通过构建特殊的输入作为参数传入 Web 应用程序,而这些输入大都是 SQL 语法里的一些组合,通过执行 SQL 语句进而执行攻击者所要的操作
SQL 注入攻击是通过将恶意的 SQL 语句插入到应用的输入参数中,再在后台数据库服务器上解析执行进行的攻击,它是目前黑客对数据库进行攻击的最常用手段之一.
三层架构(3-tier architecture
) 通常意义上就是将整个业务应用划分为:
- 界面层(User Interface layer)
- 业务逻辑层(Business Logic Layer)
- 数据访问层(Data access layer)
由数据库驱动的 Web 应用程序依从三层架构的思想分为了三层:
- 表示层。
- 业务逻辑层(又称领域层)
- 数据访问层(又称存储层)
写死到代码里的 SQL 语句执行不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 SQL 语句,如果用户输入的数据被构造成恶意 SQL 代码,Web 应用又未对动态构造的 SQL 语句使用的参数进行审查,则会带来意想不到的危险。
SQL 注入带来的威胁主要有如下几点
- 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
- 绕过认证,列如绕过验证登录网站后台。
- 注入可以借助数据库的存储过程进行提权等操作。
步骤:
- 寻找注入点:指找到存在 SQL 注入的参数,SQL 注入大多发生在 GET 或 POST 请求的参数中,当然也有可能发生在其他地方,例如 UserAgent、Cookie 等
- 判断注入类型/数据库类型:SQL 注入按照不同的分类标准,可以分成不同的种类。
- 按照参数类型可分为两种:数字型和字符型。
- 根据数据库返回的结果,可分为回显注入、报错注入、盲注。
- 按照注入方法,还可以分为联合注入、堆叠注入、宽字节注入、延时注入等。
- 猜解数据库名:猜解后台数据库的库名
- 猜解数据表名:成功猜解到数据库名称后,进一步猜解某一个特定数据库中数据表的名称
- 猜解数据字段名:最后是某个特定数据库中特定数据表中的字段,因为获取到字段才能查询数据
搭建DVWA,一个学习平台.
查到注入点后步骤.
查询数据库版本
version() @@version_compile_os
version()
获取当前数据库版本.@@version_compile_os
获取当前操作系统。
查询数据库名
database()
将会返回当前网站所使用的数据库名字.user()
将会返回执行当前查询的用户名.
查询数据库表名
information_schema
是 mySQL 自带的一张表,这张数据表保存了 MySQL 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。
1 | select table_name,table_schema from information_schema.tables where table_schema= 'dvwa' |
猜解数据库字段名和爆库
依旧利用information_schema1
select 1,group_concat(column_name) from information_schema.columns where table_name='users'
users是用户表,这里是猜测的.
得到结果users 表中有 8 个字段,分别是 user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
然后直接查询user表的这些字段.