1、万能用户名/密码
一般的,库验证登录注册查询数据会用到以下的句型,如果用户与密码匹配正确则返回真值通过验证成功登录
select * from table_name where username='×××' and password='×××';
2、在该题目中使用,select * from table_name where username='1' or 1=1 # ' and password='xxxxxx' ; #为注释符,因而传入后台的是 select * from table_name where username='1' or 1=1 (因为1=1恒为真,所以SQL语句返回真值,成功绕过验证得到flag),则可返回真值。
3、万能密码的原理:
select * from table_name where username='xxxx' and password='xxxx',这是查询数据库可能会用到的句型,因为这道题是基于sql单引号的注入,我们构造万能密码,#在sql注入中是注释符用or连接,因为1=1恒真,假或真=真,真或真=真,所以这个语句恒成立,1’ or 1=1 #嵌入到语句中就是select * from table_name where username='1' or 1=1 # ' and password='xxxx',万能密码绕过直接在用户名或者密码区输入 1' or 1=1 # 得到flag。
4、在该题目中,如果不匹配数据库也能返回真值那么就能绕过验证登录(万能用户名)。如果我们传入的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。