《SQL注入式攻击原理及防范(共5页).doc》由会员分享,可在线阅读,更多相关《SQL注入式攻击原理及防范(共5页).doc(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上SQL注入式攻击原理及防范 【摘 要】本文介绍了SQL注入式攻击的原理,结合实例阐述了SQL注入式攻击的方法,并从代码层和平台层探讨了SQL注入式攻击的防范。 【关键词】SQL;注入式;攻击 1. SQL注入式攻击的原理 进行SQL注入时一般会用到两种方式:第一是手工注入,第二是工具注入。对于猜解管理员的密码方面一般用Pangolin或者NBSI ,其总体思路是1:(1)扫描目标网络信息(判断是否存在SQL注入漏洞);(2)判断后台数据库类型;(3)发现WEB虚拟目录;(4)上传ASP木马;(5)得到管理员权限。 详细介绍如下: (1)SQL注入一般存在于形如:htt
2、p:/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=YY and 1=1 应该与访问原地址得到的结果相同。 (3)在http:/xxx.xxx.xxx/abc.asp?p=YY 后面追加“and 1=2”,并访问该网址即http:/xxx.xxx.xxx/abc.asp?p=YY and 1=2应该与访问原地址得到的结果不同,并提示数据库错误。(2,3同时满足则此网站必定存在SQL漏洞,可以进行sql注入攻击) (
3、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 等,如果进入
4、的网页像步骤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)利用从数据库中查到的敏感数据进入网站后门。 2. SQL注入式攻击的简单实例 这里我们举一个比较常见的例子来简要说明一下sql注入的原理。假如我们有一个users表,里面有两个字段username
5、和password。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如: select id from users where username = +username + and password = + password + 这里的username和password都是我们存取从web表单获得的数据。下面我们来看一下一种简单的注入,如果我?在表单中username的输入框中输入 or 1=1- ,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了 select id from users where username
6、= or 1=1- and password = 123,我们来看一下这个sql,因为1=1是true,后面 and password = 123被注释掉了。所以这里完全跳过了sql验证。 3. SQL注入式攻击的防范 从存在的实际情况来看,包括Web服务器管理员、数据库服务器管理员、数据库设计员、代码程序员在内的所有工作人员都是防御体系的关键。 从Web应用程序的开发、部署、管理、维护多个方面进行审查,使程序SQL注入了漏洞最小化。我们从代码层和平台层两个方面来阐述SQL注入攻击的防御。 3.1代码层防御 从Web数据库管设计员和编写代码的角度来研究SQL注入攻击防御的。 (1)使用参数化语
7、句。前面讲过动态字符串构造是引发SQL注入漏洞的原因之一。作为一种更加安全的动态字符串构造方法,大多数现代编程语言和数据库访问API可以使用占位符或绑定变量来向SQL查询提供参数(而非直接对用户输入进行操作)2,这些通常称为参数化语句内容是更安全的方法,可以使用它们来避免或解决很多在应用中经常见到的SQL注入问题,并可以在大多数常见的情形中使用它们来替代现有的动态查询。不过,值得注意的是,参数化语句是与一种向数据库提供潜在的非安全参数(通常作为查询或存储过程调用)的方法。虽然它们不会修改传递给数据库的内容,但如果正在调用的数据库功能在存储过程或函数中使用了动态SQL,则仍然可能出现SQL注入。
8、 (2)输出编码 。处理验证应用受到的输入以外,通常还需要对在应用的不同的模块或部分间传递的内容进行编码。在SQL注入语境中,将其发送给数据库的内容进行编码或“引用”是必要的操作,这样可以保证内容被正确地处理。如有必要对包含字符串中的单引号进行编码,可以使用两个单引号替换单个单引号的方法来实现编码的目的,从而有效阻止恶意用户在特定的查询中利用SQL注入,可以使用与下面类似的代码在java中实现该目的: Sql=sql.replace(“ “, “ “);。 3.2平台层防御 服务器管理员应在IIS中为每个网站设置好执行权限,一定别给静态网站以脚本和可执行权限。一般情况下给个“纯脚本”权限就够了
9、,对于那些通过网站后台管理中心上传的文件存放的目录,就更谨慎一点吧,执行权限设为无好了,这样就能防止别有用心的人上传ASP木马,即使上传了, ASP木马也运行不了。由于SQL注入漏洞涉及整个网站安全,一旦黑客通过这个漏洞上传了ASP木马并运行起来,那整个网站也就完蛋了。所以责任心强的服务器管理员都应该十分谨慎的配置IIS的执行权限。 同样的谨慎态度也应该用在数据库用户的权限配置上(MS_SQL,ACCESS都没有用户权限配置)。如果PUBLIC权限已经够用,那就不需要给更高的权限了,千万别把SA级别的权限随随便便地给人家啊。要知道SA可是个等同管理员权限的角色,拿到了SA权限,几乎就等于拿到主机的管理员帐号了。黑客可是能通过编程跨库进行SQL注入的,如果把SA权限给了存在SQL注入漏洞的库,就会殃及到其他的数据库了。而且黑客还可以通过调用xp_cmdshell命令得到系统的最高权限。 参考文献: 1 高静.ASP.NET中防范SQL注入式攻击研究J.通讯世界,2016,4. 2 车延雪,王志强.SQL注入式攻击与防范J.网络安全技术与应用,2014,11.专心-专注-专业
限制150内