web第29题
[GXYCTF2019]BabySQli
打开靶场:
源码:
一个简单的登录页面,首先直接尝试输入单引号’
报错,那必然存在sql注入
永真式进行登录
得到这个页面,在源码中发现一个像是加密后的数据,在解码器中进行解码尝试
得到base32解码出来的文本很像base64加密后的数据,进行二次解码
果然有发现,给出了查询的语句,从user表中查询username为表单中提交的用户名的数据,应该就是页面回显的内容
永真式登录失败说明做了过滤,尝试双写绕过
依然失败
直接fuzz一波:
相应为419的就是被过滤的,415的没有
得到一些被过滤的字符:or,xor,(,),=,oorr,floor(),rand(),information_schema.tables,concat_ws(),order,CAST(),format,ord,for等
并且发现用户为admin时返回的是wrong pass,也就是说admin可能就是我们需要的用户
尝试了很多的绕过依然没成功,做到这里思路已经不够了,看了一下wp
发现虽然order被禁了,还可以使用联合查询猜解字段数(呜呜这都没想到)
admin' union select 1,2 #
admin' union select 1,2,3 #
没报错!说明字段数为3
然后猜解usernmae是第几个字段
1' union select 'admin',2,3 #
提示用户错误,那说明username不在第一个字段
1' union select 1,'admin',3 #
提示密码错误,说明username就是第二个字段
做到这里的思路就是使用联合注入创建一条临时数据
参考这位佬的wp:[GXYCTF2019]BabySQli(联合注入添加临时虚拟用户)
payload:
name=1' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#&pw=1
意思是插入一条临时的数据admin,密码为md5加密后的1,然后密码为1,就会自动登陆上了
这题就当扩展知识面了