btslab PHP SQL注入,btslab全攻略——注入之sql注入认证

之前做btslab的时候就想找篇完整教程来对照学习的,可是发现网上只有xss部分,并无完整攻略,所以就自己单独完成了btslab,整体感觉还是比较容易,不过对于新手还是很不错,可以学到很多漏洞知识与代码审计,为了造福刚入门或是想入门的新手,我打算开始出一系列教程,全面介绍btslab(尊重作者劳动成果,转载需注明出处,否则必究)

认证

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

admin

'or'1'='1

716f66333ba91bd65637fa537edbc9dc.png

56c922bcac18cecc9a4981a9a6c00185.png

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

首先我选择的是密码框作为注入点,注意到我用了单引号,不用说你们肯定明白了这里是字符注入(为什么?因为前篇教程中的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语句#或-- -后面的内容舍弃,最终执行的语句便是

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

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

可能有人想问账号框可以注入吗?当然可以,而且更容易

账号只需要填admin'#或者admin'-- -,密码为空,便能直接登录

16ffd2ca45b85e69f3546c738e6b2d01.png

后台构造的语句便是

select * from users where username='admin'

当然注入方式还不止这些,不过我既然已经授人以渔,想必大家都能触类旁通,自己再试试构造吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值