有爱,有分享,点蓝字“测试届的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的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符);
领取专属 10元无门槛券
私享最新 技术干货