1-3DML语言与INsert注入逻辑

1.什么DML?

DML:数据操作语言(data manipulation language)

功能:主要是对表、视图等对象进行查询、插入、更新和删除操作,如果我们没有特殊的说明,主要是对表的操作

包括:

SELECT 查询

INSERT 插入

UPDATE 更新

DELETE 删除

实战演示

打开kali的终端,输入mysql -uroot,访问mysql数据库

1-3DML语言与INsert注入逻辑

我们这篇文章演示要用到一个示例的数据库,我们自己创一个数据库。create database hxf default charset utf8;

1-3DML语言与INsert注入逻辑

show databases;查看一下创建的结果

1-3DML语言与INsert注入逻辑

使用创建的数据库,use hxf;

1-3DML语言与INsert注入逻辑

创建一张表,create table users(uid int,uname varchar(32),password int(11),mobile bigint(20),isadmin tinyint(4),blog varchar(100));

1-3DML语言与INsert注入逻辑

查看一下创建表的结构,show create table users;

1-3DML语言与INsert注入逻辑

这样我们用到的表结构就创建完闭了

我们看到这个表有六个字段,我们先看一下这个表有哪些记录,以便验证一下。select * from users;

1-3DML语言与INsert注入逻辑

为空,没有,毕竟是我们刚刚建的

那么如何给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’);

1-3DML语言与INsert注入逻辑

这个时候返回OK,有一行受影响,这说明插入成功,我们还可以通过select *来查看一下。select * from users;

1-3DML语言与INsert注入逻辑

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’);

1-3DML语言与INsert注入逻辑

我们看一下这种情况,select * from users;

1-3DML语言与INsert注入逻辑

这个时候就插入了Michae116的情况

第三种情况,我们可以插入少量的情况,我们插入的时候,并不一定所有的字段都需要插入,我们只需要插入两个字段,比如uid和uname,其它的我们删除掉,这个时候我们只需要填入两个字段,值中我们对应的输入两个值,回车。insert into users(uid,uname) values(10015,‘Michae115’);

1-3DML语言与INsert注入逻辑

这个时候,我们查看一下。select * from users;

1-3DML语言与INsert注入逻辑

这个值,同样的已经插进去了,其它值如果没有赋值,那么默认就是null值。同时,我们还可以通过select办法,select是指直接输入值,id是10017,uname是michael10017,这种办法可以在程序中,把变量变成值,我们回车。insert into users(uid,uname) select 10017,‘michael10017’;

1-3DML语言与INsert注入逻辑

我们可以验证一下。select * from users;

1-3DML语言与INsert注入逻辑

10017就已经插入进去了,这是第四种插入的方式

同时我们还有insert办法,insert into users,同时我们使用set命令,set中我们的uid=10018,如果我们对多个字段进行赋值,我们还可以通过uname等于michael10018,set命令中使用,字段名等于什么值,多个键值对之间使用逗号分割,我们回车。insert into users set uid=10018,uname=‘michael10018’;

1-3DML语言与INsert注入逻辑

这样子成功,我们还可以验证一下。select * from users;

1-3DML语言与INsert注入逻辑

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;

1-3DML语言与INsert注入逻辑

我们看这个isadmin,它告诉我们是否是管理员,这个字段的含义相当重要,因为一旦变成管理员,我们就会得到很高的权限

那么我们对users表进行插入,insert into users,uid、uname、isadmin,我们只对这三个字段进行插入。同时插入的时候,传入的变量,我们命名为10020,uname是Michael20,isadmin,其实注入者不知道它的数据类型是什么,甚至不知道字段名是什么,我们猜测可能是字符也有可能是数字,这需要盲目的去尝试,叫盲注。这里我们猜测它可能是字符串,我们输个字符串,看看它有什么结果,或者有哪些有用的信息,回车。insert into users(uid,uname,isadmin) select 10020,‘Michael20’,‘hxf’;

1-3DML语言与INsert注入逻辑

我们会发现这里有个ERROR,ERROR是一个有用的信息,对于我们程序来说,不能够很好的把这些错误信息给屏蔽掉,那么对注入者来说,是可以利用的。在有的mysql版本,它不会直接返回报错结果或者警告信息,这个时候我们可以查看一下警告是什么。show warnings;

1-3DML语言与INsert注入逻辑

我们输入的字符是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;

1-3DML语言与INsert注入逻辑

其中有个blog字段,在以前的网站中或者现在的网站中,我们经常会遇到过,如果打开个小网站,就会不断地跳出六合彩信息这些小广告。这些有部分是通过对blog类似的字段进行注入所造成的

我们可以对users插入一条记录,insert into users(uid,uname,blog),我们插入10021,uname我们插入michael21,blog的时候,我们原来设计的时候,可能是希望用户输入的是blogurl地址,但是注入者或者有意的入侵者,它输入的不是url,而是输入脚本’;

1-3DML语言与INsert注入逻辑

这里说明的是什么,在一些小网站中,javascript脚本,我们没有很好的去屏蔽用户输入的内容,在浏览器中对脚本进行解析,那么这个脚本就会执行,执行的后果,一方面一些六合彩信息不是注入者真正的用意,这些只不过是偷取流量而已,真正的注入者,它包括了mysql的链接文件,connection。insert into users(uid,uname,blog) select 10021,‘michael21’,'';

1-3DML语言与INsert注入逻辑

我们看一下这个users。select * from users;

1-3DML语言与INsert注入逻辑

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基本使用与注入逻辑

上一篇:实时监控Cat之旅~配置Cat集群需要注意的问题


下一篇:简单玩玩TensorFlow的Post Training Quantization