DVWA系列之6 SQL注入漏洞的挖掘与防御

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

下面我们来查看high级别的SQL注入源码。

image

可以看到除了之前的mysql_real_escape_string()函数之外,在它前面还多加了一个stripslashes()函数,这个函数的作用是删除由 addslashes() 函数添加的反斜杠,也就是去除addslashes()函数的转义。

这里为什么要有这个操作呢?这是由于在high级别下,PHP的magic_quotes_gpc被自动设为on,magic_quotes_gpc被称为魔术引号,开启它之后,可以对所有的GET、POST和COOKIE传值的数据自动运行addslashes()函数,所以这里才要使用stripslashes()函数去除。magic_quotes_gpc功能在PHP5.3.0中已经废弃并且在5.4.0中已经移除了,这也是为什么在DVWA中一直强调使用mysql_real_escape_string()函数进行过滤的原因吧。

另外还可以发现,在执行查询之前,使用了if语句进行判断,判断的条件是一个is_numeric()函数,也就是判断用户输入的数据是否是数字型,只要不是数字型就一概报错,这样那些and、or、select等语句都无法执行了。

最后在具体执行查询时,还要求$id是字符型。经过这样重重防护,这样页面就很难注入了。

所以DVWA中的high级别其实是为我们展示了一个样板,告诉我们该如何从代码层面来防止SQL注入。至于high级别能否被注入,那估计只有那些真正的黑客高手才能做到了。

最后总结一下,如何从代码层面防止SQL注入。

  • 对于数字型注入,只要使用if语句,并以is_number()函数作为判断条件就足以防御了。

  • 对于字符型注入,只要对用于接收用户参数的变量,用mysql_real_escape_string()函数进行过滤也就可以了。

那么又该如何从代码层面来挖掘SQL注入漏洞呢?

这里的首要原则是:用户的一切输入都是有害的,或者说是不被信任的。

所以漏洞挖掘主要可以从以下几个方面着手:

一是代码中负责获取用户数据的变量,这些变量主要包括:$_GET、$_POST、$_COOKIE、$_SERVER。

二是代码中负责执行数据库查询操作的函数,如mysql_query()。

我们可以在代码中对这些变量和函数进行搜索跟踪,从而分析是否存在漏洞。

这里可以使用一款名叫闪电文件搜索的软件来进行查找分析,如下图所示。

image

我们从中选取DVWA的登录文件login.php进行分析,可以发现这里的参数类型是字符型,主要从两个方面采取了防御措施:一是使用mysql_real_escape_string()函数进行过滤,二是在mysql_query()函数之前加了@符号,抑制报错信息。因而这个页面就是相对安全的。

image


本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1720191


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
2月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
32 0
|
2月前
|
SQL 数据库
小课堂 -- 绕过去除特殊字符的sql注入
小课堂 -- 绕过去除特殊字符的sql注入
22 0
|
2月前
|
SQL Java 数据库连接
[SQL]SQL注入与SQL执行过程(基于JDBC)
[SQL]SQL注入与SQL执行过程(基于JDBC)
50 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
48 0
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
39 0
|
2月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
416 1
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
14天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0