mysql账户分离_用户名和密码分开检验产生的mysql注入——[GXYCTF2019]BabySQli

题目已经提示了是SQli,题目是一个登陆界面,需要用户输入用户名和密码进行登陆。

首先我们可以看到返回密码错误的页面源码里有一串字符串,我们先用base32再用base64解密之后发现是mysql查询规则 select * from user where username = ‘$name‘

进行常规mysql注入,发现1‘ union select 1,2,3#不会报错,说明表中有三个字段。又因为查询规则中提到有username这个字段,所以盲猜user表中包括id、username、password这三个字段。

由于题目存在过滤,我无法通过注入的方法获得表中的字段数据,所以我无法拿到准确的admin的密码。但看其他师傅说这题的考点在于用户名和密码分开检验,也就是说它是先检验username,把username对应的所有字段都查出来后,再检验密码能不能和查出来的密码对上,检验密码的过程可能会有一个md5的加密(不过我是真的不知道为什么能判断会有md5加密,大概是经验?)。

这里涉及到一个新的知识点。select * from user where username = 1 union select 1,‘admin‘,‘123‘查询,就算是数据库中并没有这个数据,但是查询结果还是会返回结果。

20200705134540431301.png

所以,我们这里可以构造用户名为 1‘ union select 1,‘admin‘,md5(‘123‘)# ,然后在密码处输入123就可以实现注入。

123的MD5结果为:202cb962ac59075b964b07152d234b70

所以最终结果为:1‘ union select 1,‘admin‘,‘202cb962ac59075b964b07152d234b70‘#

这里的123可以替换成abc等任何值,只需要输入相应的md5值就可以了。

补充:

通过这种方法检索出来的账号密码都是我们控制的。

字段一般都是id、username、password这种顺序。

加密方式可以mysql、mysql5、md5三种试一试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值