题目地址:http://ctf5.shiyanbar.com/web/wonderkun/web/index.html
一道登陆型的SQL注入题目,这种题目一般有四种题型:
1.在username中通过union联查select一个已知字符来与传递的password匹配完成登陆
2.使用万能密码登陆
3.通过SQL注入获取数据库中的账号密码然后登陆
4.通过SQL注入直接获取数据库中的flag
后台处理逻辑一般有两种:
1.同时使用两个字段值来查询数据库,错误回显一般是“用户名或密码错误”之类的统一报错
2.先使用username查询数据库得到password,再进行对比,错误回显一般是“用户名不存在”,“密码错误”之类的分开报错
先简单地试一下,发现无论提交的username为什么回显都会是“对不起,没有此用户!!”,虽然说这种错误回显一般后台会是第二种处理逻辑,但是在没有尝试出一个正确的username得到“密码错误”之类的错误回显时,还不能下结论。
所以可以直接使用万能密码,提交username='='&password='=',直接getflag
这里提一下另外一种解法,因为常用的or,||,union之类的关键词都被吃掉了的原因,这里使用的是异或字符^来进行确认的。
传入username=1\&password=^'1,如果后台是第二种处理逻辑,那么SQL语句就会是:
select ??? from ??? where username='1\' and password='^'1'
通过转义符\转义username的第二个单引号,在SQL运算中,会先进行异或运算。此时username的值为1\' and password=,而这个字符串跟1相等,异或为0,所以最后的SQL语句为select ??? from ??? where username=0,而0会匹配所有第一个字符不为数字的字符串。
结果:
getflag
the end