IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 1-4.Delete与注入逻辑 -> 正文阅读

[大数据]1-4.Delete与注入逻辑

实战演示

我们首先打开kali的终端

在这里插入图片描述

输入mysql -uroot,当中在输入hxf数据库名,这样子就可以直接链接到hxf数据库。mysql -uroot hxf

在这里插入图片描述

我们可以通过show tables;看一下当前所具有的表名

在这里插入图片描述

我们看一下users,这是我们上一篇文章所留下来的,我们看一下它的内容。select * from users;

在这里插入图片描述

一共有7行

我们现在要拷贝一张表跟users表的内容是一样的,我们可以create table这个表名叫users2,as select * from users这样子,我们就创建了一张表,叫users2,它的结构、内容和users是一样的,我们回车。create table users2 as select * from users;

在这里插入图片描述

这里就说明是OK,并且有7行的记录已经复制了

我们验证一下。select * from users2;

在这里插入图片描述

我们看到这里有7行记录,跟users表的记录一样

从users2表中删除一条uname为michael10018的记录,我们先把uname为michael10018的记录查找出来,select * from users2,如果我们不输入任何的条件,默认返回整张表的记录,那么我们如何找出uname为michael10018的记录,这个时候,我们就输入一个条件,where说明是要输入一个条件,uname就是字段,等于michael10018,这个就说明,把uname等于michael10018的记录查找出来。select * from users2 where uname=‘michael10018’;

在这里插入图片描述

这个时候返回的就一条记录

如何删除一条记录,删除使用命令delete from,delete from可以大写也可以小写,实际规范中这些关键字理应大写,from说明从那个表进行删除,这里是users2表,如果我们只删除uname,michael10017,那么就输入where uname=‘michael10017’;,回车。delete from users2 where uname=‘michael10017’;

在这里插入图片描述

这个时候返回OK,说明执行成功,这里说有一行受影响,这说明删除了一条记录,我们还可以通过刚才的select验证一下。select * from users2 where uname=‘michael10017’;

在这里插入图片描述

返回是空的,说明已经不存在了,我们还可以通过select *验证一下。select * from users2;

在这里插入图片描述

michael10017的记录就已经不存在了,我们看到输入select * from users2;,返回的是整张表的记录,如果输入的是有条件where uname等于michael10017,那么只查出uname='michael10017’的。而delete的时候,如果输入条件只是删除uname='michael10018’的记录。delete from users2 where uname=‘michael10018’;

在这里插入图片描述

如果不输入条件呢,这就意味着清空了整张表,那么回车。delete from users2;

在这里插入图片描述

我们看到,整张表5条记录,现在查询成功,5行受影响,这说明整张表被清空掉了。我们还可以通过select * from users2;验证一下。select * from users2;

在这里插入图片描述

返回是空的,这是删除的基本使用

1.DELETE基本使用

(1)在指定的表中删除指定的用户

DELETE FROM users where uname=‘hxf’;

删除一行记录或者多行记录,删除我们使用delete from,指明从那个表进行删除,users是我们所传入的表名,如果我们需要条件,我们使用where来指定,where uname的字段值等于hxf,这个记录删除掉

(2)删除所有记录

DELETE FROM USERS;

如果我们不输入where条件的时候,那么它清空的是整张表,也就是删除所有记录,这是最基本的使用

关联删除实际上是关联查询的一个衍生

实战演示

PS:以下的实验过程,是我在其它地方找的

show tables;我们看一下当前有emp表

在这里插入图片描述

我们看一下结构,emp表是员工表,show create table emp;

在这里插入图片描述

当前有一个员工的编号、部门的编号

还有一个表叫部门表,show create table dept;

在这里插入图片描述

部门编号中有dept_no这是部门编号,部门表中有个字段叫部门编号

我们看一下这两个表的新内容,我们看一下部门表。select * from dept;

在这里插入图片描述

我们看到有5行,也就是有5个部门。我们也看一下员工表emp,看一下5行。select * from emp limit 5;

在这里插入图片描述

关联删除,是希望删除emp表和dept表,他们当中通过部门编号关联,通过这个字段关联,同时存在这两个表中,并且它的部门id是d006的这种。

删除我们刚刚说,通过delete from的办法,delete我们在这里使用delete a和b,delete a和b是员工表的部门表的别名,from emp表、dept表,emp表是a,dept表是b,where a的部门编号等于b的部门编号,并且a的部门编号是等于d006,这时候我们回车。delete a,b from emp a,dept b where a.dept_no=b.dept_no and a.detp_no=‘d006’;

