1.SQL注入的概念
SQL注入 (SQL Injection):通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
首先让我们了解什么时候可能发生SQL Injection。
假设我们在浏览器中输入URL www.sample.com,由于它只是对页面的简单请求无需对数据库动进行动态请求,所以它不存在SQL Injection,当我们输入www.sample.com?testid=23时,我们在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),所以我们可以该URL中嵌入恶意SQL语句。
2.SQL注入的安全隐患
一旦应用中存在sql注入漏洞,就可能会造成如下影响:
- 数据库内的信息全部被外界窃取。
- 数据库中的内容被篡改。
- 登录认证被绕过
- 其他,例如服务器上的文件被读取或修改/服务上的程序被执行等。
3. SQL注入产生的过程
如果一个网站使用数据库来存储用户登录信息,并执行如下的SQL语句进行登录尝试: select * from users where username='farmsec' and password='123456'
在这种情况下,攻击者可注入用户名或密码字段,以修改应用程序执行的查询,从而破坏它的逻辑。例如攻击者知道应用程序的username为farmsec,那么他就可以通过提交一下用户名和任意密码,以管理员的身份登录: farmsec' --
应用程序将执行以下查询: select * from users where username='farmsec' --' and password='sadfas'
于是乎这个查询完全避开了密码检查。
这也引出了经典的万能密码问题。
有些网站的登录页面其背后的逻辑就是上文中的语句。
我们可以在密码部分注入:'or 1=1 --
那么整个句子就变成:
select * from users where username='farmsec' and password=''or 1=1 --
因为1永远等于1,登录验证就会被绕过。
一些常见的万能密码形式:
'or'='or' admin'-- admin' or 4=4-- admin' or '1'='1'-- "or "a"="a admin' or 2=2# a' having 1=1# a' having 1=1-- admin' or '2'='2 ')or('a'='a or 4=4--
4.SQL注入的分类
SQL注入根据不同的分类方法会有多种类别。但依照最大的区别特征而言,主要分为显注和盲注两类。
显注是指,当攻击者拼接SQL语句注入时,网站会把SQL语句的执行结果显示在网页上。
盲注与显著相反,网站不会把SQL语句的执行结果显示出来。盲注还分为时间性盲注和布尔型两者,这会在后文中详述。
5.SQL注入案例
5.1 显注案例
登录访问DVWA,默认用户名:admin密码:password,登录之后,将dvwa的安全级别调成low,low代表安全级别最低,存在较容易测试的漏洞。 1、找到SQl Injection 选项,测试是否存在注入点,这里用户交互的地方为表单,这也是常见的SQL注入漏洞存在的地方。正常测试,输入1,可以得到如下结果
标签:语句,--,kali,数据库,漏洞,SQL,admin,注入 From: https://www.cnblogs.com/Cong0ks/p/16613183.html