安全性测试之SQL注入

有爱,有分享,点蓝字“测试届的LV”关注

最近几天有两个小伙伴提出想了解安全性测试方面的知识,今天正好有时间梳理了一版sql注入方面的知识,希望多少有一些收获。

1

什么是sql注入

就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

2

引起sql注入的原因

程序员在开发过程中不注意sql语句书写规范、未对特殊字符进行过滤,导致可以通过sql灵活多变的语法,构造精心巧妙的语句,提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。

3

sql注入受到的威胁

数据泄露

修改现有数据

插入新数据

系统泄露

4

如何进行sql注入测试

通过sql注入工具进行扫描(sqlmap)

人工检查sql注入点

总体目标:人工的添加条件或者修改条件,使原来sql语句的本意失效,但又可以按照注入者的想法执行。

第一步:确定可能存在sql注入点,即能提交表单的页面,都有可能存在sql注入点

第二步:通过各种方式(添加、修改条件),使本意的sql失效且可以执行,通过返回的错误信息,判断是否存在注入点。

具体实施,先了解测试目标的url,了解url的参数输入;然后通过修改参数的条件,来检查是否存在注入

#################################

参数为user=value and password=password

做法:检查传递的参数是数字还是字符,如果为数字,在网页链接传递参数时,添加or 1=1,或者' or 1=1#(注视掉后面的sql语句),

如果可以登录证明存在sql注入点

#################################

如果实验出具体的数据库,可以根据对应的数据库,使用查询分析器执行语句,然后再填入具体的注入值,这样更能准确的找准我们的注入点

常用的注入值

参数为数值型检查

直接加'

and 1=1

and 1=2

or 1=1

参数为字符型检查

直接加'

and '1'='1'

and '1'='2'

搜索型: 关键字%' and 1=1 and '%'='%

关键字%' and 1=2 and '%'='%

检查表的

and exists (select * from admin)

检查字段的

and exists (select username from admin)

检查id的

and exists (select id from admin where ID=1)

5

sql注入如何预防

1、从开发者的角度来说,防范措施如下:

转义敏感字符及字符串

SQL的敏感字符包括:

“exec”, “xp_”, “sp_”, “declare”, “cmd”, “Union”, “+”, “//”, ”..”, “;”, “’”, “–”, “%”, “0x”, “>

屏蔽出错信息:阻止攻击者知道攻击的结果

在服务端正式处理之前提交数据的合法性(合法性检查主要包括三 项:数据类型,数据长度,敏感字符的校验)进行检查等。最根本的解决手段,在确认客 户端的输入合法之前,服务端拒绝进行关键性的处理操作.

2、从测试人员的角度来说,防范措施是:

测试需求前置(静态检查需求),应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下几项安全性问题:需求中应说明表单中某一field的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符);

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180316G08MRL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券