Less-21:Cookie注入(Base64编码+单引号+括号闭合)
判断注入类型与闭合方式:首先访问关卡页面,使用默认账号密码(admin/admin)登录,页面会显示当前登录用户信息。按F12打开开发者工具,切换到「Application」→「Cookies」,找到名为
uname的Cookie,其值为YWRtaW4=(即admin的Base64编码)。尝试构造恶意Payload(未编码):
admin') and 1=1#,将其进行Base64编码,得到YWRtaW4nKSBhbmQgMT0xIw==,替换原有Cookie值,刷新页面,页面正常显示,说明闭合方式正确;若将Payload改为admin') and 1=2#,编码后替换Cookie,页面无内容,确认存在注入漏洞。爆数据库名:构造报错注入Payload(未编码):
admin') and updatexml(1,concat(0x7e,(select database()),0x7e),1)#,Base64编码后替换Cookie,刷新页面,报错显示数据库名security。后续可直接爆出数据
Less-22:Cookie注入(Base64编码+双引号闭合)
判断闭合方式:登录后查看Cookie,
uname值仍为YWRtaW4=(admin的Base64编码)。构造Payload(未编码):admin" and 1=1#,Base64编码后替换Cookie,页面正常显示;替换为admin" and 1=2#,页面无内容,确认闭合方式为双引号。爆表、爆字段、爆数据:步骤与21关完全一致,只需将Payload中的闭合符
')改为",编码后提交即可,此处不再重复赘述。
Less-23:GET字符型注入(过滤注释符)
判断注入类型与闭合方式:访问关卡页面,页面报错,提示
You have an error in your SQL syntax,确认是单引号闭合的字符型注入;尝试使用?id=1 #或?id=1' --(注意--后有空格),依然有报错,判断注释被过滤掉了。绕过注释过滤:使用
and '1'='1闭合剩余SQL语句,构造Payload:?id=1' and '1'='1,页面正常显示;改为?id=1' and '1'='2,页面无内容,确认注入漏洞存在,且绕过注释过滤成功。爆数据库名:构造报错注入Payload:
?id=-1' union select 1,database(),3 and '1'='1,页面显示数据库名security(使用union注入时,需将id改为负数,确保原始查询无结果,让union查询结果显示)。后续可直接爆出数据
Less-24:POST二次注入(存储型)
1. 理解二次注入原理:注册页面使用 mysqli_real_escape_string() 函数对用户名、密码进行转义(单引号会被转义为 \'),直接注入无效;但当注册的恶意用户名被存储到数据库后,修改密码时,系统会读取该用户名并拼接进SQL语句,此时转义失效,恶意Payload被执行。
2. 注册恶意账号:访问注册页面(New User),注册用户名设为 admin'#,密码设为 123456(两次输入一致),点击注册。此时数据库中存储的用户名是 admin'#(转义后存储,但读取时未转义)。
3.登录恶意账号:使用注册的账号admin'#和密码123456登录,进入修改密码页面。
4.触发二次注入:在修改密码页面,输入新密码(如test123),点击提交。此时系统执行的SQL语句为:UPDATE users SET password='test123' WHERE username='admin'#' AND password='123456',其中#注释掉了后面的内容,实际执行的是UPDATE users SET password='test123' WHERE username='admin',即修改了admin账号的密码。
5.验证结果:退出当前账号,使用admin作为用户名,test123作为密码登录,即可成功登录,证明二次注入成功。若想进一步获取数据库信息,可构造更复杂的恶意用户名(如admin' and updatexml(1,concat(0x7e,database()),1)#),注册后登录并修改密码,触发报错注入。
Less-25:GET字符型注入(过滤OR/AND关键字)
核心考点
GET字符型注入,单引号闭合,靶场通过黑名单过滤了OR和AND关键字(不区分大小写),需通过“双写关键字”的方式绕过过滤,如将OR改为OORR,AND改为AANDND,过滤函数会删除中间的OR/AND,剩余部分拼接成完整的关键字。
判断注入类型与过滤规则:修改为
?id=1' or 1=1 -- +,页面无正常回显,说明OR关键字被过滤;尝试?id=1' oorr 1=1 -- +,页面正常显示,确认可通过双写绕过过滤,闭合方式为单引号。绕过OR/AND过滤:所有需要使用
OR的地方,替换为OORR;需要使用AND的地方,替换为AANDND,例如:?id=1' oorr 1=2 --+,页面无内容,验证绕过有效。爆数据库名:构造报错注入Payload:
?id=-1' oorr updatexml(1,concat(0x7e,(select database())),1) -- +,页面报错显示security。后续可直接爆出数据