二次注入——sqli-labs第24关

第24关

提示说:please login to continue,请登录以继续。
没有账号怎么登录?
当然是选择注册
在这里插入图片描述

盲猜会有个admin的账号,所以注册一个admin '#的账号。密码是12345

在这里插入图片描述
(上帝视角)此时数据库里admin的密码是admin
在这里插入图片描述

登录刚刚注册的账号
在这里插入图片描述

然后为admin '#修改密码为123
在这里插入图片描述
修改成功(此时真的是修改admin '#的密码吗)
在这里插入图片描述

(又一次上帝视角)进入数据库,发现admin的密码成了123,而admin '#的密码并没有重置

在这里插入图片描述

原理

这就是二次注入,它的原理是:

1)后端(PHP)代码对语句进行了转义

(2)保存进数据库(mysql)时没有转义,是原语句

简而言之就是数据库对自己存储的数据非常放心,而用户恰恰向数据库插入了恶意语句。

解析

比如前面所注册的admin '#账号,在注册时,后端对其进行了转义( addslashes() 或者mysql_real_escape_string和mysql_escape_string 等),'#被转义成了其他的东西,所以一次注入无效。
但是在保存进数据库的时候,还是admin '#

那么修改密码时的语句如下:

update users set  password='123' where username='admin '#'

所以你以为修改的是admin '#的账号,但是数据库理解成要修改密码的账号是admin

防范

至于如何防范二次注入也很简单:
一碗水端平,后端进行了转义,数据库也同样进行转义。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值