SQL注入攻击的原理与防范

来源:互联网 发布:算法 第四版 pdf 编辑:程序博客网 时间:2024/04/30 21:17

一、SQL注入攻击

SQL注入(Structured Query Language Injection)技术在国外最早出现在1999年,我国在2002年后开始大量出现,目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述:

(1)脚本注入式的攻击

(2)恶意用户输入用来影响被执行的SQL脚本

我理解的SQL注入,就是攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到让后台数据库执行恶意的SQL命令的目的,并根据程序返回的结果,获得某些攻击者想得知的数据。

二、SQL注入的隐患

1、 随着B/S(浏览器/服务器)模式应用开发的发展,从事动态网页以及脚本编程的程序员越来越多,在一段不长的时间里,新手往往就已经能够编出看来比较完美的动态网站,在功能上,很容易就能实现。但是因为程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候存在漏洞,给攻击者提供便利条件。

2、系统对用户输入的参数不进行检查和过滤,没有对用户输入数据的合法性进行判断,或者程序中本身的变量处理不当,使应用程序存在安全隐患。

3、因为SQL注入主要是针对web应用程序提交数据库查询请求的攻击,与正常的用户访问没有什么区别,所以能够轻易的绕过防火墙直接访问数据库,甚至能够获得数据库所在的服务器的访问权限。


三、注入的主要危害

1、未经授权状况下操作数据库中的数据,比如管理员密码,用户密码等信息;

2、恶意篡改网页内容,宣传虚假信息等;

3、私自添加系统帐号或者是数据库使用者帐号;

4、网页挂广告、木马病毒等;

5、上传webshell,进一步得到系统权限,控制电脑.获得肉鸡。

6、……


四、注入实现原理

SQL 注入攻击技术就其本质而言,它利用的工具是SQL的语法,针对的是应用程序开发者编程中的漏洞,当攻击者能操作数据,向应用程序中插入一些SQL语句时,SQL注入攻击就发生了。

攻击者直接将代码插入与 SQL 命令串联并执行的用户输入变量中,间接的将恶意代码注入要在表中存储或作为元数据存储的字符串,在存储的字符串随后串连到一个动态 SQL 命令中时,执行该恶意代码。

SQL注入攻击是存在于常见的多连接的应用程序中的一种漏洞,攻击者通过在应用程序预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。这类应用程序一般是Web应用程序,它允许用户输入查询条件,并将查询条件嵌入SQL 语句中,提交到数据库中执行。通过构造畸形SQL语句攻击者能够获取额外的信息数据。

五、注入攻击过程

进行SQL注入时一般会用到两种方式,第一是手工注入,第二是工具注入。我了解到的对于猜解管理员的密码方面一般用Pangolin或者NBSI ,找后台一般用明小子,啊D。其总体思路是:

(1)扫描目标网络信息(判断是否存在SQL注入漏洞);

(2)判断后台数据库类型;

(3)发现WEB虚拟目录

(4)上传ASP木马;

(5)得到管理员权限。

详细介绍如下:

1、SQL注入一般存在于形如:http://xxx.xxx.xxx/abc.asp?p=YY的网站中。

2、在http://xxx.xxx.xxx/abc.asp?p=YY 后面追加“and 1=1”,并访问该网址即http://xxx.xxx.xxx/abc.asp?p=YYand 1=1 应该与访问原地址得到的结果相同。

3、在http://xxx.xxx.xxx/abc.asp?p=YY 后面追加“and 1=2”,并访问该网址即http://xxx.xxx.xxx/abc.asp?p=YYand 1=2应该与访问原地址得到的结果不同,并提示数据库错误。

(2,3同时满足则此网站必定存在SQL漏洞,可以进行sql注入攻击。)

4、访问http://xxx.xxx.xxx/abc.asp?p=YY and exists (select * from 网站数据库常用表段名)

网站数据库常用表段名:admin users administrator 等,如果进入的网页像步骤二一样,是正常网页,证明存在该表段名。找寻该SQL数据库使用的表名,进而寻找网站的管理员名、密码等信息。

5、访问http://xxx.xxx.xxx/abc.asp?p=YY and exists (select [网站数据库常用字段名] from 第4步找到的可入侵表名)

