终于,我的课程开始讲SQL注入了,对就是那个常年在OWASP上有名的SQL注入
今天是真的冷啊,幸苦的小编还在写csdn? ? ? ? ? ? ? ??
SQl注入其实就是将恶意的代码向服务器提交,但是后端又不过滤而引发的漏洞!!比如:
select * from security where username="admin"and password="password"
这个句子就是在向security的表中查找username是admin&&password是password所对应的数据
其中admin 和 password是外界传入的参数,像这样:
? ? ? ? ? ? ? ? ??
那如果我们传入恶意参数呢??😊😊 如?admin ' or 1=1 --+ 那么此时的代码是不是就变成了
select * from security where username="admin" or 1=1 --+ password="";
相信可以看出来这里就算不知道账号密码也能进行查询 ,来解释一下这行代码
SQl注入可以分为以下两种类型
? ? ? 2. 按照返回结果
今天就先来讲讲第一类
字符型 比如要求我们输入用户名,这种就是字符型 基本格式:
select * from security where username="zhangsan";
这时候我们的检测方法可以有
select * from security where username="zhangsan' ";
很显然最后一个 " 没有闭合 那么就会报SQL?syntax errors 或者页面发生改变
select * from security where username="zhangsan" and '1'='2';
这样也是会发生和上面一样的的情况
然后就是数字型注入的检查,相对于字符型就不用考虑这么多了
select * from security where id=1 and 1=2;
这样就会发生报错,但是还有一种检测数字型注入的方法?
就是字符型注入,如果1/1不报错,但是1/0报错,说明进行了数学运算,就是数字型注入
这个函数的用法
如果在使用 EXTRACTVALUE
函数时出现错误,MySQL 将返回 NULL
值,并且可能会生成一个警告
有意思的就是这个警告,他会返回你的一些函数的报错和NULL,上案例!!!
select extractvalue(1,concat(0x7e,(select user()),0x7e));
?这句代码的意思就是将~select user()~当作路径查询(0x7e是~的十六进制编码),因为~在xpath的语法中式不存在的,所以就会报错,并且执行select user()
这个和上面的extractvalue差不多
还是从Xpath下手,就是酱紫~~~
补充,这里为什么要~~来显示呢,完全可以直接select current_user()对吧? ? 哈,那肯定是有原因的!!!!
这个返回值最大长度是32,如果实际中的返回值大于32呢?
那就要这样查询了
select updatexml(1,substr(concat(0x7e,(select current_user()),0x7e),1,32),1);
通过控制返回值的长度,如果太长了,那就再输入一次将1改为33就是了
这个函数就是用来判断参数2是不是参数1的子集,如果不是就报错返回false,并且执行参数一
那就:(这里的版本要比5.5高哦)
select gtid_subset(user(),1);
以上就是第一节SQL注入课程的知识点整理了!!!(真好,这就一点了😭😭😭)
?????????????????????????????????????????????????????????????