当前位置: 首页> 文旅> 美景 > 郴州北湖疫情最新情况_无锡企业建站程序_搜索优化师_厦门人才网最新招聘信息网

郴州北湖疫情最新情况_无锡企业建站程序_搜索优化师_厦门人才网最新招聘信息网

时间:2025/7/11 14:31:07来源:https://blog.csdn.net/zl0_00_0/article/details/146883773 浏览次数:1次
郴州北湖疫情最新情况_无锡企业建站程序_搜索优化师_厦门人才网最新招聘信息网

前言

之前一篇文章简单写过sql注入产生的原因,大体是因为网站传参数据时,过滤不够严格导致传参的数据和后台sql语句拼接执行。还了解了为什么要闭合,闭合的作用,以及注释的作用,那么现在就开始具体学习各种类型的注入。https://blog.csdn.net/zl0_00_0/article/details/146605934?spm=1011.2124.3001.6209

其实在学习之前个人认为还是具体去学习一下几个现在常用数据库的结构,比如说mysql或是sql server等等,但是这两个内容太多了,短时间学不精,而且大多的数据库的差异都是储存数据的格式差别,其构成还是:库、表、列、字段之类存在级别区分的个体组成的,这边就直接进入操作过程

注入前

1、判断是否有sql注入漏洞,若有则判断注入点和传参方式

其中传参方式有get传参和post传参,get传参可以通过在url地址栏输入测试的语句测试,post则一般是一个具体的输入框,比如一个登录界面;判断是否存在注入点最经典的是id=1'判断,如果传参之后网页报错了则代表具有sql漏洞,当然如果网页没有报错也不代表不存在,可能是对'进行了过滤或其他手段,可以利用其他验证方式进行验证

2、判断注入类型:数字型或字符型

数字型和字符型是在创建数据库的表时确定的,类型总是以数字或字符来区分

数字型大多可以这样判断:id=x and 1=1可以加注释符,如果传参这个网站运行没有出错,继续传参id=x and 1=2可以加注释符时报错了,则说明是数字型注入。通过之前的文章我们也能知道传参的第一句没有语法错误且后面定义恒为真,第二句恒为假,所以第一句正常回显,第二句会报错。但如果是字符型还是传参上面两个语句,字符型会把and当作字符,而不会像执行语句一样去解析and所以语句不会执行。

联合查询注入(也叫union注入)

当页面随我们传参的值会发生变化时,我们通常使用联合查询注入

union注入常用的环境变量

这边运用sqli-labs第一关来尝试

判断是否存在注入

回显存在错误,可以看到是闭合错了删去‘

存在注入,接着判断类型

输入测试语句,回显正常,这边要有一个区分,我们在上面的1后面加上’

可以看到还是回显成功了,我是这样理解的:我们看一下两个的执行语句,首先sql语句中的单引号总是要成对存在的,不然会报错,第一句后面虽然加了注释符号,但是如果后面的单引号被注释了,那么前面只有一个单引号显然会报错,这边没报错说明两个单引号闭合了,后面的注释符没注释掉单引号,而第二句在1后面加了单引号,直接和前面的单引号闭合了,后面的单引号被注释掉了同样不会报错,但是如果我们用第一句每加单引号的去进行测试可以看看,当我们后面恒假时

sql语句还是成功执行,可以去具体看看这句sql中id是等于1 and1=2--,那么是不是可以认为像字符类型一样的,and被当成字符解析了失去了他原本的功能,导致后面恒假的条件不成立,再加上语句没有错误所以成功执行,那么如果我们在1后面加上单引号使后面恒假呢

可以发现没有回显,那就说明是字符型注入,现在我们使用笨办法去一一查看看有几行:就是令id=x依次递增

在id=15时没有回显说明有14个行,现在我们对行1进行操作,id是一列的名称,类似这样的结构

介绍一个函数:order by。

默认语法:SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];       

例如select * from users order by 2      从名为 “users” 的表中选择所有列的数据,并按照表中的第二列进行排序。其中*是通配符,表示所有列

当然也可以和id=x联用,反正order by后面要接上列名,操作看看

可以看到对于行1进行操作,当列数到达4时就报错了,说明这个表中只有3列

接下来介绍union select:

union主要是用于合并两条查询结构

例如:这边有两个查询语句SELECT id,name FROM user1和SELECT id,username FROM user2,查询结果分别是--和++那么如果执行

SELECT id,name FROM user1 UNION SELECT id,username FROM user2

查询结果就是---+++,union使用的规则是查询的两个语句指定的列数必须相同,两个查询中对应列的数据类型必须兼容,不然会报错,使用union查询后默认对两组查询的结果进行去重操作,如果想保留全部查询数据,可以使用union all

select

如果直接执行select 1,2,3的话由于没有from指引,select不会定位任何表,会直接返回我们指定的数据,并将它们当作列名,类似这样

那么如果我们执行

SELECT id,name FROM user1 union SELECT 1,2

会将users表中id和name列中的数据和1,2合并类似

最后我们理解这个代码

SELECT * FROM user1 where id=-1 UNION SELECT 1,2,3

将user1表中id=-1列的内容和1,2,3合并,id=-1这一列显然是不存在的,所以就只会显示1,2,3

关键字:郴州北湖疫情最新情况_无锡企业建站程序_搜索优化师_厦门人才网最新招聘信息网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: