当前位置: 首页 > news >正文

SQLI-labs 第十七关:POST二次注入与报错注入实战解析

1. 二次注入与报错注入的核心原理二次注入就像是一个潜伏的特工它不会在第一次接触时就暴露自己。想象这样一个场景你在网站注册时输入了一个恶意用户名系统当时没有表现出任何异常。但当你后续修改密码时这个潜伏的恶意代码突然被激活这就是典型的二次注入攻击。在SQLI-labs第十七关中这个特工藏在密码修改环节。系统先用SELECT语句验证用户名此时注入被过滤函数拦截。但当验证通过后执行UPDATE语句时之前看似无害的输入突然变成了危险的注入代码。这种延迟触发的特性让二次注入特别隐蔽常规的WAF很难在第一时间发现。报错注入则是利用数据库的说漏嘴特性。就像你故意问朋友一个荒谬的问题你昨天偷了多少钱朋友可能会下意识反驳我根本没偷钱从而暴露信息。extractvalue()和updatexml()这两个函数就是这样的诱导大师当它们接收到不符合XML格式的数据时就会把数据库信息连带错误一起吐出来。2. 实战环境搭建与注入点判断先确保你的实验环境已经准备好docker pull acgpiano/sqli-labs docker run -dt --name sqli-labs -p 80:80 acgpiano/sqli-labs打开Burp Suite抓包登录界面随便输入账号密码把POST请求发送到Repeater。这里有个细节要注意现代浏览器会自动URL编码但Burp的Repeater默认不编码所以直接修改参数时要注意特殊字符的处理。测试注入点时我习惯用阶梯式探测法先试admin看是否报错然后试admin--观察行为变化最后用admin#确认注释效果在第十七关你会发现用户名字段被严格过滤但密码字段的报错提示暴露了关键信息。这里有个坑要注意MySQL的注释符#在URL中需要编码为%23否则会被当作锚点处理。3. 数据库信息提取实战确认注入点后就可以开始提取数据库信息了。这里我推荐使用extractvalue()而不是updatexml()因为前者在MySQL中的兼容性更好。实战中遇到过一个案例某CMS的updatexml()会被过滤但extractvalue()却能正常使用。获取数据库名的payloadunameadminpasswd1 and extractvalue(1,concat(0x7e,database()))#这个payload有几个设计要点0x7e是波浪号~的十六进制用作错误信息的分隔符第一个参数1是随便写的数字重点是第二个参数concat()函数把数据库名和特殊字符拼接触发报错获取表名时需要特别注意limit分页unameadminpasswd1 and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schemadatabase() limit 0,1)))#我遇到过的一个真实漏洞某系统在limit 10,1时返回超时后来发现是因为数据量太大。解决方法是用limit 100,1跳过前面的记录。4. 表结构探测与数据提取知道表名后获取字段名的技巧很关键。以users表为例unameadminpasswd1 and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schemadatabase() and table_nameusers limit 0,1)))#这里有个实用技巧用hex(table_name)代替直接的表名可以绕过某些过滤。比如unameadminpasswd1 and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schemadatabase() and table_name0x7573657273 limit 0,1)))#提取数据时最容易遇到的坑是同表查询限制。MySQL不允许在修改表的同时查询该表这就是为什么教程建议查emails表而不是users表。解决方法是用子查询或者临时表unameadminpasswd1 and extractvalue(1,concat(0x7e,(select (select username from users limit 0,1))))#5. 防御方案与实战思考开发角度防御二次注入我总结出三个关键点数据生命周期全程过滤不仅是入库时使用预编译语句时所有变量都必须参数化最小权限原则修改操作使用只读账号查询在测试过程中我发现几个有趣的变种时间盲注版当报错被屏蔽时可以用sleep()函数判断多语句注入某些配置下可以用;分隔执行多个语句日志注入把报错信息写入日志再通过其他接口读取最后提醒一个容易忽略的点测试完记得恢复数据。有次我忘记修改回来导致后来测试其他漏洞时一直失败排查了半天才发现是之前的测试数据影响了判断。
http://www.zskr.cn/news/1318416.html

相关文章:

  • 2025最权威的六大AI辅助写作网站推荐榜单
  • 利用 AsyncOpenAI 与 asyncio.gather 实现批量问题的高效并发处理
  • 告别枯燥协议!用Python脚本+逻辑分析仪实测JESD204B的F和K参数
  • 手把手教你用Python把文心一言4.0(ERNIE-Bot-4)变成你的本地聊天机器人(附完整代码)
  • SourceTree+Gitblit实战:5步搞定Windows本地局域网代码仓库,团队协作效率翻倍
  • 车载以太网测试入门:5个核心场景带你搞懂OEM到底在测什么(部件/系统/实车)
  • CH32V307V-R1-1V0开发板网络性能实测:用LwIP+TCP Echo跑满10M PHY带宽
  • 别再死磕理论了!用PyTorch手把手带你跑通第一个GAN(附完整代码与可视化结果)
  • CAD 2021 经典界面重塑与高效绘图环境搭建指南
  • 从抓包报文看实战:手把手教你解读SDP中的RTP映射(rtpmap)与负载类型
  • 计算机毕业设计Python深度学习面向农户的农业知识问答机器人 大数据毕业设计(源码+LW+PPT+讲解)
  • 从‘看’到‘穿透’:用Python实战解析不同SAR波段影像(以哨兵1号和林火监测为例)
  • 172 号卡分销代理须知|官方唯一邀请码 00500 及权益保障公告
  • 告别丢帧!用CANoe 12+和VN5610A采集CSM ECAT数据,保姆级避坑指南
  • 百度网盘API终极指南:Python自动化离线下载与文件管理完整方案
  • 2026石家庄自动化PLC编程培训优质机构推荐榜 - 元点智创
  • 2026年推荐言笔AI:高效去AI痕迹,轻松应对繁重编辑任务 - 降AI实验室
  • 告别页面空白!在uniapp H5项目中正确引入VConsole的三种姿势(附renderjs方案)
  • 民政部四级行政地址联动
  • Legacy-iOS-Kit:让旧款苹果设备重获新生的终极解决方案
  • 告别‘小目标’丢失!用DNANet搞定红外图像中的‘隐身’目标(附PyTorch代码)
  • 一文读懂sizeof...运算符及其具体应用
  • OpenPLC Editor:打破工业自动化编程壁垒的免费开源解决方案
  • 告别轮询!用GD32F4xx的USART中断实现高效串口数据收发(实测对比耗时)
  • 3分钟掌握ncmdump:网易云音乐NCM文件终极解密方案
  • 三分钟搞定B站缓存视频:m4s转MP4的傻瓜式完整教程
  • 3步搞定Football Manager面部包管理:NewGAN-Manager完全指南
  • AWVS 部署实战:从零到一构建企业级Web漏洞扫描环境
  • STM32H7实战:告别Bootloader,用QSPI Flash和内部Flash混合运行程序(含MDK配置避坑)
  • RK3562开发板Android 13系统快速测试与功能验证指南