[GXYCTF2019]BabySQli 题解


看起来像sql注入,输入1' 1发现页面报错

确定是字符型注入,闭合符为',构造一个payload看下

1'union select database()'#

似乎是被拦截了,用burpsuite的Intruder模块跑一下sql字典,找找黑名单关键字

)和(被过滤掉了,有点头大,不太能用报错注入了。

抓下burpsuite的包看看有没有什么信息

发现响应报文里有一段奇怪的乱码

全是大写字母和数字的组合,看起来像是base32编码,解码后发现还是base64编码,是个二次加密,继续用base64解码

在提示我们本题的注入点在name输入框,没什么大用,因为我习惯name和password同时进行注入 ╮(╯▽╰)╭

回到题目页面,盲猜用户名为admin,密码为1,登录试下

用户名没错,密码错误,这里需要补充一个前置知识点:联合查询并不存在的数据时,联合查询就会将当前查询的数据临时加到数据库中,生存周期(大概是)当前查询。

测试下查询的字段数

1'union select 1#
1'union select 1,2#
1'union select 1,2,3#

1和1,2都报错Error: The used SELECT statements have a different number of columns,1,2,3的时候正常,得知字段数为3。接下来试下哪个是对应的表中的username字段

1'union select 'admin',2,3#
1'union select 1,'admin',3#
1'union select 1,2,'admin'#

第二个语句提示wrong pass,得知第二个字段对应的是username

有了这两个前提,我们就可以在name输入框中构造联合查询,用户名为admin,密码直接随便写,然后在password输入框中输入name中的密码,通过检验。name=1查询到的是空集,自然就会使用select的那三个参数继续进行查询。

构造payload试下:

name:1'union select 1,'admin','123456'#
password:123456

试了好几次都是提示wrong pass.....无语了,只好去读下buu平台提供的题目源码,发现密码传入后在对比前有个md5加密的过程

重新构造payload

name:1'union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#
password:123456

成功拿到flag

以上

声明:大K|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - [GXYCTF2019]BabySQli 题解


I'm scared this is all i will ever be...I feel trapped in my own life...I think i've figured it out but in reality i'm as lost as ever...I wish i could choose the memories that stay...please,stay.