SQL注入攻击

概述

SQL注入:发生于应用程序数据库之间的安全漏洞。

简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。只要是支持批处理SQL指令的数据库服务器,都有可能受到此种手法的攻击。



出现原因

在应用程序中若有下列状况,则可能应用程序正暴露在SQL Injection的高风险情况下:

1.在应用程序中使用字符串联结方式或联合查询方式组合SQL指令。

2.在应用程序链接数据库时使用权限过大的账户(例如很多开发人员都喜欢用最高权限的系统管理员账户(如常见的root,sa等)连接数据库)。

3.在数据库中开放了不必要但权力过大的功能(例如在Microsoft SQL Server数据库中的xp_cmdshell延伸存储程序或是OLE Automation存储程序等)。

4.太过于信任用户所输入的数据,未限制输入的特殊字符,以及未对用户输入的数据做潜在指令的检查。

攻击原理

1.SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字符为不同命令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等的条件式)。

2.SQL命令对于传入的字符串参数是用单引号字符所包起来。(但连续2个单引号字符,在SQL数据库中,则视为字符串中的一个单引号字符)。

3.SQL命令中,可以注入注解(连续2个减号字符 -- 后的文字为注解,或“/*”与“*/”所包起来的文字为注解)。

4.因此,如果在组合SQL的命令字符串时,未针对单引号字符作转义处理的话,将导致该字符变量在填入命令字符串时,被恶意窜改原本的SQL语法的作用。

防护

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和

双"-"进行转换等。

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

注入示例

1.登入页面进行简单SQL攻击

用户名:' or 1=1 - -

密码:xxxx    //任意输入

假设登录页面如上所示

SELECT * FROM users WHERE username = 'admin' AND password = 'passwd'

假设的ASP代码为

var sql = "SELECT * FROM users WHERE username = ' " + formusr + " ' AND password = ' " + formpwd + " ' ";

当输入上面的用户名密码后实际的查询代码是:

SELECT * FROM users WHERE username = ' ' or 1=1 -- AND password = ' xxxx '

解释:--是单行注释提示符,上面的语句因为1=1导致SQL语句恒成立,所以可以登入后台

--也可以用#代替

不过这种sql注入方式现在的网站一般都有过滤 ,可行性不大。

2.URL修改参数进行注入攻击

这里使用一个SQL在线注入学习平台进行练习。闯关式训练,简单介绍less-1。

less-1

按照提示主键为"ID"

id=1

初步注入即在参数id后面加上一个单引号" ' ",查看结果

id=1'

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '  '1'  ' LIMIT 0,1 ' at line 1

即:'  '$id' LIMIT 0,1 '

由此返回语法错误信息可以判断sql提交语句为:

$sql = " select * from users where id = '$id' LIMIT 0,1 ";

由此提交语句可见 id = '$id',即把输入的'id'当做字符串处理,取从头开始的最长数字且类型转换为整形进行查询。

id=1a2c与id=1效果相同

后面还有各种类型的提交代码提供测试,这边就不一 一介绍了,点击网站地址练习。

3.借助工具进行注入攻击(Pangolin)

链接:pangolin3.2.4破解版百度云盘地址

提取码:dbd2

下载后直接解压运行即可。


软件界面

我自己用python搭建的网页环境注入效果如下:

注入效果

具体表数据也可以获取

相比于前两种,用工具更加节省时间,效率更高。

你可能感兴趣的:(SQL注入攻击)