目录
最近在学习SQL注入,这里使用pikachu靶场中的SQL注入来复习+练习一下SQL注入的方法
进入SQL模块中可以看到有好几种注入的类型,我们先点击到概述:
可以看到是这样介绍SQL注入的:
哦,SQL注入漏洞,可怕的漏洞。
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
1、数字型注入(post)
点击来到第一个模块这里,可以看到是一个下列选项,选择不同的id会返回不同的用户的信息:
但是url中没有显示,是POST型的传参,因此这里我就使用Burpsuite抓包查看,可以看到传入的id=1返回页面如下
下面尝试使用 and 1=1 和 and 1=2测试:
可以看到两个页面显示的不同,说明存在注入点,那么下面就可以尝试使用联合查询,查询数据库中的列数和数据库名称:
通过多次尝试就会发现数据库是两列的,那么下面查询数据库名称和用户名称:
可以看到成功的查询出了数据名称和用户名称,后面就可以通过information_schema数据库查询出数据库中的表名,列明,数据
2、字符型注入(get)
来到第二关,可以看到是一个输入框,判断应该是字符型注入
尝试输入输入查询一下看看结果,结果如下:
尝试闭合:
可以看到闭合后报错了说明是存在注入点的
下面就是判断列数了:
通过反复尝试也可以判断出列数是2列的