攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当做SQL语句执行,从而影响数据库安全和平台安全。
需要具备两个条件:
通过在用户名处传入参数 ' or 1 = 1 -- 进行万能密码登录
SELECT username, password FROM users WHERE username='输入值' or 1=1-- ' AND password='输入值2'
(注意: -- 后面有一个空格)
此时,输入字符为:
实际查询代码为:
SELECT * FROM users WHERE username= ' ' or 1=1 -- AND password = 'anything'
判断一个HTTP请求是否存在SQL注入的方式
and1=1 ; and 2>1 ; or 1=1 ; or 1<1
sleep(4)=1 ;length(user())>3
单引号( ' ) ; 双引号( " )
输入的参数为整数,如ID、年龄、页码等,如果存在注入型漏洞,则为数字型(整型)注入。
http://www.testweb.com/user.php?id=8
实际查询代码原型诸如:
select ... from ... where id=$id ..
注入测试方法:
一般输入的参数为字符串类型,与数字型注入的区别在于,字符型注入一般要使用单引号来闭合。
http://www.testweb.com/test.php?user=admin
实际查询代码原型诸如:
select ... from ... where id='$id' ...
字符型注入测试方法:
这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 " keyword=关键字 " ,有的不显示链接地址,而是直接通过搜索框表单提交。
此类注入点提交的 SQL 语句,其原型大致为:
select * from 表名 where 字段 like '%关键字%'
当我们提交注入参数为 keyword= ' and查询条件 and '%'=' ,故向数据库提交的SQL语句为:
select * from 表名 where 字段 like '%' and [査询条件] and '%'='%'
动态字符串构建引起
后台存在的问题
错误处理不当
不安全的数据库配置
SOL Server使用 "sa" 作为数据库系统管理员账户 ;
MySQL使用 "root" 和 "anonymous" 用户账户;
Oracle则在创建数据库时通常默认会创建SYS、SYSTEMS DBSNMP和OUTLN账户。
系统和数据库管理员在安装数据库服务器时允许以roots SYSTEM 或 Administrator 特权系统用户账户身份执行操作,应该始终以普通用户身份运行服务器上的服务,降低用户权限,将用户权限只限于本服务。
?text=value1&cat=value2&num=value3....
POST是一种用于向Web服务器发送信息的HTTP方法数据信息无法在URL中看到可以发送字节大的数据。
只要后台接收前端输入的数据,并且未对数据进行过滤处理,最后直接进入到数据库中,从而都能构成威胁。
基于联合查询(unionselect)的注入方法。
(1) SQL注入工具: Sqlmap 、Havij 、Sqlid
(2) ASP\JSP注入工具:NBSI 、 明小子注入软件、 阿D注入软件
(3) PHP注入工具 : 穿山甲注入软件 、 海阳顶端注入软件
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。