PortSwigger SQL注入LAB13& LAB14
PortSwigger SQL注入LAB13&LAB14
拖更致歉,前段时间期末周和备赛时间正好撞上了,忙到飞起,现在也是终于放暑假了,可以安心更博客了
那么今天我们来做PortSwigger SQL注入的LAB13和LAB14,这两道LAB一起做的原因是LAB13可以算得上是LAB14的引入或者教程,那么我们现在开始吧:
1. 理解并掌握基于时间延迟的SQL注入
2. 通过SQL注入来获取所需administrator的密码,并完成登录
一、LAB13
1.1 分析题目

我们先来看LAB13的题目,他说应用使用了cookie进行了跟踪分析,SQL的查询结果不仅不会返回,而且服务器也不会传回任何错误。
最终的目标只是利用SQL漏洞来造成十秒的延迟
1.2 理解pg_sleep()函数
通过题目中提示给出的SQL注入指南我们可以知道,要实现10秒的时停(砸瓦鲁多!),我们需要用到pg_sleep()这个函数,那么我们就来了解一下这个函数吧。
在SQL数据库中, pg_sleep() 函数可以在指定的时间内暂停当前数据库会话的执行,他通过接收一个括号中的数值(单位为秒),而且这个数值可以是整数也可以是小数。
那么我们要做的就很简单了:抓取数据、加入新的pg_sleep(second)函数
1.3 完成LAB
通过前几个LAB的训练,我们可以很快地从Burpsuite中定位到我们所需要寻找的url并将其发送到Repeater中:

接下来我们只需要按照要求把函数插入就可以了
' || pg_sleep(10) --

插入并点击send之后,页面提示lab已解决。

【LAB 13 Payload】
二、LAB14
2.1 分析题目
接下来我们来看LAB14的题目,使用了cookie进行了跟踪分析,SQL的查询结果不仅不会返回,服务器也不会传回任何错误。
最终的目标就回到了老样子,从users表中获取administrator用户的密码并成功登录

这种获取密码的题目都是同样的思路,先使用LENGTH()来爆破密码位数,接着再使用SUBSTRING()来逐位爆破。
2.2 构造Payload
我们先来对密码位数进行爆破,核心思路就是:如果密码位数等于某个数,那就给他引入2秒的延迟,然后通过Intruder来进行爆破,于是我们得到如下Payload
';SELECT CASE WHEN(LENGTH(password) = 1) THEN pg_sleep(2) ELSE pg_sleep(0) END FROM users WHERE username = 'administrator' --
但是由于我们的Payload处在Cookie头下面,为了让解析器在分号处不把我们的Payload截断,这里我们需要把分号换成他的URL编码形式%3B:
'%3BSELECT CASE WHEN(LENGTH(password) = 1) THEN pg_sleep(2) ELSE pg_sleep(0) END FROM users WHERE username = 'administrator' --

然后将他发送到Intruder中,设置“1”作为变量,范围我设在了0-25,然后Start Attack开始攻击

通过观察结果中的Response received值可以得到该LAB中密码的长度为20

既然得到密码位数了,还是一样的道理,我们把Payload稍作更改(使用SUBSTRING()函数)就可以通过Intruder来对密码进行逐位爆破了:
'%3BSELECT CASE WHEN(SUBSTRING(password,1,1) = 'a') THEN pg_sleep(2) ELSE pg_sleep END FROM users WHERE username = 'administrator' --

然后我们把它发送到Intruder里面,攻击类型设置为Cluster bomb(集束炸弹),设置SUBSTRING中的第一个1和后面单引号中的a为变量,并且对这两个变量进行配置,然后Start Attack。

等待攻击结束之后,通过结果中的Response received值可以得到该LAB中逐位的密码值

2.3 拼接密码
接下来我们按照攻击结束之后的结果来将密码拼接起来,就可以得到最终密码的值了。

由此我们可以得出最终的密码为:lne2l1crku9s7koh86m8
2.4 验证结果
那么现在我们就去网页中使用我们获得的密码来进行登陆:

登录成功,LAB14解决。
【LAB 14 Payload】
三、总结与防御建议
总结:
- LAB13 的核心是验证时间盲注是否成立,重点在于通过构造延迟来确认 Cookie 参数存在 SQL 注入点。
- LAB14 的核心是利用时间盲注进一步枚举数据,在没有回显和报错的情况下,逐位获取 administrator 的密码。
- 这两道题虽然目标不同,但思路是一条线:先确认注入可控,再借助 Burp Suite 的 Repeater 或 Intruder 完成延时判断和自动化爆破。
防御建议:
- 使用参数化查询或预编译语句,避免把 Cookie、URL 参数等外部输入直接拼接进 SQL。
- 对所有输入做严格校验和白名单过滤,尤其是会进入查询条件的字段。
- 数据库账号遵循最小权限原则,降低注入后的横向影响面。
- 关闭或统一处理数据库错误回显,避免把结构信息暴露给攻击者。
- 对异常耗时请求、重复探测请求进行日志监控和告警,及时发现时间盲注行为。
- 对高频请求加入速率限制和风控策略,提升自动化爆破成本。
- 对敏感功能启用额外认证或二次校验,减少单点失陷带来的风险。
- 定期进行代码审计和 SQL 注入专项测试,及时修复潜在漏洞。
博客园技术分享 · 请勿用于非法测试

浙公网安备 33010602011771号