当前位置:文档之家› sql注入漏洞测试指南

sql注入漏洞测试指南

sql注入漏洞测试指南
一、s ql注入的定义
一般是指在存在SQL注入漏洞的web应用上,攻击者将恶意构造的SQL语句通过web应用的输入点注入到后端数据库中
执行,以达到恶意操作数据库数据的目的。

SQL注入是通过正常的web应用服务器端口进行的,表面上与正常的数据请求没什么区别,如果不对这类恶意构造的SQL
语句进行防御的话,数据库很可能会因为SQL注入漏洞的存在
导致数据库中的信息受到威胁,比如数据被删除,挂马,留后
门,甚至被进一步利用而拿到操作系统的管理员权限。

二、s ql注入攻击是如何发生的
无论是内网环境还是外网环境(互联网),B/S模式架构的web应用(以下指网站)都直接或者间接地受到各种类型的web
攻击。

对于后端数据库来说,以SQL注入带来的危害最为普遍,
由于网站服务端语言自身的缺陷与程序员编写代码的安全意识
不足导致了攻击者可以将恶意SQL语句注入到正常的数据库操
作指令上,从而在数据库中被解析执行。

注入之前需要找到网站的各类与数据库形成交互的输入点。

通常的一个网站的输入点包括:
表单提交,主要是POST请求,也包括GET请求等;
URL参数提交,GET请求;
Cookie参数提交;
HTTP请求头部的一些可修改的值,比如Referer、User_Agent等,cookie也是存在于HTTP请求头中;
一些边缘的输入点,比如mp3文件的一些文件信息等;
其实只要服务端从客户端直接或间接获取到数据这一过程都是一次输入过程,无论直接或间接,输入的数据都应该默认认为是不安全的。

上面的各类输入点,只要任何一点存在过滤不严,过滤缺陷等问题,都有可能发生SQL注入攻击。

很多时候SQL注入的过程都是由工具完成的,甚至包括大批量注入工具的使用。

三、s ql注入举例
假设DB中存在如下数据:
+----+---------+----------+
| id | uid | password |
+----+---------+----------+
| 1 | test | abc |
| 3 | user | abc |
| 5 | user2| abc |
| 6 | admin | abc |
+----+---------+----------+
正常数据库查询语句:SELECT * FROM user WHERE uid='admin' AND password='abc';
用户名框注入:'123' OR '1'='1',密码框输入:'abc' -->sql 语句变为:SELECT * FROM user WHERE (uid='123' OR '1'='1') AND (password='abc');
可查询到所有密码为abc的用户,并登陆成功。

密码框注入:'123' OR '1'='1',用户名框输入:'admin' -->sql 语句变为:SELECT * FROM user WHERE (uid='admin' AND password='123') OR ('1'='1');
可查询到所有用户,并登陆成功。

用户名框注入:'123' OR '1'='1',密码框注入:'123' OR '1'='1' -->sql语句变为:SELECT * FROM user WHERE [(uid='123' OR '1'='1') AND password='123'] OR '1'='1';
可查询到所有用户,并登陆成功(可以看出结果和只在密码框中注入sql的结果是一样的)。

上面中的()[]是为了给sql断句,以便理解(这样就应该很好理解了吧,一个很简单的逻辑哦,我就不解释了)。

实际应用中并无此类括号。

注:如果知道了DB中某Table的tablename。

则可以对其进行破坏,eg密码框注入:'123'; drop table tb_name; -->。

相关主题