兔兔的%Blog功能中的SQL注入 write up
兔兔是Vidar协会的机器人,具有迎新、查询博客、printf等功能,其中%blog功能即是查询博客,由于其目前设计较为简单,通过SQL注入可以对其进行攻击。对于”攻击”这个概念,我最初以为只有”破坏”的意思,后来从ek1ng学长那里明白”获取其数据库所有数据””获取本查询不到的数据”都是对其攻击的表现。这个小游戏有两个目标:1、一次性查出所有学长的blog 2、找到flag。这也算是一道web的入门题,面向零基础的小白(比如L0tus)
那就一起来试试简单的SQL注入吧~
1、页面观察
首先要判断出其注入类型,输入以下内容
%blog ek1ng"#
猜测其注入类型为字符串,便直接在ek1ng学长的id后面直接加了 “ ,其中#的作用为将其后面的代码注释掉(不同地方的符号使用不同,例如mysql网站中注释符使用的是- - +),兔兔的反馈是ek1ng学长的个人blog。
2、注入点判断
再尝试一下把 “ 去掉
%blog ek1ng #
兔兔的反馈是vidar官网的网址,这就意味着语法不正确出现报错。
再分别输入以下代码
1
2%blog ek1ng" and 1 = 1# 不报错
%blog ek1ng" and 1 = 2# 报错
显然,注入点为引号
同时也可以猜测出兔兔内置的sql语句为
select form 数据表名 where blog的字段值 = "
3、判断当前表的字段数
使用order by指令,通过列数递增直到报错便可判断列数,不过这里我从3开始试探,结果报错了,再到2也报错,于是确定列数只有1,(其结构还是比较简单的)
1 | %blog ek1ng" order by 3# 报错 |
可以判断列数只有1
4、判断显示位
当然这个是用在显示位较多的题目当中,具体做法是:当让第一步查找为false时,其回显不会出现多于成分,其后紧跟union select 1,2,3···#
当然兔兔这里显示位只有1,所以根本不需要这一步,但是愚蠢的l0tus还是尝试了1,2,3
1 | %blog " union select 1,2,3# 报错 |
5、爆数据库名
其详细步骤应该为,在第一步查找为false时,根据上一步显示位的输出判断对应的列数,并在联合查找时将该列数位置的查找值改为database(),目的也就是让数据库名回显在我们想要的显示位。不过兔兔这里的数据库结构比较简单,回显位置只有一个,列数也只有1,于是注入语句直接这么写:
1 | %blog " union select database()# |
其回显值为blog,那么这个数据库的名字就叫blog
6、爆数据表名
第一步查找为false时,利用联合查找来获得数据表名,这一步主要就是一些SQL语法的问题。GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接,如果分组中括号里的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔(也就是一起输出)。当然这里只有一个table_name。其中information_schema.tables表示库中所有表的信息,包括这个表从属的库。那么其后的table.schema = database()表示所查找的表从属的库等于我们之前查过的database(),于是可以查出我们需要的库里所有的表名
1 | %blog " union select group_contcat(table_name) from information_schema.tables where table_schema = database()# |
7、爆表中字段名
知道了表的名字我们下一步要做的就是查出这个表里的所有字段名字,这一步与上一步类似,将表中的字段名并列输出即可。其中table_schema表示库名,table_name表示表名,我们先后对blogs表和flag表下手
1 | %blog " union select group_concat(column_name) from information_schema.columns where table_schema = "blog" and table_name = "blogs"# |
8、爆字段数据
这是最后一步了,也就是获取数据完成一次攻击,其语句反而最简单,大家应该一眼就看懂了吧~
1 | %blog " union select group_concat(blog,"--",id,"--",nickname) from blogs# |
9、本文的最后
现在是08-02 0:45 写完了这篇文章
首先,感谢您的驻足,祝您永生愉悦!
这道小入门题是上周二也就是七天前做出来的,现在把解题过程再呈现一遍,也算是自己复习的过程,回头看看发现知识点确实需要经常回顾,兔兔这道题采用的是SQL注入,是web安全的学习中必不可少的知识点,也是这道题极大激发了我对web的兴趣而且给了我一点点成就感,这里需要感谢ek1ng学长的耐心指导,也感谢他的奶茶。
希望以后可以在web安全的路上越走越远,也希望能早日加入Vidar!