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

Posted misakayuii-z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户名和密码分开检验产生的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‘查询,就算是数据库中并没有这个数据,但是查询结果还是会返回结果。


技术图片

所以,我们这里可以构造用户名为 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三种试一试。

























以上是关于用户名和密码分开检验产生的mysql注入——[GXYCTF2019]BabySQli的主要内容,如果未能解决你的问题,请参考以下文章

15.Mysql中的安全问题

SQL注入

使用用户名和密码进行 SQL 注入

第四章SQL注入----

ChinaNet-q9GX无线网密码

1031课堂小结