在这里插入图片描述

这个时候我们发现有1万四千多行已经删除掉了

我们可以验证一下emp表是否还有d006。select * from emp limit 5;

在这里插入图片描述

我们看到刚刚的d006就已经不存在了

我们还看到dept表。select * from dept limit 5;

在这里插入图片描述

原来有5行的,已经剩4行了,d006这个部门已经不存在了

关联删除这种方式会同时删除emp表和dept表

2.DELETE关联删除

(3)关联删除

DELETE a,b FROM emp a,dept b where a.deptno=b.deptno and a.detpno=1

DELETE a,b是emp和dept的别名,from说明从那个表进行删除,多个表进行关联删除的时候,用逗号分割,a和b只不过是表的别名,where指定删除的条件是什么,a表的部门编号等于b表的部门编号,这说明这两个表中部门相同的编号,并且部门编号是1的删除掉

实战演示

show tables;看一下

在这里插入图片描述

select * from users2;

在这里插入图片描述

users2这个表已经被清空掉了,我们在把users表中的所有内容再插入到users2表中,我们可以通过insert into users2表select * from users;这个办法,回车。insert into users2 select * from users;

在这里插入图片描述

查询返回OK,并且有7行已经复制了,我们验证一下。select * from users2;

在这里插入图片描述

确实有7行记录和users是一样的。那么这个时候我们退出去。exit

在这里插入图片描述

退出命令行,我们的目的是模拟程序中它的变量是如何传递的,它的注入是如何构造传入的参数的。首先我们希望把uname=michael10018的记录删除掉,我们定义变量uname=michael10018,sql传入参数的时候,就是这么传入的。uname=michael10018

在这里插入图片描述

那么在命令行中,如何传入参数的呢,如何执行查询的呢,mysql,然后我们输入hxf,是表明从hxf数据库进行查询的,-e是指发送命令到服务器去执行,这里我们是delete from users2表where uname就等于uname这个变量,这种方法是程序设计者所希望传入的正常的逻辑,这是没有问题的,我们回车看一下。mysql hxf -e “delete from users2 where uname=’$uname’”;

在这里插入图片描述

OK,我们开另外一个窗口,另外一个窗口,需要来验证我们的执行结果,我们看一下users2。mysql -uroot hxf;select * from users2;

在这里插入图片描述

我们看到10018的记录不存在了

注入者是如何传递参数的呢,注入者往往是不按常规出牌,它们传入的参数是如何执行的呢,我们用双引号的目的是把引号的内容给保存下来,往往我们看到这里传入的时候,这个变量的两边是有单引号的,所以我们先输入一个单引号,这个单引号的目的,是把第一个单引号闭合,输入单引号之后,我们输入一个or,or是逻辑或的操作符,or的时候,我们输入字符的1,1=1,我们回车。uname="’ or ‘1’='1"

在这里插入图片描述

我们把这个uname变量给输出来看一下。echo $uname

在这里插入图片描述

我们构造逻辑是这种情况,那么这意味着uname它等于什么呢,我们拷贝一下,把里面的uname变量给去掉,把我们构造的参数传入进去,结果我们看到条件是uname是空,或者1=1,那么地球人都知道1永远等于1,这个逻辑永远是真的,这就意味着or的逻辑关系,如果假跟真,那么永远为真,就把整个查询的逻辑都给改变掉了,我们执行一下。uname=’’ or ‘1’=‘1’

那么这个uname变为注入者传入的参数,我们执行一下回车。mysql hxf -e “delete from users2 where uname=’$uname’”;

在这里插入图片描述

我们切换到另外一个窗口验证一下。select * from users2;

在这里插入图片描述

我们看到整张表被清空掉了,所以这种情况是相当严重的

3.注入删除

注入删除

DELETE FROM users where uname=‘hxf’;

一种情况是程序设计者所希望我们传入的正常的参数

DELETE FROM users where uname=‘ ’ or ‘1’=‘1’;

这种情况是注入者恶意传入的代码,注入者如果在url中,尤其严重,如果在post方法传递的过程中,可能被注入者所捕获到这些可能的逻辑。你要修改之后,重新发送,这个时候就有可能会发生恶意注入,这也是我们应该注意的地方

4.小结

  1. DELETE基本使用与注入应用

    在注入逻辑中,insert和delete两个命令,发挥的不是特别好,使用的也不是特别广泛的,在注入中使用更广泛、发挥的更好的update和select查询

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:47:32  更:2021-12-11 15:48:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:14:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码