1. SQL注入攻防基础与靶场环境搭建
作为一名长期从事Web安全研究的从业者,我经常使用SQLi-Labs这个经典的SQL注入练习靶场进行技术验证和教学。这个开源项目模拟了各种类型的SQL注入漏洞场景,从基础的联合查询注入到复杂的盲注技术都有完整案例。下面我将结合less-1到less-9的实战经验,详细解析其中的技术要点。
SQL注入的本质是攻击者通过构造特殊输入,改变原始SQL查询的逻辑结构。当Web应用直接将用户输入拼接到SQL语句中且未做适当处理时,这种攻击就会成为可能。以PHP+MySQL环境为例,典型的漏洞代码形式如下:
php复制$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id='$id'";
$result = mysqli_query($conn, $sql);
1.1 靶场环境配置要点
在开始实战前,需要确保环境正确配置:
- 下载最新版SQLi-Labs(GitHub开源项目)
- 配置PHP 7.x+MySQL 5.7环境(注意:PHP 8.x部分函数有兼容性问题)
- 修改数据库连接配置
/sql-connections/db-creds.inc中的账号密码 - 初始化数据库(执行
/sql-connections/setup-db.php)
重要提示:建议在虚拟机或隔离环境中搭建靶场,避免使用生产环境数据库。我曾遇到过因为配置不当导致本地数据库被意外删除的情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 联合查询注入实战解析
2.1 less-1漏洞点分析
查看less-1源码关键部分:
php复制$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result = mysqli_query($con1, $sql);
这里直接将GET参数拼接到SQL语句中,且使用单引号包裹,形成了典型的字符型注入漏洞。
2.1.1 闭合符判断技巧
通过输入不同测试字符观察响应:
- 输入
1':报错提示单引号未闭合 - 输入
1' --+:正常返回,确认单引号闭合 - 输入
1":无报错,排除双引号闭合
在实际渗透测试