网站数据库常用字段名:admin password username 等,如果进入的网页像步骤2一样,是正常网页,证明存在该字段名。找寻该SQL数据库使用的字段名,进而寻找网站的管理员名、密码等信息。

6、访问http://xxx.xxx.xxx/abc.asp?p=YY and exists (select *from第4步找到的可入侵表名where第5步找到的可入侵字段名like '_ ‘)

7、访问http://xxx.xxx.xxx/可入侵后门字段名,找到网站后门。

8、利用从数据库中查到的敏感数据进入网站后


六、SQL注入实例演示

利用Pangolin工具实现针对MS SQL环境的SQL注入攻击。

1. 在本地主机上通过Internet Explorer等Web浏览器访问目标Web服务器(即Windows Server A,IP地址为192.168.1.103)的主页。

点击其中的某一新闻链接后即访问显示出具体的某一新闻内容。比如http://192.168.1.103/news.aspx?id=1

2. 在访问的网页URL地址后加上一个单引号(')继续访问,

即http://192.168.1.103/news.aspx?id=1',如下图所示:

从图中可以看到数据库连接出错消息中可以看到如下错误消息“字符串 ''  之前有未闭合的引号。”,也就是单引号没有闭合的意思。

3. 继续手动测试SQL注入是否存在:访问如下网页URL地址: 

http://192.168.1.103/news.aspx?id=1 and 1=1

以及

http://192.168.1.103/news.aspx?id=1 and 1=2

其中访问第一个网页地址的情况与正常情况相同,而访问第二个网页地址则一片空白,即新闻文档不存在的意思。

4. 进入实验工具目录,双击运行Pangolin程序(pangolin.exe),在注入地址“URL”输入框中输入http://192.168.1.103/news.aspx?id=1

然后点击工具栏中的开始按钮开始自动检测SQL注入漏洞情况。从检测结果中可以看到,该网站的SQL注入类型为“Integer(字符型)”,后台数据库类型为“MS SQL with Error”。

5. 在主界面中的“Information”选项卡中,点击“Select All”按钮选择所有信息类型,包括下面所列举的“Version”、“Db Name”、“Server Name”等,然后点击“Go”按钮开始探测目标服务器的基本信息。

6. 在主界面中选择“Data”选项卡,点击左下方的“Tables”按钮来枚举目标当前数据库中存在的所有数据表的名称。

7. 点击选择数据库中的“admin”表,然后点击下方的“Columns”按钮来枚举该数据表中所有的数据列名。展开“admin”表前面的“+”号可以查看详细的列名信息。

8. 勾选感兴趣的数据表以及其中的数据列,如admin表中的id、username以及password列,然后点击右侧的“Datas”按钮则可以枚举该表中的所有数据项内容。在这里,我们还可以通过自定义查询条件来自定义查询所感兴趣的数据内容,默认为“1=1”表示所有的数据内容。

9. 在主界面中选择“Command”选项卡,然后在“Command”输入框中输入要在目标服务器上执行的系统命令,比如“ipconfig”等;在“Type”下拉框中选择执行命令的技术方法,默认为“xp_cmdshell”,其他可选的主要方法有“sp_oa***”等。最后点击右侧的“Execute”按钮执行命令,可在下方的黑色文本框中看到执行结果。

10. 选择“type”为“sp_oa***”,尝试执行添加用户的命令操作。

 

11. 在主界面中选择“Dir Tree”选项卡,然后点击“Drivers”按钮列举目标服务器上的所有驱动器。双击“C:\”节点可以进一步展开获得C:\根目录下的所有子目录和文件,依次可以获得磁盘上的目录结构。

12. 双击某一文件,可以在右侧的文本框中显示文件的详细内容。

13. 仔细查看“C:\inetpub\wwwroot”目录中的网站文件,获得连接后台MS SQL数据库的账号和密码。

 

七、注入攻击的防范


 jsp   sql注入方法请阅读:http://blog.csdn.net/langjian2012/article/details/40260815


 jsp   sql注入方法请阅读: http://blog.csdn.net/xdfwsl/article/details/708488sap

0 0