上一篇博客:网络安全学习篇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结构,达到编写程序时意料之外结果的攻击行为,其成因可以归结一下两个原因叠加造成的:
- 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
- 未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中
注入点可能存在的位置
就是存在交互的地方
在用户"可控参数"中注入SQL语法,也就是Web应用在获取用户数据的地方,只要带入数据库查询,都有SQL注入的可能,通常包括:
- 表单GET数据
- 表单POST数据
- HTTP头部(请求报文其他字段)
- Cookie数据
- 查询框、留言板
…
漏洞危害
攻击者利用SQL注入漏洞
- 可以获取数据库中的多种信息例如:后台管理员账户密码,从而脱取数据库中内容(脱库)
- 在特别的情况下还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配、数据库本身有缺陷等存在问题,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限
服务器提权:mof、udf提权
漏洞分类
在数据库中,不加单引号的为数字,加了单引号的为字符
从数据类型分类来看SQL注入分为数字型和字符型
- 数字型
注入点的数据,拼接到SQL语句中以数字型出现的,即数据两边没有被单引号、双引号包括 - 字符型
从注入手法分类,大致可以分为几个类别
- 可联合查询注入
- 报错性注入
- 布尔型注入
- 基于事件延迟注入
- 可多语句查询注入
1.3MySQL相关
由于之前学习过数据库系统概论,对MySQL数据库有了基本的掌握,此处不再详细记录该方面知识,见谅~
数据库information_schema 存储库名、表名、字段名
常用函数与参数
逻辑运算
二、SQL注入测试网站
测试环境
- windows2008 开启Web服务
- winXp模拟攻击者
工具
- 御剑
输入网址进行扫描,原理暴力扫描网站后台,判断响应状态,判断SQL注入点的存在
2.1注入点的判断
修改网址后缀,观察判断,是否出现SQL语句报错、报错位置
除第一个,存在任一个,就存在SQL注入漏洞
?id = 35
—>+1/-1
—>?id = 34
? id = 35
—>+'
—>?id = 35'
?id = 35 and 1=1--->?id = 35 and 1 = 2
—>是否有布尔类型的状态?id = 35 and sleep(5)
—>是否有延时
2.2联合查询union
可实现跨库、跨表查询
判断表字段个数
简单理解就是利用虚拟表联合第二张表,查出想要的信息
获取网站后台账号密码
账密存在数据库中,已经知道数据库名,现在要找表名
- 暴力猜测表名—》
...from 表名
- 联合查询—》
..from infermation_schema tables where table_schema = database()
- 联合编码问题,需要转化表名为16进制,然后在转化回来
管理员账密可能存在cms_users
表中
表中字段
字段内容
2.3报错注入
在注入点判断的过程中,发现数据库中SQL语句的报错信息,会显示在页面中,因此可进行报错注入
报错注入的原理:在错误信息中执行SQL语句,触发报错的方式很多,具体细节也不尽相同
- group by 重复键冲突
- XPATH 报错
三、SQLmap
kali内置工具sqlmap 是自动检测SQL注入漏洞的工具
检测注入点
可注入类型
全自动操作
POST注入
- 抓取数据包
- 复制数据包内容到kali,新建文件post.txt
- 在sqlmap中自动读取文件进行SQL注入测试
sqlmap -r post.tst
参考:B站千峰