看起来像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
以上
Comments | NOTHING