前言

刚经历了回家的奔波,为了慢慢过度到学习的状态来,就开始刷一些题,在做的时候发现这个题对我来说是个陌生有熟悉的知识,在此总结一下。

题目

题目非常单一, 随便输入几次后,发现admin是它的用户名,但密码怎么也试不出来,接着就用order by来爆出字段数,主要思路通过联合查询注入。最后出现了一串报错信息。猜想可能是某些关键词被过滤了,看了师傅的文章才发现是or关键词被过滤。查看网页源代码发现一串奇怪的编码。

用base家族一顿乱解。发现base32可以解码成功。

一看就是base64了。解码得到的是select查询语句,应该是题目中给的提示。

这个后端查询语句说明是先通过查询用户名再进行密码的判断。既然or关键词被过滤了,那我们就一个个试,猜测有两个字段。1' union select 1,2# 结果出现了报错信息。接着猜测三个,出现了wrong user!由此就可认为有三个字段。知道了字段数,下一步就要知道用户名是在哪一个字段,之前试出来是admin,那就每个字段就试一遍。1' union select 1,'admin',3# 测试第二个回显点出现wrong pass!,说明第二个回显点是用户名,那么回显点依次就是id username passwd。

本题的关键点:当联合查询不存在时,联合查询就会创造一个虚拟的数据。但只适用于这次查询。其实这个大家都不陌生,在我们打靶场时,回显出来的2,3就是union创造的一个虚拟的数据。它

 随着select查询数据变化而变化。那么这题思路就清晰了,我们可以在用户名查询不存在的密码,来生成一个虚拟的密码,然而这个密码是我们可控的,就可以成功登录了。

但是还是出现wrong pass! 那这样的话,数据库的密码应该就是以md5储存。union联合查询创建的虚拟数据写进数据库,没法md5加密,而输入的passwd可能会在后进行md5加密进行判断,所以我们只需要将select中查询的密码md5加密,1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#    (123进行md5加密得到)

密码输入123登录成功,得出flag。

结语

题目总体来说不是太难,但往往就是一些基础的知识是我们最容易忽略的,所以一定要稳扎稳打,不要好高骛远。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