Web—SQL注入攻击

本文深入探讨了SQL注入的概念,介绍了攻击产生的原因、分类,详细解析了攻击流程,包括常用检测语句、MySQL注入技巧。同时,文章还讨论了各种防护手段,如参数类型检测、长度检测和危险参数过滤,以及如何绕过这些防护措施,最后提出了参数化查询作为有效的防御策略。
摘要由CSDN通过智能技术生成

一、mysql常用语句

mysql -u root -p
show databases # 查看那些数据库
use 数据库名 #进入指定数据库
show tables # 查看数据库中有哪些表
desc 表名 # 查看数据
show create table 表名 # 查看表的细节
select version(); # 查询当前数据库版本
select @@version; # 查询数据库版本
select user(); # 查看当前用户
order by 1; # 指定第几列进行排序

数据库操作:

 create database mytest; # 创建名为mytest的数据库
 alter database mytest character set utf8; # 修改数据库编码为utf8
 show create database mytest; # 查看数据库状态
 drop database mytest; # 删除数据库 
 select database();# 查询当前使用的数据库是哪一个

表操作:

create table tablename(column_name1 colunm_type1, column_name2 colunm_type2); # 创建表
 alter table 表名 drop column 列名; # 删除指定列
   alter table 表名 add column 列名 column_type; # 添加列
   alter table 表名 change 旧列名 新列名 新列名属性; # 修改列名
   alter table 表名 modify 列名 新的列名属性; # 修改列属性
   show create table 表名; # 查看创建表的语句
   desc 表名; # 查看表结构

例子:创建数据表library

