哦,SQL注入漏洞,可怕的漏洞。
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
SQL注入在网络上非常热门,也有很多技术专家写过非常详细的关于SQL注入漏洞的文章,这里就不在多写了。
你可以通过“Sql Inject”对应的测试栏目,来进一步的了解该漏洞。
打开界面如下:发现数字是提交的,我先提交看看是get还是post请求,地址栏没显示,那就是post,需要我抓包。
抓包显示id可能为注入点:
那么我直接加一手单引号,看什么结果。显示语法错误,那么这里的单引号一定是闭合了。
实战中确定这里有注入点之后,可以直接使用sqlmap来跑,但是我这里是学习,所以就手动注入来得到结果。
id=2 and 1=1 回显正常,存在注入点,验证了数字型注入。
猜测返回字段的长度,id=1 order by 2
确定返回字段为2,所以查询数据库名:id=1 union select database(),2#
漏洞验证成功。