上一篇博客:网络安全学习篇44_第四阶段_口令破解


目录

  • SQL简介
  • SQL注入基础
  • SQL注入测试网站
  • SQLmap

开始


一、SQL注入

1.1SQL简介

学习过MySQL数据库相关知识后,肯定对此不陌生,简单理解就是 数据库增删改查 的语句

常见的关系型数据库:MySQL、ACCESS、MSSQL、Oracle等

SQL(Structured Quary Language)结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10月,美国国家标准学会对SQL进行规范化后,以此作为关系数据库管理系统的标准语言,1987年得到了国际标准组织的支持下成为国际标准。

一些网站的后台为了存储用户、管理员等的信息和完成一些人性化的交互功能 ,需要数据库来解决

SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击

1.2SQL注入基础

漏洞原理

针对SQL注入的攻击行为可以描述为通过用户可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为,其成因可以归结一下两个原因叠加造成的:

  1. 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
  2. 未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中

注入点可能存在的位置

就是存在交互的地方

在用户"可控参数"中注入SQL语法,也就是Web应用在获取用户数据的地方,只要带入数据库查询,都有SQL注入的可能,通常包括:

  1. 表单GET数据
  2. 表单POST数据
  3. HTTP头部(请求报文其他字段)
  4. Cookie数据
  5. 查询框、留言板

漏洞危害

攻击者利用SQL注入漏洞

  • 可以获取数据库中的多种信息例如:后台管理员账户密码,从而脱取数据库中内容(脱库)
  • 在特别的情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配、数据库本身有缺陷等存在问题,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限

服务器提权:mof、udf提权

漏洞分类

在数据库中,不加单引号的为数字,加了单引号的为字符

从数据类型分类来看SQL注入分为数字型和字符型

  • 数字型
    注入点的数据,拼接到SQL语句中以数字型出现的,即数据两边没有被单引号、双引号包括
  • 字符型

从注入手法分类,大致可以分为几个类别

  • 可联合查询注入
  • 报错性注入
  • 布尔型注入
  • 基于事件延迟注入
  • 可多语句查询注入

网络安全学习篇45_第四阶段_SQL注入、SQLmap_数据库

1.3MySQL相关

由于之前学习过数据库系统概论,对MySQL数据库有了基本的掌握,此处不再详细记录该方面知识,见谅~

数据库information_schema 存储库名、表名、字段名

网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_02

常用函数与参数

网络安全学习篇45_第四阶段_SQL注入、SQLmap_数据库_03


网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_04


逻辑运算

网络安全学习篇45_第四阶段_SQL注入、SQLmap_数据库_05

二、SQL注入测试网站

测试环境

  • windows2008 开启Web服务
  • winXp模拟攻击者

工具

  • 御剑
    输入网址进行扫描,原理暴力扫描网站后台,判断响应状态,判断SQL注入点的存在

2.1注入点的判断

修改网址后缀,观察判断,是否出现SQL语句报错、报错位置

除第一个,存在任一个,就存在SQL注入漏洞

  • ?id = 35 —>+1/-1—>?id = 34
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_06

  • ? id = 35 —>+'—>?id = 35'
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_安全_07

  • ?id = 35 and 1=1--->?id = 35 and 1 = 2—>是否有布尔类型的状态
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_08

  • ?id = 35 and sleep(5)—>是否有延时
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_09

2.2联合查询union

可实现跨库、跨表查询

网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_10


判断表字段个数

网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_11

网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_12

简单理解就是利用虚拟表联合第二张表,查出想要的信息

网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_13

获取网站后台账号密码

账密存在数据库中,已经知道数据库名,现在要找表名

  • 暴力猜测表名—》...from 表名
  • 联合查询—》..from infermation_schema tables where table_schema = database()
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_14

  • 联合编码问题,需要转化表名为16进制,然后在转化回来

网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_15

管理员账密可能存在cms_users表中

表中字段

网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_16


字段内容

网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_17

2.3报错注入

在注入点判断的过程中,发现数据库中SQL语句的报错信息,会显示在页面中,因此可进行报错注入

报错注入的原理:在错误信息中执行SQL语句,触发报错的方式很多,具体细节也不尽相同

  • group by 重复键冲突
  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_18


  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_19


  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_安全_20


  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_21


  • 网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_22

  • XPATH 报错

网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_23

三、SQLmap

kali内置工具sqlmap 是自动检测SQL注入漏洞的工具

检测注入点

网络安全学习篇45_第四阶段_SQL注入、SQLmap_安全_24

可注入类型

网络安全学习篇45_第四阶段_SQL注入、SQLmap_SQL_25


全自动操作

网络安全学习篇45_第四阶段_SQL注入、SQLmap_sql_26


网络安全学习篇45_第四阶段_SQL注入、SQLmap_mysql_27

POST注入

网络安全学习篇45_第四阶段_SQL注入、SQLmap_安全_28

  • 抓取数据包
  • 复制数据包内容到kali,新建文件post.txt
  • 在sqlmap中自动读取文件进行SQL注入测试sqlmap -r post.tst

参考:B站千峰