| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 1-3DML语言与INsert注入逻辑 -> 正文阅读 |
|
[大数据]1-3DML语言与INsert注入逻辑 |
1.什么DML? DML:数据操作语言(data manipulation language) 功能:主要是对表、视图等对象进行查询、插入、更新和删除操作,如果我们没有特殊的说明,主要是对表的操作 包括: SELECT 查询 INSERT 插入 UPDATE 更新 DELETE 删除 实战演示 打开kali的终端,输入mysql -uroot,访问mysql数据库 我们这篇文章演示要用到一个示例的数据库,我们自己创一个数据库。create database hxf default charset utf8; show databases;查看一下创建的结果 使用创建的数据库,use hxf; 创建一张表,create table users(uid int,uname varchar(32),password int(11),mobile bigint(20),isadmin tinyint(4),blog varchar(100)); 查看一下创建表的结构,show create table users; 这样我们用到的表结构就创建完闭了 我们看到这个表有六个字段,我们先看一下这个表有哪些记录,以便验证一下。select * from users; 为空,没有,毕竟是我们刚刚建的 那么如何给users插入一行记录呢 插入我们使用命令insert into,插入到那个表呢,我们输入具体的表名,users,插入users我们还要告诉users具体那个字段需要插入值。我们打uid、uname、password,我们按照顺序都写出来,mobile、isadmin、blog,这是告诉users哪些字段需要插入值,需要插入值的时候,我们输入values,来说明,在users后面的字段中,它的值是怎么样的,因此我们用括号括起来,id对应的值是10015,uname对应的值是Michae115,password我们这里使用123,这个手机号我们使用12345,是否是管理员,我们是的,是1,blog我们保存的是博客,比如blog.hxf,这只是一个示例,然后我们回车。insert into users(uid,uname,password,mobile,isadmin,blog) ->values(10015,‘Michae115’,‘123’,‘12345’,1,‘http://blog.hxf’); 这个时候返回OK,有一行受影响,这说明插入成功,我们还可以通过select *来查看一下。select * from users; 10015这个记录,就是我们刚刚插入进去的,这种情况,插入使用insert into,插入那张表呢,需要填入users,紧接着insert into后面,users后面使用括号括起来,说明需要对那些字段进行插入,字段与字段之间使用逗号分割,我们在users后边的字段填入一些值,这个值使用values,values后边的值和users后边的字段,它的值是一一对应的,我们看到,我们插入的时候,每个字段,都插入了值。像这种情况,每个字段都插入了值,那users后面的就可以不写,这种情况,我们在插入一条,看一下,把15改成16,其它的不变回车。insert into users values(10016,‘Michae116’,‘123’,‘12345’,1,‘http://blog.hxf’); 我们看一下这种情况,select * from users; 这个时候就插入了Michae116的情况 第三种情况,我们可以插入少量的情况,我们插入的时候,并不一定所有的字段都需要插入,我们只需要插入两个字段,比如uid和uname,其它的我们删除掉,这个时候我们只需要填入两个字段,值中我们对应的输入两个值,回车。insert into users(uid,uname) values(10015,‘Michae115’); 这个时候,我们查看一下。select * from users; 这个值,同样的已经插进去了,其它值如果没有赋值,那么默认就是null值。同时,我们还可以通过select办法,select是指直接输入值,id是10017,uname是michael10017,这种办法可以在程序中,把变量变成值,我们回车。insert into users(uid,uname) select 10017,‘michael10017’; 我们可以验证一下。select * from users; 10017就已经插入进去了,这是第四种插入的方式 同时我们还有insert办法,insert into users,同时我们使用set命令,set中我们的uid=10018,如果我们对多个字段进行赋值,我们还可以通过uname等于michael10018,set命令中使用,字段名等于什么值,多个键值对之间使用逗号分割,我们回车。insert into users set uid=10018,uname=‘michael10018’; 这样子成功,我们还可以验证一下。select * from users; 10018就已经插入进去了 2.INSERT语句基本使用 INSERT INTO users(uid,uname,password,isadmin) Values(1,’hxf’,’hxf123’,1) 插入的时候使用INSERT INTO,在那个表插入,后面跟着users,users表后面有括号,把需要插入值的字段写出来,字段名之间用逗号分割,字段的值,我们使用values来申明,后面用括号括起来,它的值与前面的字段是一一对应的,如果我们要对users表的所有字段进行插入,那么这个users的括号中,字段的列表可以省略,还可以部分的插入 INSERT INTO users(uid,uname,password,isadmin) SELECT 1,’hxf’,’hxf123’,1; 另外插入的时候,values还可以用select来替换,select的办法主要是把一些变量变为值 Insert into users set uid=2,uname=‘hxf2’; 同时我们还可以使用set办法,对个别字段进行赋值,或者全部字段进行赋值,这是insert的基本使用 那么在注入攻击中insert有哪些注入逻辑和应用 报错可以让我们得到哪些信息,哪些信息是可以利用的 实战演示 我们首先看一下表的结构。show create table users; 我们看这个isadmin,它告诉我们是否是管理员,这个字段的含义相当重要,因为一旦变成管理员,我们就会得到很高的权限 那么我们对users表进行插入,insert into users,uid、uname、isadmin,我们只对这三个字段进行插入。同时插入的时候,传入的变量,我们命名为10020,uname是Michael20,isadmin,其实注入者不知道它的数据类型是什么,甚至不知道字段名是什么,我们猜测可能是字符也有可能是数字,这需要盲目的去尝试,叫盲注。这里我们猜测它可能是字符串,我们输个字符串,看看它有什么结果,或者有哪些有用的信息,回车。insert into users(uid,uname,isadmin) select 10020,‘Michael20’,‘hxf’; 我们会发现这里有个ERROR,ERROR是一个有用的信息,对于我们程序来说,不能够很好的把这些错误信息给屏蔽掉,那么对注入者来说,是可以利用的。在有的mysql版本,它不会直接返回报错结果或者警告信息,这个时候我们可以查看一下警告是什么。show warnings; 我们输入的字符是hxf,但是它告诉我们这个是整数值,并且这个字段是isadmin,这里就爆出了两个信息。第一我不知到这个字段名是什么,但是它告诉我,这个字段名是isadmin,这个字段相当重要,因为它告诉我们它可能是是否管理员的关键字段。第二个信息,它告诉我们是整数,整数中是否是管理员,一般1是管理员,0就不是管理员,这是我们的常识,这是利用报错,所暴露出的信息 3.INSERT语句报错逻辑 mysql> INSERT INTO users VALUES (‘1’,’hxf’,’hxf123’,’hxftest’); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings; ±--------±-----±-----------------------------------------------------+ | Level | Code | Message | ±--------±-----±-----------------------------------------------------+ | Warning | 1366 | Incorrect integer value: ‘’ for column ‘isadmin’ at row 1 | ±--------±-----±-----------------------------------------------------+ 1 row in set (0.00 sec) 一方面我们明明知道它是整数,我们故意给它字符串,另外一方面,我们可能是不知道的,我们是盲目的尝试,叫盲注。因此,我们输入的时候,会有警告信息,如果程序不能很好的处理警告信息,把它暴露出来了,那么对于注入者来说,这些信息,都可以充分利用的,这是报错的逻辑。 那么除了报错的逻辑,那还有哪些是可以利用的呢 实战演示 首先我们看users表的结构。show create table users; 其中有个blog字段,在以前的网站中或者现在的网站中,我们经常会遇到过,如果打开个小网站,就会不断地跳出六合彩信息这些小广告。这些有部分是通过对blog类似的字段进行注入所造成的 我们可以对users插入一条记录,insert into users(uid,uname,blog),我们插入10021,uname我们插入michael21,blog的时候,我们原来设计的时候,可能是希望用户输入的是blogurl地址,但是注入者或者有意的入侵者,它输入的不是url,而是输入脚本’; 这里说明的是什么,在一些小网站中,javascript脚本,我们没有很好的去屏蔽用户输入的内容,在浏览器中对脚本进行解析,那么这个脚本就会执行,执行的后果,一方面一些六合彩信息不是注入者真正的用意,这些只不过是偷取流量而已,真正的注入者,它包括了mysql的链接文件,connection。insert into users(uid,uname,blog) select 10021,‘michael21’,''; 我们看一下这个users。select * from users; 4.INSERT留后门逻辑 Insert into users(uid,blog,password,isadmin) Values(1,’cracker,GO,GO,GO’,’hxf123’,1) 注入者真正的用意是希望这个javascript脚本中,所传入数据库的链接文件,这样在适当的时候,就给门外服务器进行数据库链接的通信 用途: insert into 类似于blog里面,注入者的用意是希望输入一个javascript脚本 1.一方面可能被注入者利用,相当于病毒脚本,当打开网页时,如果处理程序并未屏蔽脚本的浏览器解析,那么就会跳出很多广告窗口,目的只是获得流量。但是这个并不是真正的注入者 2.对于真正的注入者来说,应该放置着数据库连接和通信的脚本,以便在条件适当的时候,使用select into outfile的方式,到web可访问的目录下,目标是通过http协议就可以直接访问数据库。这个才是注入者的真正目标 5.小结 1.什么是DML语句 2.INSERT基本使用与注入逻辑 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:08:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |