继续写题。
这题看上去是一道sql注入题。F12查看后台代码。
可以看到后台有两个变量,分别是uname以及passwd。然后接下来读一下后台的代码,这里的意思是,如果用户输入的密码经过md5加密后,和通过select语句选出来的password相等,则输出“login success”,否则输出“login fail”。利用这里md5()条件语句,我们可以对后台的sql语句进行注入。
发包之后,这里后台的sql语句实际上就变成了"select password from gwuser where username ='-1' union select md5(1)#'"。接下来后台条件语句进行判断的时候,因为此时row['password']为md5(1),而发过去的包里面passwd亦等于md5(1),条件成立,所以页面会跳转到这样一个界面,如下图所示。
继续F12查看后台代码,如下图所示。
可以看到后台也有两个变量,分别是no和name。先尝试一下sql注入爆表,如下图所示。
成功爆出表名——“gwhts"。
而后继续爆行,如法炮制。不过接下来很快会发现报错,弹出"Attack!"。
检查过自身语句没有错误后,这时考虑到了后台对标点符号的过滤(本题亮点)。于是将? / . ' ` "等英文标点符号导入到burpsuit,一起发包,得到下图。
通过上面两张图我们可以发现,在输入name变量的时候, ' 被后台过滤掉了,而其他字符没有。于是sql注入语句应该要改为"no=-1&name= union select column_name from information_schema.columns where table_name="gwhts" limit 1,1#"。爆出行val。
最后爆出flag。如下图所示。