CTF 简单的sql注入—–从获取表到拿到flag

第一次做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

Posted in SQL

发表评论

电子邮件地址不会被公开。 必填项已用*标注