超简单的Sql注入之万能密码
发布网友
发布时间:13小时前
我来回答
共1个回答
热心网友
时间:12小时前
万能密码是一种针对网站登录页面安全漏洞的利用方式,它基于后台没有对用户输入数据进行验证的原理。由于输入的数据被视为合法,无论是否为管理员或非法入侵者,都可以成功登录。万能密码实际上是一种特定格式的账号密码,不涉及真正账号,而是利用SQL注入的手段,通过在查询语句中添加特定参数,绕过正常验证机制,从而获取所有账号和密码。
常见的登录语句形式为:
select * from user where username='输入值1' and password='输入值2'
或者是:
/check.php?username=输入值1&password=输入值2
在进行注入时,会添加额外的参数,使查询语句变成:
select * from user where username='a' or true#' and password='pass'
其中,#在SQL中为注释符,其后内容不起作用。因此,实际执行的SQL语句为:
select * from user where username='a' or true
这里的or true使SQL语句恒成立,查询出所有账号和密码,实现非法登录。除了#之外,SQL中还有--作为注释符,不过它与注释内容之间必须间隔一个空格。
拼接到SQL中大致为:
select * from user where username='a' or true -- a' and password='pass'
在SQL中,非布尔类型数据参与比较运算时会转化为布尔类型。例如,or 1 或者or 1=1,转化为布尔类型true,然后参与或运算,即or true,使条件恒成立,成功登录。
简单来说,万能密码可以表示为:a' or 1 # 或者 a' or 1=1 #,等同于a' or true #。
在登录界面输入万能密码,如admin’ #后,后端将参数添加至SQL中,执行如下:
select * from user where username='admin' #' and password='pass'
由于#为SQL注释符,其后内容无效,实际执行的SQL为:
select * from user where username='admin'
SQL仅在数据库中查询用户名,而非同时查询用户名和密码。因此,只要用户名正确,即可成功登录。