1、题目研究
看题很明显的SQL注入,做题时习惯看源码但什么都没有发现。
所以尝试闭合方法,随便输入1、1'、1''密码随便输入即可。
当输入1和1''时会出现以下的提示,
但输入1'时会报错,所以语句为单引号闭合。
2、万能用户名/密码
既然知道了是单引号闭合,现在就尝试注入,首先了解一下万能用户名和密码。
一般的,库验证登录注册查询数据会用到以下的句型,如果用户与密码匹配正确则返回真值通过验证成功登录。
select * from table_name where username='×××' and password='×××';
2.1、万能用户名
如果不匹配数据库也能返回真值那么就能绕过验证登录(万能用户名)。如果我们传入的username为1' or 1=1 #,随便输入password,那么传入后端验证时SQL语句为
select * from table_name where username='1' or 1=1 # ' and password='xxxxxx' ;
注:因为SQL语句中#为注释符,那么SQL语句为:
select * from table_name where username='1' or 1=1
因为1=1恒为真,所以SQL语句返回真值,成功绕过验证得到flag
2.2、万能密码
同样的万能密码同理
当传入1' union select ××,××,××,database()#
注:union为联合查询多张表,××,××,××为两张表查询字段的数量
当尝试输入时1' union select 1,database()#会出现提示,字段数量不一致
所以尝试输入1' union select 1,2,database()#时会得到flag