Web漏洞学习

好奇

对于网络信息安全挺感兴趣的.

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_schema

1
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表的这些字段.

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道