| |
|
开发:
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.小结
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |