Injection Flaws

什么是sql注入?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。假如我们有一个users表,里面有两个字段usernamepassword。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如:"select id from users where username = '"+username +"' and password = '"  + password +"'" 这里的usernamepassword都是我们存取从web表单获得的数据。下面我们来看一下一种简单的注入,如果我们在表单中username的输入框中输入' or 1=1-- password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了select id from users where username = '  or 1=1--  and password = '123',我们来看一下这个sql,因为1=1true,后面 and password = '123'被注释掉了。

 

实践Injection Flaws 的过程

Command injection

 

 

Blind SQL injection

需要用到以下两个函数

同理得到第三,第四,第五,第六个字符分别为esph,即得到用户名Joesph

Numeric SQL injection

 

以下是没有截获请求的情况,只有一个城市显示

注入SQL代码,or 1=1

以下是攻击成功的情况

Log Spoofing:

每个 SQL 数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。这里就是通过修改日志文件以达到欺骗的目的。利用日志的格式,使用换行等字符,欺骗管理员。

 

打开日志欺骗的页面,演示要求将一个普通的用户提升到管理员权限

XPATH injection

XPath 注入,攻击者利用Web 应用对用户提交的参数过滤不严的漏洞,提交经过构造的参数,这些参数能够被注入到XPath 查询语句中,获得权限信息的访问权并在此基础上更改这些信息。适用于使用XML 文档存储数据的Web 应用系统。

String expression =/emplouees/employess[loginId/test()=usernameand passwd/text()=passwd]’”

 

LABSQL injection

目的:使用字符串注入绕过认证,使老板neville没正确密码也可以获取修改权限。

 

为了防止以上的SQL注入攻击,可以采用“参数化查询”。这种类型的查询可以是的用户的每一个输入可以作为一个参数使用,找到org.owasp.webgoat.lessons.SQLInjection.Login.

java中的代码进行修改。找到如下代码

重复步骤一,发现登陆失败

用普通用户登陆,用户名密码都是larry,然后点击查看信息

String SQL Injection:

Database Backdoors

数据库的使用通常作为一个后端应用程序。它是用来作为存储媒体。它也可以被用来作为一个地方来存储一个恶意活动,作为一个触发。触发器是由数据库管理系统在执行另一个操作数据库的选择,插入,更新或删除。通过建立数据库后门,以便获取数据库中储存的用户信息,达到控制的目的。

 

所以我们可以添加一个触发器

CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid

窗体顶端

就是把所有新注册的用户的email地址改成john@hackme.com

 

 

 

 

举例说明防止SQL Injection Flaws 的方法

1.对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。这样用户注入不法字符是就会被过滤掉,防止被攻击

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。对于java数据库连接JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。因为管理员的操作数据库的权限过大,若是被不好心的黑客取得这种权限,有可能整个数据库都会被删除,损失会很惨重

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。这样就算得到的信息去解密也会有难度的

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。这样黑客就无法对症下药

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值