欢迎来到天天文库
浏览记录
ID:54965659
大小:16.00 KB
页数:5页
时间:2020-04-25
《SQL注入式攻击原理及防范.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SQL注入式攻击原理及防范 【摘要】本文介绍了SQL注入式攻击的原理,结合实例阐述了SQL注入式攻击的方法,并从代码层和平台层探讨了SQL注入式攻击的防范。 【关键词】SQL;注入式;攻击 1.SQL注入式攻击的原理 进行SQL注入时一般会用到两种方式:第一是手工注入,第二是工具注入。对于猜解管理员的密码方面一般用Pangolin或者NBSI,其总体思路是[1]:(1)扫描目标网络信息(判断是否存在SQL注入漏洞);(2)判断后台数据库类型;(3)发现WEB虚拟目录;(4)上传ASP木马;(5)得到管理员权限。详细介绍如下:
2、 (1)SQL注入一般存在于形如:http://xxx.xxx.xxx/abc.asp?p=YY的网站中。 (2)在http://xxx.xxx.xxx/abc.asp?p=YY后面追加“and1=1”,并访问该网址即http://xxx.xxx.xxx/abc.asp?p=YYand1=1应该与访问原地址得到的结果相同。 (3)在http://xxx.xxx.xxx/abc.asp?p=YY后面追加“and1=2”,并访问该网址即http://xxx.xxx.xxx/abc.asp?p=YYand1=2应该与访问原地址得到的
3、结果不同,并提示数据库错误。(2,3同时满足则此网站必定存在SQL漏洞,可以进行sql注入攻击) (4)访问http://xxx.xxx.xxx/abc.asp?p=YYandexists(select*from网站数据库常用表段名)网站数据库常用表段名:adminusersadministrator等,如果进入的网页像步骤二一样,是正常网页,证明存在该表段名。找寻该SQL数据库使用的表名,进而寻找网站的管理员名、密码等信息。 (5)访问http://xxx.xxx.xxx/abc.asp?p=YYandexists(selec
4、t[网站数据库常用字段名]from第4步找到的可入侵表名)网站数据库常用字段名:adminpasswordusername等,如果进入的网页像步骤2一样,是正常网页,证明存在该字段名。找寻该SQL数据库使用的字段名,进而寻找网站的管理员名、密码等信息。 (6)访问http://xxx.xxx.xxx/abc.asp?p=YYandexists(select*from第4步找到的可入侵表名where第5步找到的可入侵字段名like'_‘)。 (7)访问http://xxx.xxx.xxx/可入侵后门字段名,找到网站后门。 (8)
5、利用从数据库中查到的敏感数据进入网站后门。 2.SQL注入式攻击的简单实例 这里我们举一个比较常见的例子来简要说明一下sql注入的原理。假如我们有一个users表,里面有两个字段username和password。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如:"selectidfromuserswhereusername='"+username+"'andpassword='"+password+"'"这里的username和password都是我们存取从web表单获得的数据。下面我们来看一下一种简
6、单的注入,如果我??在表单中username的输入框中输入'or1=1--,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了selectidfromuserswhereusername=''or1=1--andpassword='123',我们来看一下这个sql,因为1=1是true,后面andpassword='123'被注释掉了。所以这里完全跳过了sql验证。 3.SQL注入式攻击的防范 从存在的实际情况来看,包括Web服务器管理员、数据库服务器管理员、数据库设计员、代码程序
7、员在内的所有工作人员都是防御体系的关键。从Web应用程序的开发、部署、管理、维护多个方面进行审查,使程序SQL注入了漏洞最小化。我们从代码层和平台层两个方面来阐述SQL注入攻击的防御。 3.1代码层防御 从Web数据库管设计员和编写代码的角度来研究SQL注入攻击防御的。 (1)使用参数化语句。前面讲过动态字符串构造是引发SQL注入漏洞的原因之一。作为一种更加安全的动态字符串构造方法,大多数现代编程语言和数据库访问API可以使用占位符或绑定变量来向SQL查询提供参数(而非直接对用户输入进行操作)[2],这些通常称为参数化语句内容
8、是更安全的方法,可以使用它们来避免或解决很多在应用中经常见到的SQL注入问题,并可以在大多数常见的情形中使用它们来替代现有的动态查询。不过,值得注意的是,参数化语句是与一种向数据库提供潜在的非安全参数(通常作为查询或存储过程调用)的方
此文档下载收益归作者所有