zl程序教程

您现在的位置是:首页 >  前端

当前栏目

 btslab全攻略——注入之sql注入认证

注入认证SQL 全攻略
2023-09-11 14:17:06 时间

 btslab全攻略——注入之sql注入认证

 

认证

打开是一个login界面,第一想到的便是万能密码,所以测试

admin 

'or'1'='1

轻而易举登录成功了,当然不能由此沾沾自喜,浅尝辄止,我们知其然也必要知其所以然。

首先我选择的是密码框作为注入点,注意到我用了单引号,不用说你们肯定明白了这里是字符注入(为什么?因为前篇 教程中的get提交的参数id是一篇文章的索引,这个索引直接用数值型变量就可表达,但是这里的密码框需要的是一串字 符,所以肯定只能是字符型注入)。

那为什么我单引号要放在or前面,第一个1的两边,和第二个1的前面呢,因为我猜想后台的sql语句判断密码的时候类似 这样

select * from users where username='admin' and password='$password' 

如果我提交'or'1'='1,那么第一个单引号将闭合原sql语句的引号,第二三个单引号是代表1这个字符,最后一个1字符为

什么只有前面有引号?因为原sql语句本身后面就有一个引号,完整构造出来就行

select * from users where username='admin' and password='' or '1'='1' 

这里由前向后结合,所以可以这样看

select * from users where (username='admin' and password='') or ('1'='1') 

当然第一个括号里条件不会成立,因为admin账号的密码不为空,但是第二个成立了,'1'当然等于'1',所以整个sql语句

成立,登录便成功 由此我们还可以构造很多其他语句达到同样的效果,比如

admin 'or 1#

admin 'or 1=1#

admin 'or 1-- -

这几个个原理差不多(补充一下,#和-- -(中间有个空格)在mysql中是注释,会注释掉后面所有内容),因为有了注 释,所以sql语句#或-- -后面的内容舍弃,最终执行的语句便是

可能有人想问账号框可以注入吗?当然可以,而且更容易 账号只需要填admin'#或者admin'-- -,密码为空,便能直接登录

select * from users where username='admin' and password=''or 1 select * from users where username='admin' and password=''or 1=1

select * from users where username='admin'