第一次做ctf 所以如果write up有什么不对的地方还请各位指出 谢谢大家
0x00前言
拿到题目标题是到底过滤了什么东西 所以我们应该先弄清楚的是这题到底过滤了什么 首先输入1'如我们所料出现了报错 根据报错的 ' ' 1 ' ' ' 可以看出 闭合结构应该是这样的 ' id ' 接下来我们进行一些测试看看过滤掉了什么
我首先试的是这个语句 这里的%23 就是#的意思 然后现在让我们来看一下结果 我这里只截取了报错的最后一个部分
这里我们不难看出来我们的select 和 union 以及空格 还有最后的#都没有了
在这之后我又用了 // --+ 发现都没有达到我想要的效果
在查询了一些资料的时候 看到这句话
/**/在构造得查询语句中插入注释,可以做到规避对空格的依赖和关键字的识别
文章的链接我会放在最后面 有兴趣的各位可以去看看
话不多说我就进行了一下尝试 并且得到了数据库的名字和版本号
0x01获取flag
既然我们获取到了数据库名称 以及版本号 就说明可以继续获取数据库的表 然后再分析分析 话不多说直接上图
图片有可能看起来比较麻烦 所以我用代码再打一遍 union select group_concat(table_name) from information_schema.tables where '1'='1
把空格换成/**/就和上面的图片的一样了
group_concat()函数的作用就是会把返回的数值进行组合 然后返回一个字符串结果
table_name就是表的名字
information_schema 这个是一个数据库 这个数据库是存放数据库和数据表的元信息的
然后information_schema.tables 这张表就是记录了数据库里面的表
所以这个语句的意思就是 列出这个数据库的所有数据表的表明
上图
由于数据表太多了 所以我就截取了一部分 但是我们在这里可以看到 倒数第二条的 flag 所以我便猜想flag 在 flag 这个数据表中
所以我直接执行了如下的语句
?id=1%27/**/union/**/select/**/flag/**/from/**/flag/**/where/**/%271%27=%271
去掉/**/有可能看起来清晰一些
union select flag from flag where '1'='1
然后结果就出来了
flag{Y0u_@r3_5O_dAmn_90Od}
好了这样的话这题就解完了
最后是上文提到的链接 https://www.cnblogs.com/r00tgrok/p/SQL_Injection_Bypassing_WAF_And_Evasion_Of_Filter.html