拓冰建站拓冰建站
首页 / 资讯中心 / 正文

SQL注入之二阶注入学习笔记

一、什么是二阶注入二阶注入也叫二次注入是SQL注入中比较特殊的一种类型。它和一阶注入的根本区别在于一阶注入是攻击数据在第一次被处理时就触发了恶意逻辑而二阶注入是攻击数据先被正常存储到数据库中然后在后续的某个业务环节被取出并使用此时才触发注入。二阶注入的适用场景二阶注入在以下场景中特别常见用户注册功能注册时使用恶意用户名后续修改密码或查询个人信息时触发评论/留言功能评论内容被存储后台管理员查看评论时触发个人信息修改功能用户信息先被存储后续被其他操作查询时触发数据导入导出功能恶意数据先被导入后续导出或处理时触发二阶注入的核心要素二阶注入需要满足以下几个条件系统存在数据输入点注册、评论、发帖等可以写入数据写入的数据能够被安全存储即使输入点有转义也无所谓因为数据是被存储的系统存在另一个功能点会读取该数据并用于新的SQL查询读取数据后执行查询时没有做有效防御二、二阶注入的基本原理1 . 二阶注入的执行流程二阶注入的执行分为两个阶段第一阶段数据注入埋雷阶段攻击者在某个输入点提交包含恶意SQL代码的数据。此时输入点可能有转义保护如 addslashes()恶意代码被当作普通字符串存储到数据库中并未被执行。例如攻击者注册一个用户名为 admin’ – 的账号。注册时SQL语句是INSERTINTOusers(username,password)VALUES(admin\ -- ,123456)单引号被转义了恶意代码没有执行只是被当作普通字符串存储进了数据库。第二阶段数据触发引爆阶段攻击者通过某种业务操作使系统从数据库中读取第一阶段存储的恶意数据并将其拼接到新的SQL查询中。例如系统在用户登录后会查询用户信息做个性化展示。如果开发者直接将用户名拼接到SQL语句中且没有做防御处理SELECT*FROMuser_infoWHEREusernameadmin-- 此时从数据库读取的用户名 admin’ – 被直接拼入SQL。由于 – 是SQL注释符后面的单引号被注释掉了SQL语句变成了SELECT*FROMuser_infoWHEREusernameadmin-- 这条语句实际上查询的是 admin 的数据而不是 admin’ – 的数据。攻击者可能通过这种方式越权查看其他用户的信息。2.二阶注入的经典案例案例一恶意用户名修改密码假设系统允许用户通过用户名修改密码SQL语句为UPDATEusersSETpassword新密码WHEREusername用户名攻击者注册用户名 admin’ – 然后发起修改密码请求此时SQL变成UPDATEusersSETpasswordhacker123WHEREusernameadmin-- 由于 – 注释掉了后面的单引号这个语句实际上修改了 admin 的密码而不是 admin’ – 的密码。案例二恶意评论获取管理员Cookie攻击者在评论中写入scriptalert(document.cookie)/script如果后台管理员查看评论时系统没有对输出进行编码攻击者可以获取管理员的Cookie信息从而进一步利用这是XSS的例子但原理类似二阶注入的逻辑。三、二阶注入靶场实例SQLi-Labs靶场 - Less-24二阶注入SQLi-Labs的第24关专门讲解二阶注入对理解这个漏洞非常有帮助。环境说明靶场功能包含注册、登录、修改密码三个功能数据库表users 表存储用户名和密码漏洞利用过程第一步注册恶意用户注册账号admin’#密码123456注册时的SQL语句INSERTINTOusers(username,password)VALUES(admin\#,123456)反斜杠转义了单引号数据被安全存储。第二步登录并触发注入登录 admin’# 账号然后进入修改密码功能。第三步修改密码输入新密码提交修改。系统从数据库中读取当前用户名为 admin’#拼接成修改密码的SQL语句UPDATEusersSETpassword新密码WHEREusernameadmin#注释掉后续所有内容实际执行UPDATEusersSETpassword新密码WHEREusernameadmin第四步验证结果使用 admin 账号和新密码登录成功获取管理员权限。四、二阶注入的检测思路检测二阶注入不能仅扫描输入点需要对整个业务链路进行分析分析所有输入点了解哪些数据会被存储追踪数据在系统中的完整流转路径从输入到存储到使用识别所有会读取并使用这些数据的功能点对每个数据使用点进行注入测试重点关注那些拼接了用户可控数据的查询在测试时可以尝试在输入点插入特殊字符如单引号、双引号、注释符然后在后续功能点观察是否触发了SQL错误或异常行为
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门