CREATE TABLE IF NOT EXISTS `library`(
   `lib_id` INT UNSIGNED AUTO_INCREMENT,
   `lib_title` VARCHAR(100) NOT NULL,
   `lib_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `lib_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

重点语句

查询表中数据
 select * from 表名; # 查询表中所有内容
 select name from users; # 查询 users 表中 name 值;
 select * from users where age<30; # where条件语句,可以写 "=" ">" "<"
 select * from users limit 1,2; # limit 第一个参数是指定开始位置,第二个参数是个数
插入数据
 insert into table_name values(值1, 值2, ......);
 insert into table_name (列1, 列2,...) VALUES (值1, 值2,....);
删除数据
 delete from 表名 [WHERE Clause]; # 删除指定条件的语句
 delect from 表名; # 删除所有数据
更新数据
 update 表名 SET 字段1=new-value1, 字段2=new-value2 [WHERE Clause]; # 指定条件更新
语句

二、SQL注入概念

SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。本质是修改当前查询语句的结构,从而获得额外的信息或执行内容。
原理:
用户查询某个信息或者进行订单查询业务时,用户提交相关查询参数,服务器收到参数后进行处理,再将处理后的参数提交到数据库进行查询,之后,将数据库返回的结果显示在页面上,这样就完成了一次查询的过程。但如果用户提交的数据中拼接了查询语句,恰好服务器没有对用户输入的参数进行有效过滤,那么数据库就会根据用户提交的语句进行查询,返回更多信息。

1. 产生原因

通常有一下几点:

  1. 参数处理问题:
    对用户参数进行了错误的类型处理。
    转义字符处理环节产生遗漏或可被绕过。
  2. 服务配置问题:
    不安全的数据库配置。
    Web应用对错误的处理方式不当:不当的类型处理、不安全的数据库配置、不合理的查询集处理、不当的错误处理、转义字符处理不当、多个提交处理不当。

2. 攻击分类

根据前台的数据是否回显和后台安全配置及防护情况进行区分,主要有两种类型:

  1. 回显注入
  2. 盲注

影响SQL注入过程的主要有以下几个方面:

  1. 数据库是否开启报错请求。
  2. 服务器端是否允许数据库报错展示。
  3. 有过滤代码机制
  4. 服务器开启了参数化查询或对查询过程预编译
  5. 服务器对查询进行了限速

三、攻击流程

典型的攻击流程如下:

  1. 判断Web系统使用的脚本语言,发现注入点,并确定是否存在sql注入漏洞
  2. 判断Web系统的数据库类型
  3. 判断数据库中表及其相应字段的结构
  4. 构造注入语句,得到表中的数据内容
  5. 查找网站管理员后台,用得到的管理员账号和密码登录
  6. 结合其他漏洞,得到服务器的WebShell并持续链接
  7. 进一步提权,得到服务器的系统权限

sql手工注入的思路:查找注入点、查库名、查表名、查字段名、查重点数据

1. 常用检测语句如何识别SQL注入

在这里插入图片描述

2. Mysql注入常用函数

函数名称 函数功能
system_user() 系统用户名
user() 用户名
current_user() 当前用户名
session_user() 连接数据库的用户名
database() 数据库名
version() 数据库版本
@@datadir 数据库路径
@@basedir 数据库安装路径
@@version_compile_os 操作系统
count() 返回执行结果数量
concat() 没有分隔符地连接字符串
concat_ws() 有分隔符地连接字符串
group_concat() 连接一个组的所有字符串,并以逗号分隔每一条数据
load_file() 读取本地文件
into outfile 写文件
ascii() 字符串的ASCII代码值
ord() 返回字符串第一个字符的ASCII值
mid() 返回资格字符串的一部分
substr() 返回一个字符串的一部分
length() 返回字符串的长度

MySql内置数据库 information_schema
information_schema:提供访问数据库元数据的方式,其中保存着关于MYSQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表的数据类型与访问权限等。因此可利用SQL注入方式,通过远程注入查询语句方式实现直接读取MySql数据中information_schema库的信息。

3. 查询数据的核心语法

功能名称 查询语句
查库 select schema_name from information_schema.schemata
查表 select table_name from information_schema.tables where table_schema=库名
查列 select column_name from information_schema.columns where table_name=表名
查数据 select 列名 from 库名.表名

4. 联合查询

sql语法:

select * from users union select 1,2,3; # 联合查询要保证两次查询的列数相等
union select 1,2,3 -- - 
order by ? # 帮我们确定数据表中有多少列数据,二分法快速判定

5. 报错注入

select * from users where id=1 and (select 1 from (select count(),concat(user(),floor(rand(0)2))x 
from information_schema.tables group by x)a);
select * from users where id=1 and updatexml(1,concat(0x7e,(select user()),
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我要强调一点:SQL注入攻击是非常危险的,可以导致数据泄露、系统瘫痪等严重后果。所以,在进行实验之前,请确保你正在使用的是测试环境而不是真实的生产环境。 下面是一个简单的实验,演示如何进行SQL注入攻击: 1. 准备工作 首先,需要准备一个测试环境。可以使用一些开源的Web应用程序,如DVWA (Damn Vulnerable Web Application) 或 bWAPP 等。这些应用程序都是专门设计用于测试和学习Web应用程序安全性的。 2. 确认存在漏洞 打开Web应用程序,尝试在输入框中输入一些SQL语句,看看是否可以成功执行。如果能执行,那么就说明这个应用程序存在SQL注入漏洞。 例如,在一个登录页面中,输入以下语句: ``` ' or 1=1-- ``` 如果能够登录成功,那么就说明存在SQL注入漏洞。这个语句的作用是将输入的用户名和密码均设置为1=1,这样就可以跳过正常的身份验证过程。 3. 获取数据 一旦确认存在SQL注入漏洞,就可以开始尝试获取数据了。下面是一个示例: 假设存在一个查询页面,可以根据输入的用户ID来查询用户的详细信息。在输入框中输入以下语句: ``` 1' or '1'='1 ``` 这个语句的作用是将查询条件设置为1=1,这样就会返回所有用户的详细信息。如果能够成功获取到数据,就说明攻击成功了。 4. 防范措施 为了防止SQL注入攻击,可以采取以下措施: - 使用参数化查询,而不是拼接SQL语句 - 对用户输入的数据进行严格的验证和过滤,防止恶意输入 - 限制数据库用户的权限,不要使用具有过高权限的账户连接数据库 总之,SQL注入攻击是一种非常危险的攻击方式,需要我们时刻保持警惕,并采取相应的防范措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值