本文来自:西安电子科技大学网络与信息安全学院
作者:安权
前言
随着安全技术的不断完善发展,现在的SQL注入漏洞已经很少能见到了,但是真的是这样吗?新的版本,新的漏洞。不妨来看看这道“easy”的CTF题吧。(题目来源于西电2022miniLCTF比赛)
由于题目环境已经下线了,暂时不能提供复现.....
我还是喜欢那个简单粗暴的世界,实力就是一切。知识就像银币,使用的时候才发生价值。
题目描述:
easySQL:
题目描述 :登录就给flag
那么我们需要的就是注出用户名以及密码了。
打开是个登录框。查看源代码发现 SQL 执行语句为:
然后 fuzz:发现把注释符过滤,单引号,select 过滤等等大多数关键字过滤了:
思路:
首先说一下需要解决的的问题:
第一:注释符,单引号过滤了怎么解决闭合的问题?
其次:关键词都给过滤完了怎么继续注入?
很容易想到的还是去bypass关键词。
但是这道题有严格的waf,任何关键词绕过都不行!
有些时候 很多事情,做不到就是做不到,做的不好就是做的不好,不管你投入了多少时间,心血和精力,世界只认结果。所以来换个方式,学新的东西。
技巧 No 1. 先尝试解决闭合问题:看到转义符: 没有过滤于是利用 , %00 截断符闭合原来的语句
后端执行语句变为:
然后提交username和password的参数看到回显:
技巧 No 2.( 关键词都过滤完了,我还注个寂寞??),乖乖去翻MySQL官方手册,发现MySQL8.0版本有一个table关键词官方文档描述TABLE和SELECT有类似的功能。
table 能够列出表里面的所有列。
因为table不能像select控制列数,除非列数一样的表,不然都回显不出来,需使用盲注判断
payload:
里面的字符是单个判断的,比如库名为mysql
以上判断都是正确的,字母大小是按照ascii码大小比较的,如果前一个字符判断不正确,后面的字符都会不正确。
解题:
原理清楚了那么这个题就很容易了:
利用
fuzz发现MySQL版本为8.0XXX
脚本如下:
总结
至此这个题就完事了。我一辈子都喜欢跟着让我感觉有兴趣的人,因为在我心目中,真正的人都是疯疯癫癫的,他们热爱生活、爱聊天,不露锋芒希望拥有一切,他们热爱技术。从不疲倦,从不讲那些平凡的东西。
长按加入天权信安
走进网络安全世界
原文始发于微信公众号(天权信安):从一道题看MySQL8.0下的SQL注入盲注技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论