【WEB】multiSQL

输入个万能密码进去测试:

点击"点我验证成绩"。

猜测是要总分>425,所以可以修改听力的成绩。

用fuzz测试有没有过滤:

可以看到union select联合注入,updatexml报错注入,改分要的 update等等都被拦截,那就用堆叠注入。

sql 复制代码
1';show tables;-- -
sql 复制代码
1';desc score;-- -

发现听力的字段名为listen。

WAF 的工作方式是:拿到你输入的原始字符串,用正则去匹配里面有没有连续的 update 这个词。它不会真正理解 SQL 语义。

那我们就让输入里不出现连续的 update ,但让数据库在运行时把它拼出来。靠的是 MySQL 的预处理三件套:

  • SET @q=...:定义一个用户变量,存放 "真正想执行的 SQL 字符串";
  • PREPARE s FROM @q:把这个字符串编译成一条预处理语句;
  • EXECUTE s:执行它。

关键就在 CONCAT('UP','DATE ...')------ 输入文本里写的是被拆开的 'UP' 和 'DATE',WAF 扫描时怎么都匹配不到完整的 update ;而 MySQL 执行 CONCAT 后又把它们拼成了完整的 UPDATE score SET listen=300,照常执行。

paylaod如下:

sql 复制代码
1';set @q=concat("up","date score set listen=300");prepare s from @q;execute s;-- -

再查询发现听力成绩被改成300了:

点击"点我验证成绩",flag出来了

相关推荐
计算机魔术师18 小时前
半年翻倍!OpenAI再融300亿,估值冲到1.4万亿
前端
研☆香18 小时前
jQuery + Swiper.js 实现动态渲染轮播图
前端·javascript·jquery
子兮曰19 小时前
Node.js 50个优势场景盘点:一个人单干,为啥我多数时候只用它
前端·后端
IT_陈寒19 小时前
我花3小时debug,就因为JavaScript这个隐式转换坑
前端·人工智能·后端
excel19 小时前
Nuxt 中 useSeoMeta 与 useHead 的区别
前端
竹林81819 小时前
OmniGame 技术白皮书:从零依赖到 WebRTC P2P,重新定义网页小游戏的工程上限
前端·浏览器
ss27319 小时前
AI全栈实战 | 2.1-02 CSS 布局:垂直居中为什么是经典面试题?所有布局在解决什么矛盾
前端·css
律宏阔20 小时前
Flutter Riverpod 3:统一打印 Provider 错误与自动重试日志
前端·flutter
周洲083020 小时前
STM32片内Flash读写深度详解|掉电参数保存、底层原理
linux·前端·stm32
data analyse 45620 小时前
埋点工具的私有化部署成本高吗?
前端·数据分析·github